猜数字游戏升级,增加支持闯关记录文件,猜数字闯关,名称:猜数字规则:系统自


名称:猜数字

规则:系统自动生成一个不包含重复数字的四位数整数,在提示符下玩家输入一个不包含重复数字的四位数整数,根据系统提示调整输入,最终猜出目标数字。

提示: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

评论关闭