2016-04-03 3 views
1

Bu, yazdığım bir pangramın işlevidir. nedense alpha[num] yerine vb a,b,c,d,e gözönüne alarak özlüyor neden olan, üzerinde yineleme sırasındapython pangram ikinci harfe göre atlama

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' 

cevap

2

Sen alphabet modifiye edilir a,c,e,g vb sürer.

Bu kod, performansınızı artırırken, önemli ölçüde basitleştirilebilir. Çifte yineleme yerine, alfabenizi set'a kaydedin ve karşılaştığınız her karakteri (set'da O (1) işlemi) kaldırarak dizginin üzerine yineleyin. Eğer yineleme bitirdiğinizde set boşsa, bu siz, alfabenin her harfini karşılaşılan bu karakter dizisinin bir pangram yapma ettik anlamı:

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 

DÜZENLEME:
Aslında daha zarif,

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

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

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

    return len(alpha) == 0 

Veya: set s hem dizeleri dönüştürmek ve onları çıkarmak olabilir