我是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也是如此。帮助
答案 0 :(得分:5)
尝试score = score - 1.0/questions
问题在于你正在进行整数除法,它会截断为最接近的整数,因此1/questions
将始终为0。
答案 1 :(得分:1)
问题在于您使用整数进行所有计算。特别是,当您计算1/questions
时,它会截断(向下舍入)为整数,因为计算中的两个值都是整数。
为避免这种情况,您可以改为使用1.0/questions
来使计算使用浮点数(而不是截断)