2012-06-02 3 views
0

Я изучаю, как использовать python прямо сейчас. Я нашел проблему, узнав об определениях, которые я не понимаю. Я даю простое меню с выбором 0-4. Если пользователь выбирает выше 4, предполагается получить сообщение, в котором говорится: «Это неправильный выбор ...»Почему выбор двойной цифры не возвращает правильный ответ в python?

Однако, если вы вводите значение, большее или равное 10, оно ничего не возвращает но меню ... нет сообщения.

Спасибо заранее, за любые мысли.

Вот мой код:

# Multitasker 
# Allows User to Pick an Item that is Defined. 

def exit(): 
    print("See You Later!") 
def task1(): 
    print("This is Task 1!") 
def task2(): 
    print("This is Task 2!") 
def task3(): 
    print("This is Task 3!") 
def task4(): 
    print("This is Task 4!") 

choice = None 
while choice != "0": 
    print(
     """ 
     Multitask Selector 

     0 - Quit 
     1 - Task 1 
     2 - Task 2 
     3 - Task 3 
     4 - Task 4 
     """ 
     ) 

    choice = input("Pick a Task Between 1-4:\t#") 
    print() 

    # Exit 
    if choice == "0": 
     exit() 

    # Task 1 
    elif choice == "1": 
     task1() 

    # Task 2 
    elif choice == "2": 
     task2() 

    # Task 3 
    elif choice == "3": 
     task3() 

    # Task 4 
    elif choice == "4": 
     task4() 

    # Not a Correct Selection 
    elif choice > "4": 
     print("That is not a valid choice. Please Select a Task Between 1-4.") 

ответ

7

Вы сравнение выбор, который является строкой (я предполагаю, что Python 3 из ваших функций печати), с «4», также строкой.

elif choice > "4": 

Это работает лексически:

>>> '1' < '2' 
True 
>>> '1' < '100' 
True 
>>> '100' < '2' 
True 

Если вы хотите числовые сравнения, вы должны включить выбор в ряд, например,

>>> int('1') > 4 
False 
>>> int('10') > 4 
True 
>>> 
+0

спасибо. Это было то, о чем я думал, но не знал, как это сделать. Теперь я это сделаю! Благодаря! – Steven

3

"10" не больше, чем "4". Оба являются строками и сравниваются по характеру. «1» меньше «4», поэтому «10» меньше «4». То, что вы должны сделать, это преобразовать их в целые числа:

choice = input("Pick a Task Between 1-4:\t#") 
choice = int(choice) if choice.isdigit() else 9 # add this line 

Это превращает любую нечисловую запись до 9 так, он будет снова отобразить меню.

Затем сравните с числами вместо строк:

if choice == 0: 
    exit() 

Ваше последнее условие может быть просто else, вам не нужно использовать elif там.

+0

Вы имеете в виду еще и для выбора> int ('4') или для всего после утверждения if? Так может ли все элиты быть изменены на чужие? Спасибо за ответ. – Steven

+0

Да, последний: 'choice>" 4 "'. Если ни один из других не соответствует, вы хотите распечатать сообщение; не имеет значения, какой был выбор, не так ли? – kindall

+0

Я попытался добавить еще и когда я запустил его, он сказал, что выбор был недопустимым синтаксисом. – Steven

Смежные вопросы