如何回到Python的一步?

时间:2018-05-10 16:18:52

标签: python python-3.x

我为自己缺乏知识而道歉。我刚刚开始学习python,我使用youtube视频创建了一个基本的计算器。它是这样的:

user_continue = True
while user_continue:
    validInput = False
    while not validInput:
        # Get user input
        try:
            num1 = int(input("What is number 1?"))
            num2 = int(input("What is number 2?"))
            operation = int(input("What do you want to do with these? 1. add, 2. subtract, 3. multiply 4. divide. Enter number:"))
            validInput = True
        except:
            print("Invalid Input. Please try again.")
    if(operation == 1):
        print("Adding...")
        print(add(num1, num2))
    elif(operation == 2):
        print("Subtracting...")
        print(sub(num1, num2))
    elif(operation == 3):
        print("Multiplying...")
        print(mul(num1, num2))
    elif(operation == 4):
        print("Dividing...")
        print(div(num1, num2))
    else:
        print("I don't understand. Please try again.")
    user_yn = input('Would you like to do another calculation? ("y" for yes or any other value to exit.)')
    if(user_yn == 'y'):
        continue
    else:
        break

我想要做的是,如果用户输入的数字不同于1,2,3或4,我希望程序为“操作”请求另一个输入。

我再次为任何错误道歉,我刚刚开始。

2 个答案:

答案 0 :(得分:1)

这是一个非常简单的修改。在您的代码中:

    operation = int(input("What do you want to do with these? 1. add, 2. subtract, 3. multiply 4. divide. Enter number:"))
    validInput = True

在将validInput标记为True之前,您应该只检查输入是否有效。要继续使用try-except块,可以使用如下断言来检查:

    operation = ...
    assert operation in (1,2,3,4)
    validInput = True

如果operation不在(1,2,3,4),则代码会抛出AssertionError块将会捕获的try-except

在一个不相关的说明中,您可能不应该使用except条款来捕获您在此处所做的所有错误。实际上,此块也会捕获KeyboardInterrupt错误,这意味着您将无法退出程序!最好使用except ValueErrorexcept AssertionError

答案 1 :(得分:0)

功能是你的朋友。这个只返回1-4,在内部循环,直到输入正确。 break退出无限while循环。如果未输入整数,则抛出ValueError并忽略except子句。任何无效的内容都会打印出来"输入无效"并继续循环。

def get_operation():
    while True:
        try:
            op = int(input('Enter 1-add, 2-subtract, 3-muliply, 4-divide: '))
            if 1 <= op <= 4:
                break
        except ValueError:
            pass
        print('Invalid input')
    return op

operation = get_operation()