-1

我是编程新手,并且遇到了家庭作业问题。这是作业问题:

开发一个简单的游戏,教幼儿园的孩子如何添加个位数。您的函数game()将以整数 n 作为输入,然后询问 n 个个位数的加法问题。要添加的数字应从 [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 次并显示结果。

任何提示将不胜感激!

4

1 回答 1

4

显示的片段有几个问题,一些是功能性的,一些与样式和可读性有关。

首先,while循环不重复的原因是break语句。这些导致程序继续执行while 之后的指令,即它们导致“过早”退出while 循环。

您还需要将猜测提示等放在循环内......如图所示,它们将在循环之前执行一次,而不是每次迭代。

您不需要sum()for count 和 total。

现在讨论风格问题:
编辑:我也想插上Jon Clements一句:避免eval()
eval在其他 SO 帖子中对自己进行了足够的抨击,这是有原因的:尽管有很少的用例eval()是必要的,但在大多数情况下,对于这个相对“危险”的功能,有更好的替代方案。在这里,使用 int() 将用户的输入转换为整数。

您可以考虑避免重复,total = total + 1因为在两种情况下都必须这样做,无论答案是正确还是不正确。(也可以考虑for x in range(n)使用循环,见下文。)
也将 elif 替换为普通的,else因为测试的条件与“if”条件相反。
[正如 nneonneo] 所建议的:在不需要的地方避免括号(如在数字分配中),使用+=运算符(避免重复左值)。

将循环更改为 a 也是一个好主意,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)
于 2013-03-01T02:21:00.400 回答