2016-04-03 56 views
1

這是我寫的一個pangram函數。 的alpha[num]出於某種原因需要a,c,e,g等,而不是採取a,b,c,d,e跳過第二個字母的蟒蛇跳

def ispangram(str1,alphabet=string.ascii_lowercase): 

    alpha = [] 
    alpha += alphabet 
    str1 = list(str1) 
    for num in range(0,25): 
     print num 
     print alpha[num] 
     for equal in str1: 
      print equal 
      if alpha[num] == equal: 
       alpha.pop(num) 
       print alpha 
       break 
      else: 
       continue 

    if alpha == none: 
     print 'true' 
    else: 
     print 'false' 

回答

2

您正在修改alphabet在遍歷它,這是造成你的失誤。

儘管如此,這段代碼可以大大簡化,但是在您處理時可以提高性能。代替雙重迭代,將字母保存爲set,然後遍歷字符串,刪除遇到的每個字符(set中的O(1)操作)。當您完成迭代,如果set是空的,這意味着你已經遇到的每個字母在字母表的,使得這個字符串全字母短句:

def ispangram(str1, alphabet = string.ascii_lowercase): 

    alpha = set(alphabet) 
    for ch in str1: 
     if ch in alpha: 
      alpha.remove(ch) 

    return len(alpha) == 0 

編輯:
其實,更優雅,你可以兩個字符串轉換爲set S和相減:

def ispangram(str1, alphabet = string.ascii_lowercase): 

    alpha = set(alphabet) 
    alpha -= set(str1) 

    return len(alpha) == 0 

,或作爲oneliner:

def ispangram(str1, alphabet = string.ascii_lowercase): 
    return len(set(alphabet) - set(str1)) == 0