PYTHON猜数字

# 要求:
# 为猜数字游戏增加记录玩家成绩的功能,包括玩家用户名、玩的次数和平均猜中的轮数等;
# 如果记录里没有玩家输入的用户名,就新建一条记录,否则在原有记录上更新数据;
# 对玩家输入做检测,判定输入的有效性,并保证程序不会因异常输入而出错;
# 将游戏打包为 exe 文件。(可选)
#思路:
#文件记录三个变量:玩家姓名,玩的总次数,玩的总轮数,平均猜中的轮数
# #打开文件,如果玩家存在,读取玩家原先的游戏次数,总轮数
# 如果玩家不存在,创建玩家姓名
# 开始游戏
# 游戏结束,保存玩家游戏次数(原游戏次数+本次游戏次数),总轮数(原轮数+本次轮数)
# 关闭文件
#用到的知识点:输入输出,循环(循环内添加变量),条件判断
#盲点:如何对输入有效性做检测,打包exe文件
#盲点:如何进行文件处理,记录数据,更新数据

# f=open("玩家游戏成绩记录.txt","w")
# f.write("name,0,0,0")
# f.close()
name=input("请输入你的玩家ID吧:")
f=open("玩家游戏成绩记录.txt","r+")
lines=f.readlines()
scores={}
for l in lines:
s=l.split()
scores[s[0]]=s[1:]
score=scores.get(name)
if score==None:
score=[0,0,0]
else:
score = scores.get(name)
import random
total_times=int(score[0])
times=float(score[1])
if times!=0:
average_times = times / total_times
else:
average_times=0
if name not in scores.keys():
print("你好,%s!\n欢迎新玩家"%(name))
else:
print("%s,你好,欢迎回来!\n你已经玩了%d次,平均%.2f猜中一次"%(name,total_times,average_times))
while True:
choice = input("1:开始游戏 2:退出游戏\n")
if choice=="1":
print("%s,下面请你猜一个1-10之间的数字"%(name))
real_number = random.randint(1, 10)
while True:
number = input("猜猜我是几")
b=number.isdigit()
if b==True:
number=int(number)
times=times+1
if number<real_number:
print("你猜的太小了")
elif number>real_number:
print("你猜的太大了")
else:
print("你猜对了")
break
else:
print("你的输入有错误,请输入数字")
total_times=total_times+1
average_times=float(times/total_times)
print("%s,你一共玩了%d次,平均%.2f轮猜中一次"%(name,total_times,average_times))
else:
print("%s,我们下回见"%(name))
break
scores[name]=[str(total_times),str(times),str(average_times)]
result=""
for n in scores:
lines=n+" "+" ".join(scores[n])+"\n"
result+=lines
print(result)
f.write(result)
f.close

#改变文件中数值的方法:
#将文件逐行读出
#将对应的姓名和值储存成字典
###########原始处理方法:用字典取出值(字符串),转化为列表修改。
###########标红:不用那么复杂,当字典按键取值的时候,值自动生成一个列表,需要需改内容,只需要
########### 变量名=字典(键)=值(值的类型为列表)
########### 变量名[位置]=新变量
########## 存储的时候:
########### for n in 字典:###字典会按键返回每个键的内容为一个元素
########## result=n(键)+" ".join(字典名(n))+"\n" ###把键+值转化成字符串
########## result+=line #####每次的内容转化为字符串后
########## f=open("文件名","w")
######### f.write(result)
######### f.close
######### 总结:f的文件需要先读取出来,转化为可以改变的序列,通过追踪序列的某个位置得到该位置的变量,换成新变量,最终把这个序列转化为字符串重新存回去
######## 因为写入模式一次性会覆盖所有内容,所以每次都要先取出全部,修改其中的部分,再把新的全部内容存回去

猜你喜欢

转载自www.cnblogs.com/sd19/p/11704090.html