4

我应该在 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()
4

7 回答 7

4

num_1你只分配num_2一次。他们的价值观永远不会改变;你的数字怎么会改变?此外,您不会递增count,因此始终将其原始值与gamenumber.

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

于 2012-09-17T02:20:08.967 回答
4

您忘记count在循环中递增num_1并且num_2没有获得新值。

于 2012-09-17T02:20:21.997 回答
2

你提到的问题

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

这并不奇怪,因为您将num_1and num_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,但您必须格外小心:countandgamenumber是整数,并且整数除法与浮点数除法不同。例如,2/30,但2/float(3)0.6666666。所以,我们必须在某处使用浮点数。
  • 你想打印一个百分比:你result应该是result=correct*100./gamenumber.
  • 你不想gamenumber成为 0,否则你result将是未定义的。

所以,总而言之,你的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.")
于 2012-09-17T07:50:08.370 回答
1

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

于 2012-09-17T02:20:11.297 回答
1
  1. 在开始循环之前,您只生成一次问题编号。在向用户提问之前,您需要每次生成 num_1 和 num_2。

  2. 初始化后您从未真正更新计数值,因此您的循环将永远持续下去。

于 2012-09-17T02:23:54.093 回答
1
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循环

于 2012-09-17T04:56:12.607 回答
0

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

num_1 = random.randint(1,10)

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

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

于 2012-09-17T02:42:04.807 回答