设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 11967|回复: 5
打印 上一主题 下一主题

新人求教,猜字游戏,为什么数据无法保存

[复制链接]

2

主题

0

好友

18

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2020-9-13 21:33:04 |只看该作者 |倒序浏览
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


回复

使用道具 举报

2

主题

0

好友

18

积分

新手上路

Rank: 1

沙发
发表于 2020-9-13 21:33:50 |只看该作者
========== 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
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2020-9-14 17:56:26 |只看该作者
d.close()
少了括号,可能是这个原因

不排除有其他可能,调试过程还需加更多输出信息
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

18

积分

新手上路

Rank: 1

地板
发表于 2020-9-14 21:14:37 |只看该作者
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)
回复

使用道具 举报

2

主题

0

好友

18

积分

新手上路

Rank: 1

5#
发表于 2020-9-14 21:15:29 |只看该作者
输入你的名字:王
['张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']
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2020-9-15 13:03:24 |只看该作者
['张227\n', '李23454\n', '王34565\n', '王166\n']


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

line=n+' '+' '.join(scores[n])+'\n'
这里是 空格,不是 空字符
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-27 13:03 , Processed in 0.024250 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部