2016-04-03 8 views
1

これは私が書いたパングラムのための関数です。何らかの理由で alpha[num]ではなく、あなたのミスの原因となっている、それを反復しながら、あなたはalphabetを変更しているなどpython pangramは2番目の文字をスキップします

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

a,b,c,d,eを取るのa,c,e,gなどを取ります。

このコードはかなり単純化することができますが、パフォーマンスは向上します。二重反復の代わりにアルファベットをsetに保存し、文字列を繰り返して、遭遇する各文字(O(1)の操作はset)を削除します。あなたが反復終わったら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 

EDIT:
実際には、もっとエレガントに、

def ispangram(str1, alphabet = string.ascii_lowercase): 
    return len(set(alphabet) - set(str1)) == 0 
:onelinerとして、

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

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

    return len(alpha) == 0 

をまたは:あなたはset sの両方の文字列を変換し、それらを引くことができ

関連する問題