繁体   English   中英

使用字符串存储分数以进行python数学测验

Using strings to store scores for a python maths quiz

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

需要安排数学测验的分数:

-按名称的高低顺序命名-按最高分数从高到低-按平均分数从高到低-如果可能的话,我想使用字符串来做到这一点,如果您可以向我展示如何做到这一点,我将不胜感激。 我正在考虑使用字符串,但我不知道您会怎么做。 我到目前为止的代码是:

import random
def start_quiz():
    print("Welcome to my Maths quiz")
#this creates a subroutine to enter the users name
def get_name():
    global name
    global group

    name=input("What is your name?")
    while name=="":
          name=input("What is your name?")
          group=input("What class are you in-1,2 or 3?")
    while group=="":
          group=input("What class are you in?")
    print("Hello " + name)

def questions():
    global score
    global questionnumber
    score=0
    questionnumber=0
    while questionnumber<10:
        questionnumber=questionnumber+1 
        operatorlist=['+','-','*']
        num1=random.randint(1,10)
        num2=random.randint(1,10)
        op=random.choice(operatorlist)
        if op=='-' and num2>num1:
            expression="%d %s %d" % (num2,op,num1)
        else:
            expression="%d %s %d" % (num1,op,num2)
        answer=eval(expression)
        enter_answer=1
        while enter_answer==1:
            try:
                useranswer= int(input(expression))
                enter_answer=0
            except ValueError:
                print("that was not a number, please re enter your answer")
        answer=int(answer)
        if useranswer==answer:
            print("well done")
            score=score+1
            print(" ")
        else:
            print("incorrect the correct answer is %d " % (answer))




def end_quiz():
    print("The quiz is now over")
    print("Well done " + name+". Your score is %d out of 10" % (score))

def savethescore():
    global score
    score=str(score)
    if group=='1':
        file=open("Scoreforclass1.txt",'a')
        file.write("\n")
        file.write ("Name: "+name+"\n")
        file.write('Class: '+group+'\n')
        file.write("Score: "+score+"/10\n")
        file.close()
    elif group=='2':
        file=open("Scoreforclass2.txt",'a')
        file.write("\n")
        file.write ("Name: "+name+"\n")
        file.write('Class: '+group+'\n')
        file.write("Score: "+score+"/10\n")
        file.close()
    else:
        file=open("Scoreforclass3.txt",'a')
        file.write("\n")
        file.write ("Name: "+name+"\n")
        file.write('Class: '+group+'\n')
        file.write("Score: "+score+"/10\n")
        file.close()


 def play_again():
     again= input("would you like to play again? y for yes and n for no")
     while again not in ['Y','y','N','n']:
         again = input("please enter 'Y' or 'N'")
     if again== 'y' or 'Y':
        do_the_quiz()
     else:
         print("cheers lad thanks for playing")
         exit()


def do_the_quiz():
    start_quiz()
    get_name()
    questions()
    end_quiz()
    savethescore()
    play_again()

do_the_quiz()   

如果可能的话,您可以像我使用csv文件一样尝试使用字符串,但是它太复杂了。 先感谢您。

1 个回复

这应该为您工作。

import re
from functools import reduce

data=""
try:
    data+=open("Scoreforclass1.txt","r").read()
except:
    pass
try:
    data+=open("Scoreforclass2.txt","r").read()
except:
    pass
try:
    data+=open("Scoreforclass3.txt","r").read()
except:
    pass
allscores_name={}
allscores_score={}
averagescore_score={}

pattern=re.compile("Name: [^\n]*?\nClass: [^\n]*?\nScore: [^\n]*?\n")
data=pattern.findall(data)
for line in data:
    start=line.find("Name: ")+len("Name: ")
    end=line.find("\n",start)
    name=line[start:end].strip()
    start=line.find("Class: ",end)+len("Class: ")
    end=line.find("\n",start)
    classnum=line[start:end].strip()
    start=line.find("Score: ",end)+len("Score: ")
    end=line.find("/10\n",start)
    score=line[start:end].strip()
    if(name+classnum in allscores_name):
        allscores_name[name+classnum].append(int(score))
    else:
        allscores_name[name+classnum]=[int(score)]
    if(int(score) in allscores_score):
        allscores_score[int(score)].append(name+classnum)
    else:
        allscores_score[int(score)]=[name+classnum]

out=open("sortedbyname.txt",'w+')
for name in sorted(allscores_name.keys()):
    average=reduce(lambda x, y: x + y,map(int,allscores_name[name])) / float(len(allscores_name[name]))
    if(average in averagescore_score):
        averagescore_score[average].append(name)
    else:
        averagescore_score[average]=[name]
    for score in sorted(allscores_name[name]):
        out.write("\n")
        out.write ("Name: "+name[:-1]+"\n")
        out.write('Class: '+name[-1]+'\n')
        out.write("Score: "+str(score)+"/10\n")
out.close()

out=open("sortedbyscore.txt",'w+')
for score in sorted(allscores_score.keys())[::-1]:
    for name in sorted(allscores_score[score]):
        out.write("\n")
        out.write ("Name: "+name[:-1]+"\n")
        out.write('Class: '+name[-1]+'\n')
        out.write("Score: "+str(score)+"/10\n")
out.close()

out=open("sortedbyaverage.txt",'w+')
for avgscore in sorted(averagescore_score.keys())[::-1]:
    out.write("\n")
    out.write ("Name: "+name[:-1]+"\n")
    out.write('Class: '+name[-1]+'\n')
    for name in sorted(averagescore_score[avgscore]):
        for score in sorted(allscores_name[name])[::-1]:
            out.write("Score: "+str(score)+"/10\n")
out.close()

干杯!

2 Python 数学测验

我正在用 python 创建一个数学测验,但是我遇到了一些麻烦,如果有人能帮助我,我将不胜感激。 我需要程序向用户提出 10 个问题,然后计算用户得分(满分 10 分)。但是我的程序没有这样做,而是提出了 12 个问题并且不计算用户得分。 到目前为止,这是我的代码的复制和粘贴: ...

2015-05-05 14:11:40 5 9618   python
3 在python中修复数学测验

我的数学测验正在运行,但是现在。 它在'if ops =='+':'之后说冒号是无效的语法。 请您能帮我解决它。 如果我删除下面的冒号,答案变量将作为无效的语法错误出现。 ...

2016-03-21 09:49:57 2 208   python
5 Python数学测验字母排序

我正在努力让我的代码在python上工作,这意味着可以按字母顺序打印数据,但是没有人可以帮忙吗? ...

7 python的数学测验-str对象没有属性

我被分配了一项任务来记录学生数学测验的分数 下面是我的任务: 老师希望使用学生参加这些测验的结果来记录他们的表现。 系统应该为每个学生存储 &gt; 最后三个分数。 每次运行我的代码时,我都会收到错误消息:AttributeError: 'str' object has no attribute ...

8 Python数学测验 - 输出正确或不正确

任何人都可以更正结束部分( if函数)和( elif函数)我认为它与变量名称有关。 它也不能正常运行,因为它停在: print('Thanks' , name , 'Lets Get Started!') ,再次我不确定为什么会这样。 ...

9 python:数学测验-数据未存储

我的任务是为小学生创建测验。 测验位工作正常。 但是我必须确定孩子需要花多长时间,并将他们的“用户名”,“ correctAnswers”和“ timeTaken”存储到该孩子所在的特定班级的.txt文件中。为此,我请孩子提供其班级编号并存储他们的信息到专门为该类制作的文件中。 我要解决的 ...

2015-01-22 01:07:05 1 691   python
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM