2016-12-05 15 views
0

Ich arbeite aus dem Learn Python the Hard Way Buch und ich habe eine sehr Anfänger Frage. Ich versuche, es so zu bekommen, dass der folgende Code nicht so merkwürdig gehen muss, um zu überprüfen, ob eine Nummer vergeben wurde. Ich möchte auch, dass Zahlen, die nicht 1 oder 0 haben, gültig sind.Anfänger: Müssen einen besseren Weg finden, etwas zu tun

def gold_room(): 
    print("The room is full of gold, how much do you take?") 

    choice = raw_input("> ") 
    if "0" in choice or "1" in choice: 
     how_much = int(choice) 

Die Idee, dass ich hatte, war, um es zu überprüfen, ob Wahl eine ganze Zahl war, und wenn ja, dann den Code auslösen, aber ich kann nicht herausfinden, wie dies zu tun. Ich bin sicher, dass die Antwort sehr einfach ist, und es tut mir leid für solch eine grundlegende Frage. Danke für Ihre Hilfe!

+1

@lmiguelvargasf NEIN Verwenden Sie 'eval' nicht für Strings von' raw_input'. Das ist eine schreckliche Angewohnheit. Verwenden Sie die String-Methode '.isdigit' –

+0

Als eine Randnotiz, warum kombinieren Sie nicht die ersten beiden Zeilen:' choice = raw_input ("Der Raum ist voller Gold, wie viel nehmen Sie?") ' – DyZ

Antwort

2

Wenn Sie nur nach nicht negativen Ganzzahlen suchen, genügt choice.isdigit(). Er gibt True oder False zurück, je nachdem, ob choice aus allen Ziffern besteht oder nicht. Komplettlösung:

def gold_room(): 
    choice = raw_input("The room is full of gold, how much do you take? ") 
    if choice.isdigit(): 
    return int(choice) 
    else: 
    return None 
+0

Also mit diesem würde ich kann 'choice = raw_input ("> ")' und dann 'if choice.isdigit() = True:' 'how_much = choice'? Danke –

+0

@MagicalMan, du musst 'choice' noch in ein int konvertieren:' how_much = int (choice) '. – DyZ

+0

Also aus irgendeinem Grund, wenn ich 'choice = raw_input ("> ")' 'if choice.isdigit() = True:' 'how_much = int (Auswahl)' Ich bekomme einen syntx Fehler auf 'if choice.isdigit () = Wahr: 'Weißt du warum? Entschuldigung für alle Fragen. –

1

Sie verwenden können, auch, try .. accept und den Fehler zu fangen. Dieses Beispiel können Sie wie folgt vor:

def gold_room(): 
    print("The room is full of gold, how much do you take?") 

    choice = raw_input("> ") 
    try: 
     return int(choice) 
    except ValueError: 
     pass 

print gold_room() 

Ausgang:

, wenn zum Beispiel der Eingang 12 war

>> 12 

falls die Eingabe nicht eine ganze Zahl ist, so dass die Ausgabe None sein wird:

>> None 
+0

Danke, ich denke, ich werde .isdigit verwenden, aber eine Sache, die ich bemerkte, war, dass es in deinem Code immernoch nur Zahlen mit 0 oder 1 braucht, also wird sowas wie 23 nicht funktionieren. Weißt du, wie man das vermeidet? Danke für den Vorschlag! –

+0

Wenn 'choice' kein Integer ist, gibt' int (choice) 'eine Exception aus, noch bevor' isinstance() 'einsetzt. Es macht keinen Sinn, sie aufzurufen. – DyZ

+0

@MagicalMan, wenn ja, kannst du 'if" 0 "in der Auswahl oder" 1 "in der Auswahl entfernen:' Ich habe es nur hinzugefügt, weil du es in deine Frage geschrieben hast. –

Verwandte Themen