编程新手:创建一个在python中添加游戏的孩子

时间:2013-03-01 02:08:36

标签: python

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

开发一款简单的游戏,教幼儿园如何添加一位数字。您的函数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次并显示结果。

任何提示都将不胜感激!

1 个答案:

答案 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)