2016-06-20 16 views
0

等值線圖是一個沒有重複字母,連續或不連續的字。實現一個函數,該函數確定僅包含字母的字符串是否爲等值線圖。假設空字符串是一個等值線。忽略信箱。檢查python函數從codewars中確定等值線

is_isogram("Dermatoglyphics") == true 
is_isogram("aba") == false 
is_isogram("moOse") == false # -- ignore letter case 

這裏是我的代碼:

def is_isogram(string): 
    string = string.lower() 
    for char in string: 
     if string.count(char) > 1: 
      return False 
     else: 
      return True 

,當我試圖運行測試代碼Test.assert_equals(is_isogram("moOse"), False, "same chars may not be same case")它失敗了,但我想我所做的一切轉換成小寫。有人可以幫忙嗎?

+0

想想什麼時候你的函數返回 - 有多少''米'在''駝鹿'? – jonrsharpe

+0

你的代碼只會嘗試第一個字符,當駝鹿問題在第二個時 – Whitefret

+0

我以爲當我使用「for」時,它會檢查字符串中的每個字符? –

回答

2

試試這個:

def is_isogram(string): 
    string = string.lower() 
    for char in string: 
     if string.count(char) > 1: 
      return False 
    return True 

在你的代碼時is_isogram("moose")被調用時,它會看到第一個字符的(「M」)數不大於1,那麼它將返回true。一旦它碰到return語句,它將停止對其餘字符串的執行。所以你應該只在for循環之後寫return True以確保函數檢查整個字符串。

但是,如果在任何時候發現一個角色的數量大於1,那麼它只會返回False並停止執行,因爲當條件不成立時找到一個點時沒有再檢查點。

+0

它的工作!謝謝! –

1

如何使用sets?鑄造串入一組將丟棄重複的字符,導致等值線以返回作爲True,作爲設定的長度將不會從原始字符串的長度不同:

def is_isogram(s): 
    s = s.lower() 
    return len(set(s)) == len(s) 

print is_isogram("Dermatoglyphics") 
print is_isogram("aba") 
print is_isogram("moOse") 
print is_isogram("") 

此輸出:

True 
False 
False 
True 
+0

這對我來說是新的,我學到了,謝謝! –

+0

不用擔心,gl! – Bahrom

0

讓我們定義的等值線得好: 根據維基百科的等值線圖是在沒有多次發生一個字。 check here for more about an isogram

只是提醒 我寫這篇文章的代碼和它的工作對我來說:

def is_isogram(argument): 
    print(len(argument)) 
    if isinstance(argument,str): 
     valeur=argument.lower() 
     if not argument: 
     return False 
     else: 
     for char in valeur: 
      if valeur.count(char)>1 or not char.isalpha(): 
       return False 
     return True 
    else: 
     raise TypeError("need a string ") 

注意:隱藏的測試是事實,你必須檢查字符串中的字符是字母字符az,當我添加它通過所有隱藏測試 投票如果這有幫助