2017-01-18 29 views
0

Ich brauche Hilfe mit einer Funktion, die nicht entscheiden kann, wie eine Reihe von Zahlen enthalten. Das ist meine Funktion und ich weiß nicht, warum nicht richtig mit den Zahlen in einem Bereich funktioniert.Problem mit einer Reihe von Zahlen python

def word_score(word): 
    """ (str) -> int 
Return the point value the word earns. 

Word length: < 3: 0 points 
      3-6: 1 point per character for all characters in word 
      7-9: 2 points per character for all characters in word 
      10+: 3 points per character for all characters in word 

>>> word_score('DRUDGERY') 
16 
""" 
if len(word) < 3: 
    return 0 
elif len(word) == range(3, 6) : 
    return len(word) 
elif len(word) == range(7, 9): 
    return len(word)* 2 
elif len(word) >= 10: 
    return len(word) * 3 



return word_score 

Antwort

1

range enthält keinen letzten Wert. Zum Beispiel wird range(0,3) produzieren nur 0,1 und 2, aber nicht 3.

Auch sollten Sie überprüfen, ob Ihre len(word) in Reichweite ist und nicht, wenn es auf einen Bereich, für len(word) gleich ist, ist ein String und Reichweite ist ... Bereich, so wird es immer produzieren False.

sollte Ihr Code wie folgt aussehen:

if len(word) < 3: 
    return 0 
elif len(word) in range(3, 7) : 
    return len(word) 
elif len(word) in range(7, 10): 
    return len(word)* 2 
elif len(word) >= 10: 
    return len(word) * 3 

, wenn Sie Bereich verwenden möchten.

1

Sie in Operator verwenden sollte, hier ist deine Schuld:

num = 4 
num == range(3, 6) # false 
# it will be true if num = [3, 4, 5] 
num in range(3, 6) # true 
# it means num is 3 or 4 or 5 
1

Was Sie mit diesem Code zu tun Überprüfung nicht, wenn die Zahl innerhalb eines bestimmten Bereich ist, Sie‘ Prüfen Sie erneut, ob Ihre Nummer einem Zahlenbereich zwischen den beiden, die Sie angeboten haben, entspricht. Bereich ist nicht für die von Ihnen beschriebene Verwendung, sondern für das Generieren von Bereichen, über die iteriert werden soll. Verwenden Sie stattdessen if number >= 3 and number >= 6: print ("Within range")

Sie würden nicht „in“ verwenden möchten, da diese jede einzelne Zahl in der Menge überprüft, ob es auf der einen gleich ist, dass man es gab, dies sehr ineffizient ist und arbeitet in (O) n Zeit.

Verwandte Themen