2017-01-29 5 views
-2

У меня есть несколько кодов ниже, choice принимает только целочисленный ввод, но распечатывает что-то особенное, если вход не является целым числом. Тем не менее, коды ниже для рассмотрения этого вопроса кажутся немного длинными. В любом случае, чтобы это исправить?Python: как сделать этот код проще?

from sys import exit 

def gold_room(): 
    print "This room is full of gold. How much do you take?" 

    choice = raw_input("> ") 
    if "0" in choice or "1" in choice or "2" in choice or "3" in choice or "4" in choice or "5" in choice or "6" in choice or "7" in choice or "8" in choice or "9" in choice: 
     how_much = int(choice) 
    else: 
     dead("Man, learn to type a number.") 

    if how_much < 50: 
     print "Nice, you're not greedy, you win!" 
     exit(1) 
    else: 
     dead("You're greedy!") 


def dead(why): 
    print why, "Good job!" 
    exit(0) 

gold_room() 
+0

Этот вопрос, вероятно, лучше подходит для [Обмена стека кода] (https://codereview.stackexchange.com/). –

+0

Предполагаю, вы говорите о довольно длинном утверждении if? Посмотрите на встроенную функцию 'any'. Независимо от того, что я рекомендовал бы сделать преобразование в 'int', тогда при необходимости поймать исключение (например, только что удаленный ответ). –

+0

Что делать, если 'choice == '1a''? –

ответ

6

Попробуйте что-то вроде:

try: 
    how_much = int(choice) 
except ValueError: 
    dead('Man, learn to type a number.') 

и посмотреть Easier to ask for forgiveness than permission для обоснования.

+0

Ударь меня на минуту. :) Я удалю. –

0

Вы можете использовать str.isdigit(), чтобы проверить, не является ли его число, используя инструкцию try ... except для этого, потому что это делает ваш код грязным и может привести к ошибкам в долгосрочной перспективе. Но если только это будет работать.

from sys import exit 

def gold_room(): 
    print "This room is full of gold. How much do you take?" 

    choice = raw_input("> ") 
    if choice.isdigit(): #Checks if it's a number 
     how_much = int(choice) 
    else: 
     dead("Man, learn to type a number.") 
     return 

    if how_much < 50: 
     print "Nice, you're not greedy, you win!" 
     exit(1) 
    else: 
     dead("You greedy bastard!") 


def dead(why): 
    print why, "Good job!" 
    exit(0) 

gold_room() 
Смежные вопросы