0

私は Python の初心者です (1 週間前に独学を始めたばかりです)。乗算表テストのように、0 から 12 までの因数を使用して、ユーザーが送信した数のランダムに生成された乗算の質問をするプログラムを作成しようとしました。

import math
import random

#establish a number of questions
questions = int(input("\n How many questions do you want?     "))     

#introduce score
score = 1

for question in range(questions):
    x = random.randrange(0,13)
    y = random.randrange(0,13)

    #make the numbers strings, so they can be printed with strings
    abc = str(x)
    cba = str(y)
    print("What is " + abc + "*" + cba +"?")

    z = int(input("Answer here:   "))
    print z
    a = x*y

    #make the answer a string, so it can be printed if you get one wrong
    answer = str(a)

    if z > a or z < a:
        print ("wrong, the answer is " + answer)
        print("\n")

        #this is the line that's being skipped
        score = score - 1/questions
    else:
        print "Correct!"
        print ("\n")

finalscore = score*100
finalestscore = str(finalscore)
print (finalestscore + "%")

ユーザーが質問を間違えるたびに、スコア (1 に設定) が質問ごとに 1 ずつ減っていき、100 を掛けると、質問のパーセンテージが間違っているということになります。ただし、何問出題しても、数を間違えても、score は 1 のままなので、finalestscore は 100 のままです。 3 は明らかに、数学に abs 関数があることを認めていません。

このような単純なアキュムレータ パターンは、古いバージョンの Python であっても問題にはならないようです。ヘルプ?

4

2 に答える 2

5

試すscore = score - 1.0/questions

問題は、最も近い整数に切り捨てられる整数除算を実行しているため、1/questions常に0になることです。

于 2012-08-22T01:14:06.657 に答える
1

問題は、すべての計算に整数を使用していることです。特に、を計算する場合1/questions、計算の両方の値が整数であるため、整数に切り捨てられます(切り捨てられます)。

これを回避するには、代わりにを使用1.0/questionsして、計算で浮動小数点数を使用するようにすることができます(切り捨ては行いません)。

于 2012-08-22T01:15:24.520 に答える