编程新手:用Python创建儿童加法游戏
我刚开始学习编程,遇到一个作业问题有点困难。作业内容是:
开发一个简单的游戏,教幼儿园的小朋友如何加单个数字。你的函数 game()
需要接收一个整数 n 作为输入,然后问 n 道单个数字的加法题。要加的数字要从 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 次并显示结果。
任何提示都会非常感谢!
1 个回答
这个代码片段有几个问题,有些是功能上的,有些是风格和可读性方面的。
首先,你的 while
循环不重复的原因是因为有 break
语句。这些语句会让程序跳到循环后面的指令,也就是说,它们会让循环“提前”结束。
你还需要把猜测提示等内容放在循环 内部……现在的写法是它们只会在循环开始前执行一次,而不是每次循环都执行。
你不需要用 sum()
来计算计数和总数。
接下来是风格方面的问题:
编辑:我还想提一下 Jon Clements
的建议:避免使用 eval()
!
我在其他 StackOverflow 的帖子中已经对 eval
发表过不少看法,原因是:虽然有极少数情况下需要用到 eval()
,但在大多数情况下,有更好的选择来替代这个相对“危险”的函数。在这里,可以用 int() 来把用户的输入转换成整数。
你可以考虑避免重复写 total = total + 1
,因为无论答案对不对,这个操作都必须执行。(也可以考虑用 for x in range(n)
循环,见下文。)
另外,把 elif 替换成普通的 else
,因为这里测试的条件是与 'if' 条件相反的。
[根据 nneonneo
的建议]:在不需要括号的地方避免使用括号(比如在赋值数字时),使用 +=
操作符(这样可以避免重复写左边的变量)。
把循环改成 for total in range(n)
也是个好主意,这样你就不需要管理 total 变量了。我没有做这个改动,是为了保持你最初代码的风格。
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)