python:没有存储数学测验数据

2024-10-03 17:23:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是为小学生做一个测验。小测验的效果很好。但是我必须计算孩子花了多长时间,并将他们的“username”、“correctAnswers”和“timeTaken”存储到一个.txt文件中,用于孩子所在的特定类。为了做到这一点,我问孩子他们的班级编号,并将他们的信息存储到专门为该班级设计的文件中。 我的问题是:

即使我的代码中有timeTaken=round(etime),时间也不会被舍入

未定义原始输入(我不知道如何定义它)

即使输入了有效的类号,也会出现消息“抱歉,我们无法保存您的数据,因为您输入的类无效。”。在

我到处找遍了,但没找到。任何帮助都将不胜感激。在

import time
import random
import math

def test():
    num1=random.randint(1, 10)
    num2=random.randint(1, num1)

    ops = ['+','-','*']
    operation = random.choice(ops)

    num3=int(eval(str(num1) + operation + str(num2)))

    print ("What is {} {} {}?".format(num1, operation, num2))
    userAnswer= int(input("Your answer:"))
    if userAnswer != num3:
        print ("Incorrect. The right answer is {}".format(num3))
        return False
    else:
        print("correct")
        return True

username=input("What is your name?")
print ("Welcome {} to the Arithmetic quiz".format(username))
usersClass = input("Which class are you in? (1,2 or 3)")
raw_input("Press Enter to Start...")
start = time.time()
correctAnswers=0
for question_number in range(10):
    if test():
        correctAnswers +=1

print("{}: You got {} answers correct".format(username, correctAnswers))
end = time.time()
etime = end - start
timeTaken = round(etime)
print ("You completed the quiz in {} seconds".format(timeTaken))
if usersClass == 1:
    with open("class1.txt","a+") as f:
        f.write("{}:Scored {} in {} seconds".format(username,correctAnswers,timeTaken))

elif usersClass == 2:
    with open("class2.txt","a+") as f:
        f.write("{}:Scored {} in {} seconds".format(username,correctAnswers,timeTaken))

elif usersClass == 3:
    with open("class3.txt","a+") as f:
        f.write("{}:Scored {} in {} seconds".format(username,correctAnswers,timeTaken))
else:
    print("Sorry, we can not save your data as the class you entered is not valid.")

Tags: intxtformatinputtimeisasusername
1条回答
网友
1楼 · 发布于 2024-10-03 17:23:10

^{}的返回值是一个str对象:

>>> usersClass = input("Which class are you in? (1,2 or 3)")
Which class are you in? (1,2 or 3)3
>>> type(usersClass)
<class 'str'>

因此,您对int对象的后续检查将计算为False(即,'3' != 3),从而得到您所看到的结果。在

比较用户选择的usersClass的条件需要比较同一类型以确保相等。这意味着您可以将返回值input转换为int,并继续将usersClass与{}进行比较,这将满足编写代码时的比较要求

^{pr2}$

或者更改条件,将usersClass12和{}的str表示进行比较。在

if usersClass == '1':
with open("class1.txt","a+") as f:
    f.write("{}:Scored {} in {} seconds".format(username,correctAnswers,timeTaken))
...

至于使用python3的raw_input时遇到的问题,它已被重命名为input:(取自What's New in Python 3.0

PEP 3111: raw_input() was renamed to input(). That is, the new input() function reads a line from sys.stdin and returns it with the trailing newline stripped. It raises EOFError if the input is terminated prematurely. To get the old behavior of input(), use eval(input()).

相关问题 更多 >