在python 3中循环不做我想做的事

时间:2017-01-30 19:15:57

标签: python python-3.x for-loop

我尝试为我的小家伙制作这个代码来练习简单的数学 而且我想给用户解决3个问题,但程序会随机出现问题。我做错了什么? 感谢

import random

for i in range(3):             # number of problems          

    for n in range(999):
        num1 = random.randrange(11)
        num2 = random.randrange(11)
        if num1<num2:
            break
        else:
            sum = eval(input("how much is {} - {} = ".format(num1,num2)))
            if sum == num1 - num2:
                print ("Good job!")
                break      

        for x in range(5):           #nr of wrong tries     
            if sum != num1 - num2:
                sum = eval(input("Try again {} - {} = ".format(num1,num2)))
            else:
                print ("Good job!")
                break

4 个答案:

答案 0 :(得分:1)

以下内容应该有效

import random

for i in range(3):             # number of problems          
    num1 = random.randrange(11)
    num2 = random.randrange(11)

    while num1<num2:
        num1 = random.randrange(11)
        num2 = random.randrange(11)

    sum = input("how much is {} - {} = ".format(num1,num2))

    for x in range(5):           #nr of wrong tries     
        if sum != num1 - num2:
            sum = input("Try again {} - {} = ".format(num1,num2))
        else:
            print ("Good job!")
            break

我刚用for替换了不需要的if循环和while语句。

答案 1 :(得分:0)

您的主要问题是您的计划结构,令人困惑,这就是为什么您会在这里,并且容易出错,以及您来这里的原因。

尝试类似这样的伪代码:

loop three times
  num1 = -1
  num2 = 0
  while(num1 < num2)
    assign random numbers to num1 and num2
  end loop

  input = ask user what num2 - num1 is

  if input == num2 - num1
    print 'yay'
  else
    print 'boo'
  end if

end loop

这样可以清理干净并摆脱这些休息。

答案 2 :(得分:0)

如果num1 < num2为真,那么您将突破内部for循环,因此它会运行3个或更少的问题,具体取决于num1 < num2的{​​{1}}次{{1} }}。最快的解决方法是将True更改为break块内的continue

但是,当您不知道要循环多少次时,最好使用if循环,并且只想在满足某个条件时停止。在你的情况下,你想循环到while,然后问问题。

更好的解决方案是在1-10之间生成一个随机数num1 > num2,然后在0 - num1之间生成一个随机数num2,这将始终确保num1 1}}大于num1

最后的说明:

  • 使用num2将输入转换为整数而不是int
  • eval是一个内置函数,因此请使用其他名称,以免影响它。

这是一个有效的例子:

sum

您可以通过添加import random for i in range(3): num1 = random.randrange(1, 11) # Has to be greater than 0 so num2 can be less. num2 = random.randrange(num1) # Use 'int' to convert to int, not 'eval'! # Also, 'sum' is a built-in function. Don't shadow it, use another name. result = int(input("how much is {} - {} = ".format(num1, num2))) for x in range(5): # nr of wrong tries if result != num1 - num2: result = int(input("Try again {} - {} = ".format(num1, num2))) else: print("Good job!") break 块来扩展此功能,以确保输入确实是一个数字。如果输入除数字以外的任何内容,程序将崩溃。 Here是验证输入的方法。

答案 3 :(得分:0)

您需要修正范围。

随机导入 对于范围内的我(1,4):

for n in range(1, 1000):
    num1 = random.randrange(11)
    num2 = random.randrange(11)
    if num1<num2:
        break
    else:
        sum = eval(input("how much is {} - {} = ".format(num1,num2)))
        if sum == num1 - num2:
            print ("Good job!")
            break      

    for x in range(5):           #nr of wrong tries     
        if sum != num1 - num2:
            sum = eval(input("Try again {} - {} = ".format(num1,num2)))
        else:
            print ("Good job!")
            break