为什么python会跳过一条线?

时间:2012-08-22 01:10:48

标签: python-2.7

我是Python的新手(一周前刚开始自学),所以我的调试技巧现在很弱。我尝试制作一个程序,询问用户提交的随机生成的乘法问题的数量,因子在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时,它会给出一定比例的错误。但是,无论问题的数量或数字是否有问题,得分仍为1,因此最终结果仍为100.第26行曾经是:     如果math.abs(z)-math.abs(a)!= 0: 但2.7.3显然不承认数学有abs功能。

这样一个简单的累加器模式似乎不是一个问题,即使对于旧版本的Python也是如此。帮助

2 个答案:

答案 0 :(得分:5)

尝试score = score - 1.0/questions

问题在于你正在进行整数除法,它会截断为最接近的整数,因此1/questions将始终为0。

答案 1 :(得分:1)

问题在于您使用整数进行所有计算。特别是,当您计算1/questions时,它会截断(向下舍入)为整数,因为计算中的两个值都是整数。

为避免这种情况,您可以改为使用1.0/questions来使计算使用浮点数(而不是截断)