Python:如果......并且...没有按预期工作

时间:2015-05-14 03:19:19

标签: python if-statement

我正在尝试设置以下代码,要求用户输入两个整数(num_sides& num_rolls)。如果用户没有为任一输入输入整数,则代码应打印语句“输入整数”。

我发现此代码仅测试num_sides但不测试num_rolls是否为整数。这是怎么回事?

提前感谢您的帮助!

def rolldice():
    while True:
        while True:
            num_sides = input("Enter number of sides for die: ")
            num_rolls = input("Enter number of rolls for die: ")
            try:
                if int(num_sides) != num_sides or int(num_rolls) != num_rolls:
                    break
                break
            except(ValueError):
                print("Enter an integer")
                True

2 个答案:

答案 0 :(得分:2)

为什么你有一个嵌套循环? (两个while True一个在另一个内)

以下代码更简单,应该可以使用:

def rolldice():
    while True:
        num_sides = input("Enter number of sides for die: ")
        num_rolls = input("Enter number of rolls for die: ")
        try:
            int(num_sides)
            int(num_rolls)
            break
        except ValueError:
            print("Enter an integer")

如果int评估并且没有崩溃,则执行break并且您可以离开循环。

由于它是一个函数,您可能希望在函数末尾返回(num_sides, num_rolls),这样它们就不会丢失。 (您也可以将break替换为return,这将同时有效地停止此功能)

除非这只是代码的开头,否则不要介意我刚才所说的内容。 :)

答案 1 :(得分:0)

您可以展开int并检查ValueError

def rolldice():
    while True:
        try:
            num_sides = int(input("Enter number of sides for die: "))
            num_rolls = int(input("Enter number of rolls for die: "))
            break
        except ValueError:
            print("Enter an integer")
>>> rolldice()
Enter number of sides for die: 5
Enter number of rolls for die: foo
Enter an integer
Enter number of sides for die: foo 
Enter an integer
Enter number of sides for die: bar
Enter an integer
Enter number of sides for die: 1
Enter number of rolls for die: 2
>>>