Python宁波公交游戏程序代码
documentname="ningbobus.txt"
cancelledline=False
lineoutofserives=False
onewayarrowsign='→'
twowaysarrowsign='⇌'
orsign='/'
questionquantity=10
questionlist=[1,2]
optionsquantity=4
optionnumber=False
import random
def loadingdata(cancelledline,lineoutofserives,documentname):
x=open(documentname,'r',encoding='utf-8')
data1=[]
for line in x.readlines():
line=line.strip()
linedata=line.split()
if len(linedata)!=0:
while len(linedata)<6:
linedata.append('')
data1.append(linedata)
x.close()
data=[]
linename=[]
terminalA=[]
runningdiraction=[]
terminalB=[]
company=[]
remarks=[]
for i in data1:
if (lineoutofserives==True or not '停运' in i[5]) and (cancelledline==True or not '撤销' in i[5]) :
data.append(i)
for i in data:
if orsign in i[0]:
linename.append(i[0].split(orsign))
else:
linename.append(i[0])
if orsign in i[1]:
terminalA.append(i[1].split(orsign))
else:
terminalA.append(i[1])
runningdiraction.append(i[2])
if orsign in i[3]:
terminalB.append(i[3].split(orsign))
else:
terminalB.append(i[3])
company.append(i[4])
remarks.append(i[5])
return [linename,terminalA,runningdiraction,terminalB,company,remarks]
def compare(a,b):
if type(a)==type(b):
if isinstance(a,str):
if a==b:
return True
elif isinstance(a,list):
if len(a)==len(b):
a.sort()
b.sort()
for i in range(0,len(a)):
if a[i]!=b[i]:
return False
return True
return False
def questiondata(cancelledline,lineoutofserives):
data=(loadingdata(cancelledline,lineoutofserives,documentname))
linename=data[0]
terminalA=data[1]
runningdiraction=data[2]
terminalB=data[3]
company=data[4]
remarks=data[5]
datanumber=random.randint(0,len(linename)-1)
questionterminalA=terminalA[datanumber]
questionrunningdiraction=runningdiraction[datanumber]
questionterminalB=terminalB[datanumber]
questionremarks=remarks[datanumber]
answerlinename=[]
for i in range(0,len(linename)):
if ((compare(terminalA[i],questionterminalA) and compare(terminalB[i],questionterminalB)) or ((compare(terminalA[i],questionterminalB) and compare(terminalB[i],questionterminalA))) and runningdiraction[i]==twowaysarrowsign) and questionremarks==remarks[i] and questionrunningdiraction==runningdiraction[i]:
if isinstance(linename[i],str):
answerlinename.append(linename[i])
elif isinstance(linename[i],list):
for j in linename[i]:
answerlinename.append(j)
return [questionterminalA,questionrunningdiraction,questionterminalB,questionremarks,answerlinename]
def question1(cancelledline,lineoutofserives):
x=questiondata(cancelledline,lineoutofserives)
question=x[0:4]
answerdata=x[4]
for i in question:
if isinstance(i,str):
print(i,end=' ')
else:
print(i[0],end='')
for j in i[1:]:
print(orsign+j,end='')
print(' ',end='')
print()
answer=input()
if answer in answerdata:
answerdata.remove(answer)
return [True,answerdata]
else:
return [False,answerdata]
def q1(cancelledline,lineoutofserives,orsign):
k=question1(cancelledline,lineoutofserives)
if k[0]:
print('回答正确',end='')
if k[1]!=[]:
print(',本题答案还有:',end='')
if len(k[1])>1:
print(k[1][0],end='')
for i in k[1][1:]:
print(orsign+i,end='')
else:
print(k[1][0],end='')
print()
return True
else:
print('回答错误,本题答案为:',end='')
if len(k[1])>1:
print(k[1][0],end='')
for i in k[1][1:]:
print(orsign+i,end='')
else:
print(k[1][0],end='')
print()
return False
def question2(cancelledline,lineoutofserives,optionsquantity):
linename=loadingdata(cancelledline,lineoutofserives,documentname)[0]
x=questiondata(cancelledline,lineoutofserives)
question=x[0:4]
answerdata=x[4]
notanswerlinename=[]
for i in linename:
if isinstance(i,str):
if not(i in answerdata):
notanswerlinename.append(i)
else:
for j in i:
if not(j in answerdata):
notanswerlinename.append(j)
for i in question:
if isinstance(i,str):
print(i,end=' ')
else:
print(i[0],end='')
for j in i[1:]:
print(orsign+j,end='')
print(' ',end='')
print()
random.shuffle(notanswerlinename)
options=notanswerlinename[0:optionsquantity-1]
random.shuffle(answerdata)
answeroption=random.randint(0,optionsquantity-1)
options.insert(answeroption,answerdata[0])
return [options,answeroption]
def q2(cancelledline,lineoutofserives,optionsquantity):
x=question2(cancelledline,lineoutofserives,optionsquantity)
options=x[0]
answeroption=x[1]
for i in range(len(options)):
if len(options)>=27 or optionnumber:
print('('+str(i+1)+')',end=' ')
else:
print('('+chr(65+i)+')',end=' ')
print(options[i])
answer=input()
if (len(options)>=27 or optionnumber):
if int(answer)-1==answeroption:
print('回答正确')
return True
else:
print('回答错误,本题答案为:'+str(answeroption+1))
return False
else:
if (answer==chr(answeroption+65) and ord(answer[0])>=65 and ord(answer[0])<=90) or (answer==chr(answeroption+97) and ord(answer[0])>=97 and ord(answer[0])<=122):
print('回答正确')
return True
else:
print('回答错误,本题答案为:'+chr(answeroption+65))
return False
def game(cancelledline,lineoutofserives,orsign,questionquantity,questionlist):
qnumber=1
rightquestions=0
questionquantity=int(questionquantity)
listnumber=0
while questionquantity+1!=qnumber:
print('第'+str(qnumber),end='')
if questionquantity>0:
print('/'+str(questionquantity)+'题')
else:
print('题')
if questionlist[listnumber]==1:
if q1(cancelledline,lineoutofserives,orsign):
rightquestions+=1
if questionlist[listnumber]==2:
if q2(cancelledline,lineoutofserives,optionsquantity):
rightquestions+=1
rightpercent=rightquestions/qnumber*100
qnumber+=1
listnumber=(listnumber+1)%len(questionlist)
print('正确率:'+(str(rightpercent//1)[:-2]+(str(rightpercent%1)+'00')[1:4]+'%'))
print()
game(cancelledline,lineoutofserives,orsign,questionquantity,questionlist)
input()