2016-04-20 7 views
1

Ich habe den folgenden Python-Code für eine Übung in Python für die Informatik erstellt. Der Code wird ausgeführt, erkennt jedoch eine Eingabe des Benutzers, der größer als 1 ist, nicht als numerisch. Jede Hilfe wäre willkommen.Python 3 - Code erkennt keine Benutzereingabe größer als 1 als numerisch

def isfloat(string): 
    try: 
     float(string) 
     if float(string) == True: 
      return True 
    except ValueError: 
     return False 

user_input = input('Please enter a real number. Type \"done\" to exit and tally your entries \n> ') 
data = 0 
count = 0 

while isfloat(user_input) == True: 
    data = data + float(user_input) 
    count = count + 1 
    user_input = input("Please enter another value \n> ") 
    isfloat(user_input) 

else: 
    if (isfloat(user_input) == False) and (user_input == "done"): 
     print("The sum of your entries is: " + str(data)) 
     print("The number of entries was: " + str(count)) 
     exit() 
    else: 
     print("The entry was not a numeric value \n") 
     print("The sum of your valid entries is: " + str(data)) 
     print("The number of valid entries was: " + str(count)) 
     exit() 

Antwort

0

Das Problem liegt in der Tatsache, dass float(string) nie True zurückkehren; es wird immer eine Zahl vom Typ floatoder zurückgegeben, es wird eine ValueError ausgelöst, wenn der Eingang nicht in einen Float umgewandelt werden kann.

Um dies zu beheben, müssen Sie Ihre if Anweisung entfernen und einfach True Rückkehr nach float(string) in Ihrer isfloat Funktion aufrufen. Wenn float(string) eine ValueError auslöst, gibt isfloatFalse zurück, wie Sie erwarten würden; Andernfalls wird fortgefahren und True zurückgegeben.

def isfloat(string): 
    try: 
     float(string) 
     return True 
    except ValueError: 
     return False 
+0

'float (string) == true' wird passieren, wenn' string' ist ' "1"' oder ' "1.0"', weil 'true' ist eine Unterklasse "int" mit dem Wert "1". Aber es ist ein schrecklicher Test. – ShadowRanger

+0

Ich stimme zu, obwohl ich nicht den Rest des Codes ändern wollte; Ich wollte nur das Problem beheben, nach dem das OP gefragt hat. Ich ändere meinen Beitrag, um das klarer zu machen. – caleb531

0

Das Problem ist, mit Ihrem isfloat. Sie sollten das Ergebnis von float mit True nicht vergleichen. Stattdessen tun so etwas wie:

def isfloat(string): 
    try: 
     float(string) 
     return True 
    except ValueError: 
     return False 

Sie brauchen nicht wirklich zu etwas mit dem Rückgabewert von float zu tun. Wenn dieser Aufruf keinen Fehler auslöst - Sie haben ein Float, geben Sie einfach True zurück.

Es könnte verlockend sein, die Linie

if float(string): return True 

zu verwenden, die fast Arbeit würde aber "0"

+0

Danke John. Ich bin nur etwa eine Woche drin, sodass der Nebel noch nicht aufgegangen ist. Das hat das Problem absolut behoben. –

1

Das ist lächerlich falsch klassifizieren würde:

if float(string) == True: 

Das Kontrolle ist, wenn die float umgewandelt Wert ist gleich True (das ist numerisch 1).

Überprüfen Sie einfach für die Ausnahme und gehen:

def isfloat(string): 
    try: 
     float(string) 
    except ValueError: 
     return False 
    else: 
     return True 
Verwandte Themen