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 '停運(yùn)' 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('回答錯(cuò)誤,本題答案為:',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('回答錯(cuò)誤,本題答案為:'+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('回答錯(cuò)誤,本題答案為:'+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()