猜数字游戏升级,增加支持闯关记录文件,猜数字闯关,名称:猜数字规则:系统自
猜数字游戏升级,增加支持闯关记录文件,猜数字闯关,名称:猜数字规则:系统自
名称:猜数字
规则:系统自动生成一个不包含重复数字的四位数整数,在提示符下玩家输入一个不包含重复数字的四位数整数,根据系统提示调整输入,最终猜出目标数字。
提示:2对3有,说明刚输入的数字中有3个数包含在目标数字中,且有2个数字位置也正确。
数字命令:
0000:显示闯关记录。
1000:重过当前关卡。
1111:跳关。
9999:退出程序。
更新:
将闯关记录保存到文件;
查看闯关记录命令(0000);
# -*- coding: utf-8 -*-"""名称:猜数字规则:系统自动生成一个不包含重复数字的四位数整数,在提示符下玩家输入一个不包含重复数字的四位数整数,根据系统提示调整输入,最终猜出目标数字。提示:2对3有,说明刚输入的数字中有3个数包含在目标数字中,且有2个数字位置也正确。数字命令:+ 0000:显示闯关记录。+ 1000:重过当前关卡。+ 1111:跳关。+ 9999:退出程序。"""import random,picklehistory=[]__author__='EU软件工作室'def isRepeat(s): '''检查参数是否包含重复数字''' b=False w1=s//1000 w2=(s-w1*1000)//100 w3=(s-w1*1000-w2*100)//10 w4=s-w1*1000-w2*100-w3*10 if w1==w2 or w1==w3 or w1==w4 or w2==w3 or w2==w4 or w3==w4:b=True return bdef getTarget(): '''获得一个不含重复数字的四位数整数.''' random.seed t=random.randint(1023,9876) while isRepeat(t): t=random.randint(1023,9876) return tdef listAll(): '''列出所有符合游戏规则的数字。''' print([a for a in range(1023,9876) if not isRepeat(a)])if __name__=='__main__': try: run=True retry=False target=0 level=oldlevel=0 gCount=0 bChanged=False#是否需要保存文件 cHis=[] #当前关卡输入记录 print(__doc__) print("----------------------------------------------------") #读取过关历史记录 try: print("读取过关历史记录...") f=open("csz_history.log",'rb') history=pickle.load(f) except FileNotFoundError: print("游戏历史记录文件不存在,如果有将其移动到当前路径下。") print("创建游戏历史记录文件...\\n完成。\\n提示:复制游戏文件时,请将 csz_history.log 文件一起复制。") f=open("csz_history.log",'wb') except EOFError: pass finally: level=oldlevel=len(history) if level>0: print("完毕,已经闯过%d关." % level) else: print("没有闯关记录。") f.close print("----------------------------------------------------") while run: if target==0: target=getTarget() print("目标数字已经产生:xxxx(4位整数,1023-9876)。\\n查看目标数字是否已经过关,请稍候...") for a in history: if a[0]==target: target=0 retry=True break if retry:continue print("完毕!无记录,开始游戏。") level+=1;print('第%d关! 开始!!\\n' % level) gCount+=1 print("第%d次:" % gCount,) sguess=input('请输入:') sguess=sguess.strip() while sguess=="" \\ or sguess.isnumeric()==False \\ or sguess[0]=='0' \\ or len(sguess)!=4 \\ or isRepeat(int(sguess)): if sguess=='1000': print("\\n\\n目标数字是%d,重新开始第%d关。" % (target,level)) target=0 gCount=0 level-=1 break elif sguess=='1111': print('\\n跳关无耻!目标数字是%d。' % target) history.append((-1,-1)) bChanged=True#需要保存文件 target=0 gCount=0 break elif sguess=='0000':#打印闯关记录,并退出程序. if len(history)>0: print('过关记录:', [h[0] for h in history]) else: print('无过关记录。\\n') break elif sguess=='9999': print('\\n取消游戏,本次共闯过%d关。' % (level-oldlevel-1)) run=False break else: sguess=input('非法内容,重新输入:') if run==False:break if sguess=='1111' or sguess=='0000':continue guess=int(sguess) cHis.append(guess)#保存猜数历史记录 if guess==target: print("猜对了!!目标数字正是%d,共%d次完成,第%d关通过。\\n" % (target,gCount,level)) #保存闯关记录,过关后将刚目标数字保存下来,退出程序时将其保存到文件中 if not target in history: history.append((target,gCount,tuple(cHis))) target=0 gCount=0 bChanged=True#需要保存文件 elif 1022<guess<9877: i=0 you=0 dui=0 sguess=str(guess) starget=str(target) while i<4: if sguess[i] in starget: you+=1 if sguess[i]==starget[i]: dui+=1 i+=1 print("%d,%d对%d有。\\n" % (guess,dui,you)) except EOFError: pass except KeyboardInterrupt: pass except ValueError: pass except SystemExit: pass finally: #退出程序前将历史记录保存到文件。 if bChanged: print("将游戏记录保存到文件...") f = open("csz_history.log",'wb') pickle.dump(history, f) #dump the history to a file f.close() else: print("无需保存文件。")print("\\n运行结束。")#该片段来自于http://byrx.net
相关内容
- RC4文件加密,,基于RC4流加密算法,使
- 从豆瓣自动获取mp3封面。 MP3与id3 名称互换,封面id3,由
- pop3协议收取邮件,pop3协议收取,# pop3.py i
- python在sqlite动态创建表代码,pythonsqlite,import sqlit
- Python版的文曲星猜数字,python文曲星猜数字,# -*- codin
- python wininet封装模块,pythonwininet封装,windows对Inte
- 使用urllib模拟登陆豆瓣电台,抓取红心歌曲表单,增加
- appendInt, appendShort, appendStr,,演示appendInt,
- Python实现的一个简单的状态框架,python实现框架,from
- python通过MySQLdb模块连接查询mysql数据,mysqldbmysql,#!/us
评论关闭