2016-11-24 4 views
0
IDnum = input("\nprompt: ") 

if int(IDnum) >= 0 : 
    if int(IDnum) in T.keys() : 
     print("ID number(s) that {} will contact is(are) {}.".format(int(IDnum),T[int(IDnum)])) 
    else : 
     print("Entered ID number {} does not exist.".format(int(IDnum))) 
else: 
    break 

ist Es ist eigentlich eine while-Schleife, ID-Nummern empfangen und überprüfen, ob die Zahlen in der Datei sind.Prüfen, ob die Eingabe int> = 0 mit if-Anweisung

Ich möchte es unterscheiden, ob die Eingabe eine Ganzzahl> = 0 ist und wenn es etwas anderes ist (zB Leerzeichen, Enter, Zeichen, Float, etc.), brechen Sie die Schleife.

Wie kann ich dies mit if-Anweisungen tun?

Ich habe versucht, wenn IDNUM == '' oder IDNUM == '' oder int (IDNUM) < 0: aber wie Sie wissen, kann es nicht alle anderen Fälle abdecken.

+2

ich einfach mit 'input_string.strip gehen würde() isdigit()' zu überprüfen, für eine positive ganze Zahl ist. –

+0

@SvenMarnach Aber das würde bedeuten, zweimal durch die Num-Zeichenfolge zu gehen, einmal für die Validierung und eine andere für die Konvertierung – comiventor

+0

@comiventor Ich denke, es ist der lesbarste und einfache Code. Leistung spielt hier keine Rolle (und beachten Sie, dass das Auslösen einer Ausnahme eher langsam ist). –

Antwort

0
T = {1: 1, 2: 2} 
while True: 
    IDnum = input("\nprompt: ") 
    try: 
     num = int(IDnum) 
     if num < 0: 
      raise ValueError('Negative Integers not allowed') 
    except ValueError: # parsing a non-integer will result in exception 
     print("{} is not a valid positive integer.".format(IDnum)) 
     break 

    if num in T: 
     print("ID number(s) that {} will contact is(are) {}.".format(num,T[num])) 
    else: 
     print("Entered ID number {} does not exist.".format(num)) 

Dank @adirio und @ moses-koledoye für die vorgeschlagenen Verbesserungen.

+0

würde vorschlagen, den größten Teil des Codes aus der try-Klausel herauszuholen und eine else-Klausel zu verwenden, um zu vermeiden, dass 'ValueError' im inneren' if' automatisch stört. – Adirio

+0

@Adirio gab es ein Extra sonst ohne wenn in Ihrem Vorschlag. Ich habe versucht, es zu verbessern, aber nicht sicher, warum SO nur entfernt Kredit an Sie :( – comiventor

+1

Das andere war in Ordnung, es gehörte zu dem Versuch außer else-Anweisung, suchen Sie nach dieser Art von Aussagen – Adirio

0

Führen Sie die Überprüfung mit einer try-except-Anweisung durch.

def is_pos_int(IDnum): 
    ''' Check if string contains non-negative integer ''' 
    try: 
     number = int(IDnum) 
    except ValueError: 
     return False 
    if number >= 0: 
     return True 
    else: 
     return False 

Zum Beispiel

is_pos_int('1 ') # notice the space 

Out[12]: True 

is_pos_int('-1') 

Out[13]: False 

is_pos_int('1.0') 

Out[15]: False 

is_pos_int('word') 

Out[16]: False 

Dann:.

while True: 
    if not is_pos_int(IDnum): 
     break 
    else: 
     val = int(IDnum) 
     if val in T.keys() : 
      print("ID number(s) that {} will contact is(are) {}.".format(val, T[val])) 
     else : 
      print("Entered ID number {} does not exist.".format(val)) 
Verwandte Themen