2016-04-03 8 views
1

Dies ist eine Funktion für ein Pangram, das ich geschrieben habe. die alpha[num] aus irgendeinem Grund nimmt a,c,e,g etc statt a,b,c,d,e des Nehmens usw.Python Pangram überspringt zweiten Buchstaben

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' 

Antwort

2

Sie ändern alphabet während über sie iterieren, die Ihre Misses verursacht.

Dieser Code könnte jedoch erheblich vereinfacht werden, um die Leistung zu verbessern, während Sie gerade dabei sind. Speichern Sie Ihr Alphabet statt der doppelten Iteration in set, und durchlaufen Sie die Zeichenfolge, wobei Sie jedes Zeichen entfernen, auf das Sie stoßen (O (1) -Operation in einer set). Wenn Sie fertig sind laufen, wenn die set leer ist, es bedeutet, dass Sie jeden Buchstaben in Ihrem Alphabet begegnet sind, machen die Bespannung ein pangram:

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:
Eigentlich noch eleganter, Sie könnten beide Strings set s konvertieren und subtrahieren sie:

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

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

    return len(alpha) == 0 

Oder als oneliner:

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