编程新手:用Python创建儿童加法游戏

-1 投票
1 回答
3055 浏览
提问于 2025-04-17 17:32

我刚开始学习编程,遇到一个作业问题有点困难。作业内容是:

开发一个简单的游戏,教幼儿园的小朋友如何加单个数字。你的函数 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 个回答

5

这个代码片段有几个问题,有些是功能上的,有些是风格和可读性方面的。

首先,你的 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)

撰写回答