2017-03-29 9 views
-1

ich ein Programm geschrieben, die Eingangszahl von 127. Der Eingang alpha sowie Nummer 9.Python Während/für/if-Anweisungen

Neben Nummer 9, es erlaubt keine Zahl akzeptiert keine vervielfacht, dass enthält 9 z 99, 19 usw. Können wir das überwinden?

Wenn ich "99" eintippe, druckt es auch zweimal "Banned number". Ist dies mit der ersten Aussage verbunden?

Ich weiß, dass dieses Programm nutzlos ist, was es eindeutig ist - ich ging von der Spur beim Trainieren von Schleifen und das ist die endgültige Form. Gibt es eine Möglichkeit, diesen Code kürzer zu machen? Können wir beide Elifs mit einem einfachen Code überflüssig machen?

Ich würde mich über Ihre Geduld freuen, da ich Python erst letzte Woche gestartet habe, danke.

Antwort

-3

Nehmen Sie die Logik aus der Schleife, und die Mitgliedschaft Prüfung invertieren:

banned_number = "9" 
while True: 
    number = input("number ") 
    if banned_number in number: 
     print ("Banned number.") 
    elif number.isalpha(): 
     print ("Sorry, numbers only.") 
    elif number.isdigit(): 
     a = int(number) 
     print(a* 127) 
+0

Sagen wir, wir haben zwei verschiedene verbotene Nummern, 9 und 1. Wie können wir dann fortfahren? Wenn wir es wieder auf for loop zurückstellen, gibt es es trotzdem, damit es nicht mehr "Verbotene Nummer" druckt, wenn wir 11, 99 usw. eingeben? Vielen Dank. – Ramon

+0

@Ramon - Das wäre 'banned_number nicht in der Zahl und other_number nicht in der Zahl', oder das allgemeinere' not any (n in number für n in banned_numbers) ', oder' set (number) - set (banned_numbers) == Satz (Nummer) '. Und dafür gibt es keinen Grund, eine Schleife zu verwenden. – TigerhawkT3

2

zunächst der lexikalischen Vergleich Sie als Strings falsche Ergebnisse in Bezug auf die Zahlen holen.

Also, wenn Sie Interesse an bestimmten Arten geprüft werden sollen, müssen Sie int mit int und str mit str vergleichen korrekte Ergebnisse zu erhalten.

Sie können isinstance(a,type) verwenden, um nach Datentypen von Werten zu suchen, die canonical way dies tun. Sie können etwas tun:

banned_number = [9, 1] 

while True: 
    input_num = input("number ") 
    # This will work for both Python 2.x and Python 3.x 
    try : 
     number = int(input_num) 
    except : 
     number = input_num 

    if number in banned_number: 
     print ("Banned number.") 
    elif isinstance(number, str): 
     print ("Sorry, numbers only.") 
    elif (isinstance(number, int) or isinstance(number, float)): 
     a = int(number) 
     print(a* 127) 

Dies führt zu:

# for input 9 
Banned number. 

# for input 'a' 
Sorry, numbers only. 

# for input 99 
12573 

Auch der Grund, warum es zweimal für die Eingabe druckt '99' weil dies als Zwei Zeichenfolge behandelt werden '9' and '9' und Daher wurde Banned number. zweimal während der Schleife gedruckt.

+0

## elif isinstance (nummer, str): ## versagt uns. "number" stammt aus der Eingabe, also str, also können wir nicht über diese Zeile hinaus kommen? Vielen Dank. – Ramon

+1

Diese Antwort scheint Python 2.x zu verwenden, da erwartet wird, dass 'input()' eine Zahl zurückgibt. – Barmar

+1

Bearbeitet, um sowohl Python 2 als auch Python 3 zu unterstützen. Ich benutzte Python 2 und Sie scheinen Python 3 zu verwenden. –