乘法游戏python

时间:2012-09-17 02:16:56

标签: python random multiplication

我应该在python中编写一个程序,询问用户他们想要多少个乘法问题,并随机地给他们提供1到10之间的值的问题。然后它会吐出他们得到的正确百分比。我的代码不断重复相同的数字集,也不会停在用户要求的数字处。你能告诉我什么是错的吗?

import random
import math

gamenumber = int(input("How many probems do you want?\n"))
num_1 = random.randint(1,10)
num_2 = random.randint(1,10)

def main():

    random.seed()
    count = 0
    while count < gamenumber:
        guess = int(input("What is " + str(num_1) + "x" + str(num_2) + "."))

        answer = str(num_1*num_2)
        correct = guess == answer

        if guess == answer:
            print("Correct!")
        else wrong:
            print("Sorry, the answer is", answer, ".")

        result = correct/wrong   

    print("You got ", "%.1f"%result, "of the problems.")

main()

7 个答案:

答案 0 :(得分:3)

您只能分配到num_1num_2一次。他们的价值观永远不变你的数字如何改变?此外,您不会增加count,因此始终会将其原始值与gamenumber进行比较。

您需要为两个变量分配一个新的随机数并递增计数器。

答案 1 :(得分:3)

您忘记在循环中增加countnum_1num_2不会获得新值。

答案 2 :(得分:1)

您提到的问题

  

我的代码不断重复相同的数字集

这并不奇怪,因为您将num_1num_2(1)设置在main函数之外,并且(2)设置在主while循环之外。一个简单的修正是:

    while count < gamenumber:
        num_1 = random.randint(1,10)
        num_2 = random.randint(1,10)
  

我的代码不会停留在要求的号码:

再一次,毫不奇怪,因为你永远不会增加count计数器:你总是有count < gamenumber。 一个简单的修正是:

    while count < gamenumber:
        num_1 = random.randint(1,10)
        num_2 = random.randint(1,10)
        guess = int(input("What is " + str(num_1) + "x" + str(num_2) + "."))
        answer = str(num_1*num_2)

        count += 1

此处,count += 1表示add 1 to count *in place*。您也可以执行count = count + 1,但在创建一个您并不真正需要的临时变量(count + 1)时效率会低一些。

其他问题

  • 您永远不会定义wrong
  • 您在函数外定义gamenumber。虽然在这种情况下不是问题,但gamenumber更容易使用main作为result的参数,因为它是驱动游戏的变量。
  • 您的result已在循环中定义。你可能想为每个好答案增加一个计数器,并在主循环后打印结果。
  • 您的correct/wrong计算为correct/gamenumber。虽然我确定你的意思是count,但你必须格外小心:gamenumber2/3是整数,并且除以整数与划分浮点数不同。例如,0提供2/float(3),但0.6666666提供result。所以,我们必须在某个地方使用浮动。
  • 您想打印一个百分比:您的result=correct*100./gamenumber应为gamenumber
  • 您不希望result为0,否则您的main将无法定义。

总而言之,您的def main(gamenumber): random.seed() count = 0 correct = 0 while count < gamenumber: num_1 = random.randint(1,10) num_2 = random.randint(1,10) guess = int(input("What is " + str(num_1) + "x" + str(num_2) + ".")) answer = str(num_1*num_2) count += 1 if guess == answer: correct += 1 print("Correct!") else wrong: print("Sorry, the answer is", answer, ".") if gamenumber > 1: result = correct * 100./gamenumber print("You got ", "%.1f"%result, "of the problems.") 功能应该是

{{1}}

答案 3 :(得分:0)

对我来说最明显的问题是你有一个无限循环;你不会在任何地方增加count

答案 4 :(得分:0)

  1. 在开始循环之前,您只生成一次问题编号。在向用户提问之前,您需要每次生成num_1和num_2。

  2. 在初始化之后,你永远不会真正更新计数值,所以你的循环将永远继续。

答案 5 :(得分:0)

Python是一种过程语言。它从上到下执行方法体中的语句。这一行:

num_1 = random.randint(1,10)

是一个赋值语句。 num_1等同于随机过程以评估其价值;它通过调用random.randint(1,10)来评估表达式,并将该值分配给num_1一次。

您必须强制再次调用random.randint以获取另一个随机数,并且每当您想要更改num_1的值时,您必须有一个语句为num_1分配值。

答案 6 :(得分:0)

import random
import math

拼写“问题”是错误的

gamenumber = int(input("How many probems do you want?\n"))

在循环中移动接下来的两行

num_1 = random.randint(1,10)
num_2 = random.randint(1,10)

def main():

    random.seed()
    count = 0
    while count < gamenumber:

您可以在此处使用"What is {}x{}?".format(num1, num2)

        guess = int(input("What is " + str(num_1) + "x" + str(num_2) + "."))

        answer = str(num_1*num_2)

这应该算正确的答案吗?应为correct += guess == answer

       correct = guess == answer

你的意思是计算错误答案的数量吗? wrong += guess != answer

        if guess == answer:
            print("Correct!")

else wrong:可能是语法错误else: #wrong

        else wrong:
            print("Sorry, the answer is", answer, ".")

这不是如何计算百分比。您应该使用correct*100/gamenumber和dedent来匹配print()

        result = correct/wrong   

    print("You got ", "%.1f"%result, "of the problems.")

main()

此外,您不会在任何地方递增count。使用

更容易
for count in range(gamenumber):

而不是while循环