专栏首页用户2119464的专栏python入门(五) 猜随机数小游戏改进(涉及数据和文件的更新)

python入门(五) 猜随机数小游戏改进(涉及数据和文件的更新)

# 猜随机数小游戏代码如下
from random import randint

num = randint(0, 100)
game_times = 0 # 玩家游戏次数
min_times = 0 # 最短次数猜中
total_times = 0 # 共猜测次数
times = 0 # 本次多少轮猜出答案
scores = {} # 记录数据的字典

# import random 可采用引入模块的形式写随机数代码
# num = random.randint(0, 100)


def judge_new(name):#判断新老用户
    global game_times
    global min_times
    global total_times
    try:
        f = open("data.txt")
        lines = f.readlines()  # 读取成为list数据
        f.close()
    except:
        print("文件打开失败.")
    #从列表中读取用户数据

    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 = float(total_times) / game_times
        print("%s, 你已经玩了%d次,最少%d轮猜出答案,平均%.2f轮猜出答案" % (name, game_times, min_times, avg_times))
        print("%s, 请继续您的游戏." % name)
    else:
        avg_times = 0
        print("%s, 请开始您的新游戏." % name)
    #判断结果输出


def judge_game():
    global times
    _yournum = int(input("please input your number:"))
    times = 1
    while _yournum != num:
        if _yournum < num:
            print("这是你的第%d次猜测," % times + "你的数字%d比随机数小." % _yournum)
        else:
            print("这是你的第%d次猜测,你的数字%d比随机数大." % (times, _yournum))
        _yournum = int(input("please input your number:"))
        times = times + 1
    # 此处不能够用for循环,python中for循环不太适用条件循环
    print("这是你的第%d次猜测,你的数字%d与随机数相同." % (times, _yournum))
# 游戏部分


def upgrade(name):
    global game_times
    global min_times
    global total_times
    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: # n取到的为key值
        line = n + " " + " ".join(scores[n]) + "\n"
        result +=  line
    #制作输出字符串

    try:
        f = open("data.txt", "w")
        f.write(result)
        f.close()
    except:
        print("文件打开失败.")
    #结果输出文件


name = input("请输入你的名字:")  # name 用来区分玩家的标志
judge_new(name)
judge_game()
upgrade(name)

以上程序中所用到的知识点如下:

  • 字典

用法:dictionary = { 'key' = value,  ... } #一个键值对的集合 字典查找函数get()

用法:dictionary.get(查找的key值)

#若查找不到,函数返回None

  • 处理异常

用法

try: 引发异常的语句块 except: 处理异常的语句块

#适用情况

#输入不合规定的值 #需要打开的文件不存在

  • python "=="和"is"的区别

#"=="如果如果变量引用的对象值相等,则会返回True

#"is"如果两个变量指向相同的对象,则会返回True

  • python中的"与、或、非"

与:and 或:or 非:not

  • for...in遍历字典

用法

for name in score:

print(score[name])

#遍历的变量中存储的是字典的key

# dir(模块名)

#查看引入的模块中含有的函数和变量

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • js实现带框拖拽

    星辉
  • 域名解析及连接服务器的相关问题

    星辉
  • python_web(一)实现HTTP客户端的程序

    星辉
  • 从卷积拆分和分组的角度看CNN模型的演化

    如题,这篇文章将尝试从卷积拆分的角度看一看各种经典CNN backbone网络module是如何演进的,为了视角的统一,仅分析单条路径上的卷积形式。

    李拜六不开鑫
  • R语言-多重比较

    前面提到ANOVA的F检验能够知道五种疗法有显著性差异,但是不知道哪一种疗法和其他疗法不同,多重比较可以解决这个问题。TukeyHSD()函数提供对各组均值差异...

    黑妹的小屋
  • 设代资料管理平台,基于engineercms系统核心

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

    hotqin888
  • 线粒体在线注释网站MITOS使用简介

    今天给大家介绍一个在线的线粒体注释网站,MITOS。MITOS主要为动物线粒体注释而构建,也可以注释部分真菌。对于植物,不推荐使用该网站注释(缺少对应的数据库)...

    用户7585161
  • 深度学习算法优化系列二十一 | 在VS2015上利用TensorRT部署YOLOV3-Tiny模型

    大家好,最近在VS2015上尝试用TensorRT来部署检测模型,中间走了两天弯路,感觉对于一个完全新手来说要做成功这件事并不会那么顺利。所以这里写一篇部署文章...

    BBuf
  • 「R」使用yyplot绘制pubmed研究趋势

    在准备转博报告的过程中觉得有必要给一些研究添加Pubmed研究趋势,这个功能Y叔在它的公众号推过,所以我记了一下,之前在写开题报告的时候就用了下。今天又重新操作...

    王诗翔呀
  • Github:深度学习文本检测识别(OCR)精选资源汇总

    今天跟大家推荐一个Github项目,来自NAVER Clova AI Research的hwalsuklee同学汇总了近几年的基于深度学习进行文本检测、识别的论...

    CV君

扫码关注云+社区

领取腾讯云代金券