0

我现在正在学习如何使用python。我在学习我不理解的定义时发现了一个问题。我给出了一个简单的菜单,选择 0-4。如果用户选择上述 4,应该会收到一条消息,上面写着“这不是一个有效的选择......”

但是,如果您输入一个大于或等于 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.")
4

2 回答 2

7

您正在比较选择,它是一个字符串(我从您的打印函数中假设 Python 3),与“4”,也是一个字符串。

elif choice > "4":

这按字典顺序工作:

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

如果你想要数值比较,你必须把选择变成一个数字,例如

>>> int('1') > 4
False
>>> int('10') > 4
True
>>> 
于 2012-06-02T04:25:58.373 回答
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在那里使用。

于 2012-06-02T04:28:20.393 回答