我是编程新手,遇到家庭作业问题。这是作业问题:
开发一款简单的游戏,教幼儿园如何添加一位数字。您的函数game()
将以整数n作为输入,然后询问n个单位数的加法问题。要添加的数字应从范围[0,9]中随机选择(即0到9,包括0和9)。用户将在提示时输入答案。您的功能应该打印“正确”以获得正确答案,“不正确”表示错误答案。在n个问题之后,您的函数应该打印正确答案的数量。
例如:
>>>game(3)
8+2=
Enter answer: 10
Correct.
6+7 =
Enter answer: 12
Incorrect.
7+7=
Enter answer: 14
Correct.
You got 2 correct answers out of 3
这是我到目前为止所拥有的:
def game(n):
x = random.randrange (0,10)
y = random.randrange(0,10)
numbers = (x+y)
print (x, "+", y)
guess = eval(input("Enter your guess: "))
count = 0
total = 0
while total <= n:
if guess == numbers:
count = count + 1
total = total + 1
print("Correct.")
break
elif guess != numbers:
total = total + 1
print("Inncorrect")
break
return ("You got" + sum(count) + "correct answers out of" + sum(total))
我可以到达说明答案是否正确的地方,但无法弄清楚如何让它运行n次并显示结果。
任何提示都将不胜感激!
答案 0 :(得分:4)
显示的代码段有几个问题,一些是功能性的,一些与样式和可读性有关。
首先,您的while
循环不重复的原因是break
语句。这导致程序继续执行while之后的指令,即它们导致while循环“过早”退出。
你还需要把猜测提示等等放在里面循环......如图所示,它们将在循环之前执行一次而不是每次迭代。
您不需要sum()
来计算总数。
现在谈到风格问题:
修改:我还想插入Jon Clements
的评论:AVOID eval()
!
我在其他SO帖子中对eval
进行了足够的自我测试,原因是:虽然很少有用例eval()
是必要的,但在大多数情况下,还有更好的替代方案,这种相对“危险”功能。在这里,使用int()将用户的输入转换为整数。
您可以考虑避免重复total = total + 1
,因为无论答案是正确还是不正确,都必须在两种情况下都这样做。 (也请考虑for x in range(n)
循环,见下文。)
同样用普通else
替换elif,因为测试的条件是'if'条件的倒数。
[由nneonneo
建议]:避免在不需要的情况下使用括号(如在数字的分配中),使用+=
运算符(避免重复左值)。
将循环更改为for total in range(n)
也是一个好主意,因为这样可以完全避免管理总变量。为了保持初始代码的精神,我避免了后一种改变。
total = 1
while total <= n:
x = random.randrange(0,10)
y = random.randrange(0,10)
numbers = x + y
print (x, "+", y)
guess = eval(input("Enter your guess: "))
total = total + 1
if guess == numbers:
count = count + 1
print("Correct.")
else:
print("Incorrect")
print("You got", count, "correct answers out of", total)