- 帖子
- 3
- 精华
- 0
- 积分
- 10
- 阅读权限
- 10
- 注册时间
- 2018-4-5
- 最后登录
- 2018-4-6
|
Ambition——xb 发表于 2018-4-5 17:55
记录下我玩了多少次,最快猜出来的轮数,以及平均每次猜对用的轮数。
并且存储多组成绩。玩家需要做的就是 ...
我改了一下,我这里运行OK:
print('Please input your name:')
name=raw_input()
f=open('D:\Python 2.7\Logit file\gameUp.txt')
lines=f.readlines() #用readlines把每组成绩分开来:
f.close()
scores={} #初始化一个空字典
for I in lines:
s=I.split() #把每一行的数据拆分成list
scores[s[0]]=s[1:] #第一项作为key,剩下的作为value,source[key]=[value]
#字典类的get方法是按照给定key寻找对应项,如果不存在这样的key,就返回空值None。
score=scores.get(name) #查找当前玩家的数据 变量name中存储的是字典的键
if score is None: #如果没找到
score=[0, 0, 0] #初始化数据
game_times=int(score[0])
min_times=int(score[1])
total_times=int(score[2])
from random import randint #引入模块方法:from 模块名 import 方法名
times=0
num=randint(0,10)
print('Guess what I think?(0~10)')
begin=1
while begin==1:
times+=1 #tiimes来记录每次游戏所用的轮数
answer=int(input())
if answer>num:
print("It's too big")
elif answer<num:
print("It's too small")
elif answer==num:
print('BINGO! '+str(num)+' is the right answer!')
begin=0
#如果是第一次玩,或者本次的轮数比最小轮数还少,就记录本次成绩为最小轮数
if game_times==0 or times<min_times:
min_times=times
total_times+=times
game_times+=1
if game_times > 0: #.因为0是不能作为除数的,所以这里还需要加上判断
avg_times = float(total_times) / game_times
"""
在total_times前加上了float,把它转成了浮点数类型再进行除法运算。
如果不这样做,两个整数相除的结果会默认为整数,而且不是四舍五入。
"""
else:
avg_times = 0
'''
把成绩更新到对应玩家的数据中,如果没有这一项,会自动生成新条目。
我们不能直接把这次成绩存到文件里,
那样就会覆盖掉别人的成绩。必须先把成绩更新到scores字典中,再统一写回文件中。
加str转成字符串,为后面的格式化作准备
'''
scores[name]=[str(game_times),str(min_times),str(total_times)]
#对于每一项成绩,我们要将其格式化:
result='' #初始化一个空字符串,用来存储数据
for name in scores:
line=name+' '+' '.join(scores[name])+'\n' #把成绩按照“name game_times min_times total_times”格式化
#结尾要加上\n换行
result +=line #添加到result中
print('%s,你已经玩了%d次,最少%d轮猜出答案,平均%.2f轮猜出答案'%(name,game_times,min_times,avg_times))
#result='%s %d %d %d'%(name,game_times,min_times,total_times)
f=open('D:\Python 2.7\Logit file\gameUp.txt','w')
f.write(result)
f.close()
|
|