Crossin的编程教室

标题: 新人求教,猜字游戏,为什么数据无法保存 [打印本页]

作者: dgyzdl    时间: 2020-9-13 21:33
标题: 新人求教,猜字游戏,为什么数据无法保存
def isEqual(num1,num2):
    if num1<num2:
        print('too small')
        return False
    elif num1>num2:
        print('too big')
        return False
    else:
        print('bingo')
        return True
from random import randint
name=input('输入你的名字:')
f=open('game2.txt','r',encoding='gbk')
lines=f.readlines()

f.close()
scores={}#初始化一个空字典
for l in lines:
    s=l.split()#把每一行的数据拆分成list
    scores[s[0]]=s[1:]#第一项作为Key剩下的作为value
score=scores.get(name)#找到当前玩家的数据
if score is None:
    score=[0,0,0]
game_times=int(score[0])
min_times=int(score[1])
total_times=int(score[2])
if game_times>0:
    avg_times=total_times/game_times
else:
    avg_times=0
print('%s,你已经玩了%d次,最少%d轮猜出答案,平均%.2f轮猜出答案'%(name,game_times,min_times,avg_times))
num=randint(1,10)
times=0
print('Guess what I think')
bingo=False
while bingo==False:
    times+=1
    answer=int(input())
    bingo=isEqual(answer,num)
if game_times==0 or times<min_times:
    min_times=times
total_times+=times
game_times+=1
scores[name]= [str(game_times),str(min_times),str(total_times)]
result=''
for n in scores:
    line=n+''+''.join(scores[n])+'\n'
    result+=line
    print(result)
d=open('game2.txt','w',encoding='gbk')
d.write(result)
d.close



作者: dgyzdl    时间: 2020-9-13 21:33
========== RESTART: D:\Python\Lib\idlelib\Excise\Guess what I think.py =========
输入你的名字:张
张,你已经玩了0次,最少0轮猜出答案,平均0.00轮猜出答案
Guess what I think
3
too small
5
too small
8
bingo
张133

>>>
========== RESTART: D:\Python\Lib\idlelib\Excise\Guess what I think.py =========
输入你的名字:张
张,你已经玩了0次,最少0轮猜出答案,平均0.00轮猜出答案
Guess what I think

作者: crossin先生    时间: 2020-9-14 17:56
d.close()
少了括号,可能是这个原因

不排除有其他可能,调试过程还需加更多输出信息
作者: dgyzdl    时间: 2020-9-14 21:14
crossin先生 发表于 2020-9-14 17:56
d.close()
少了括号,可能是这个原因

大神,你好,我加上括号后,但是每次玩得数据,程序都会在下一行保存,不会再原来的数据上进行添加,是哪里出错了啊
def isEqual(num1,num2):
    if num1<num2:
        print('too small')
        return False
    elif num1>num2:
        print('too big')
        return False
    else:
        print('bingo')
        return True
from random import randint
name=input('输入你的名字:')
f=open('game.txt','r',encoding='gbk')
lines=f.readlines()
f.close()
print(lines)#查看文本数据
scores={}#初始化一个空字典
for l in lines:
    s=l.split()#把每一行的数据拆分成list
    scores[s[0]]=s[1:]#第一项作为Key剩下的作为value
score=scores.get(name)#找到当前玩家的数据
if score is None:
    score=[0,0,0]
print(score)#查看玩家数据
game_times=int(score[0])
min_times=int(score[1])
total_times=int(score[2])
if game_times>0:
    avg_times=total_times/game_times
else:
    avg_times=0
print('%s,你已经玩了%d次,最少%d轮猜出答案,平均%.2f轮猜出答案'%(name,game_times,min_times,avg_times))
num=randint(1,10)
times=0
print('Guess what I think')
bingo=False
while bingo==False:
    times+=1
    answer=int(input())
    bingo=isEqual(answer,num)
if game_times==0 or times<min_times:
    min_times=times
total_times+=times
game_times+=1
scores[name]= [str(game_times),str(min_times),str(total_times)]
result=''
for n in scores:
    line=n+''+''.join(scores[n])+'\n'
    result+=line
    print(result)
d=open('game.txt','w',encoding='gbk')
d.write(result)
d.close()
#查看数据是否保存
f=open('game.txt',encoding='gbk')
line=f.readlines()
f.close()
print(line)

作者: dgyzdl    时间: 2020-9-14 21:15
输入你的名字:王
['张227\n', '李23454\n', '王34565\n']
[0, 0, 0]
王,你已经玩了0次,最少0轮猜出答案,平均0.00轮猜出答案
Guess what I think
23
too big
1
too small
4
too small
5
too small
7
too small
8
bingo
张227

张227
李23454

张227
李23454
王34565

张227
李23454
王34565
王166

['张227\n', '李23454\n', '王34565\n', '王166\n']
作者: crossin先生    时间: 2020-9-15 13:03
['张227\n', '李23454\n', '王34565\n', '王166\n']


你这些记录里都没有空格间隔开呀,区分它是叫王,还是叫 王166

line=n+' '+' '.join(scores[n])+'\n'
这里是 空格,不是 空字符




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5