我尝试为我的小家伙制作这个代码来练习简单的数学 而且我想给用户解决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
答案 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