博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
猜数小游戏-对random,sys,datetime模块的使用,以及对于函数及封装练习
阅读量:2047 次
发布时间:2019-04-28

本文共 5989 字,大约阅读时间需要 19 分钟。

任务描述

一、语言和环境

1、实现语言:Python语言

2、版本:Python3.6或Python3.6以上版本

3、环境要求及开发工具:Pycharm

二、程序整体要求

1、 划分功能模块,日志文件用以进行游戏过程中信息记录,主程序用以进行代码编写

2、 函数的定义要清楚易懂,代码结构要层次分明,代码中可添加必要的注释

3、 程序中的函数名、变量名、参数名称要符合命名规范

4、 程序运行效果与提供的页面效果图、结构保持一致,提示中的分隔符(“*”)数量不做统一要求,文字大小、背景色也不做统一要求

5、 将作业项目形成压缩文件并提交

三、思路分析:

由题目要求和运行效果,可分析出项目划分为两大模块:mooc_test.py和record.txt

前者主要完成游戏后台逻辑的控制,并进行如效果图所示的功能点的补充(要求编码时注意函数抽取思想的应用):

1、自定义游戏进入提示函数guide_page(guide_word):

     功能描述: 提示玩家进入游戏,并输出如效果图标题的所示信息, 要求:

        (1)设置参数guide_word,记录要输出的标题文字信息

        (2)运用字符串的格式化函数(format),拼接“*”号和标题文字信息

        (3)符合程序运行效果图中标题的样式进行输出(注:“*”号的数量不作统一限制)

2、自定义数字类型判断函数all_num(n):

     功能描述:判断指定的值是否为数字,要求:

        (1)设置参数n接收用于进行判定的变量的值

        (2)运用isdigit( )方法进行判定并返回其判定结果 

3、自定义数值合法性判定函数num_legal(ls):

     功能描述:判定指定序列中的数值是否相等以及记录数字区间起始位置的值是否大于记录数字区间终止位置的值,要求:

        (1)设置列表类型的参数用于接收指定的序列

        (2)取出序列中的值并进行比较:

                     若两者相等,则退出程序,并提示玩家重新启动程序;

                     若表示数字区间起始位置的值大于数字区间终止位置的值,则退出程序,并提示玩家重新启动程序;

                     反之,则返回值为1

          注意:导入sys模块,sys.exit()即退出程序

4、自定义产生指定区间随机数函数set_final_num(num1,num2):

     功能描述:根据参数值,产生一个位于参数值区间以内的随机数, 要求:

       (1)设置两个参数用于接收用户所输入区间的起始值和终止值,并将其保存至列表中

       (2)利用内置函数filter()及思路分析2中的all_num(n)过滤以确保输入值全部为数字

       (3)依据(2)中过滤后的返回值进行判断,若全部为数字,则调用自定义的等值判断函数,判断输入值是否相等,并根据判断之后的返回值,输出用户产生随机数的区间,并运用random模块,返回产生区间内的随机数;反之则提示玩家所输入的为非数字字符,请重新启动

5、自定义核查数值是否属于指定区间函数check_num_legal(num):

     功能描述:判定所输入的数值是否在指定的区间

     要求:依据输入的数字区间起始值和终止值,利用条件语句判断输入数值是否在指定区间,若不在该区间内,则提示玩家所输入的数字未在指定区间

6、自定义日志写入函数write_record(times,value):

     功能描述:将玩家每一次猜测数字和本次猜测次数两项信息写入日志文件,要求:

     (1)设置参数接收玩家猜测的次数(times)和本次猜测的具体数字(value)

     (2)根据datetime模块获取玩家进行每一次猜测数字输入的时间

     (3)使用with语法操作日志文件,将获取到的参数和时间信息以追加方式写入日志文件

8、自定义main(rand1)函数:

     功能描述:依据所产生的随机数字(rand1),提示玩家输入猜测数字并进行比对直到猜测到正确数字, 要求:

     (1)设置变量temp接收已产生的随机数字,记录猜测数字的次数(默认为0) 

     (2)设置无限循环:                             

                                 1.提示用户输入所猜测数字,并转换为int类型 

                                 2.if判断核查数值函数,如果为真,则输出对不起您输入的数字未在指定区间!!!,跳过本次循环

                                 3.实现用户输入一次猜测数字,次数+1

                                 4.调用日志写入函数,传入猜测的次数和用户猜测的数字

                                 5.使用if语句判断用户猜测的数字,相等,大于,小于的情况,并输出如效果图所示的提示信息

9、控制程序逻辑执行流程(if __name__ == '__main__':):

     功能描述:依据效果图,调用自定义函数实现对应的功能

     要求:

              (1)调用guide_page(  )输出如效果图所示的标题信息

              (2)设置两个变量(i,j)分别接收用户输入数字区间的起始值和终止值

              (3)调用set_final_num( )函数得到随机数

              (4)调用main( )执行程序流程

注意:根据“数字猜猜猜”游戏的整体思路,控制程序的执行流程,记录玩家每一次游戏的数据信息(日志写入函数的信息格式),效果如下:

//img.mukewang.com/climg/5cd007a600010bd805000122.jpg

#模块导入import random,sysfrom datetime import datetime# 1、自定义游戏进入提示函数guide_page(guide_word):#      功能描述: 提示玩家进入游戏,并输出如效果图标题的所示信息, 要求:#         (1)设置参数guide_word,记录要输出的标题文字信息#         (2)运用字符串的格式化函数(format),拼接“*”号和标题文字信息#         (3)符合程序运行效果图中标题的样式进行输出(注:“*”号的数量不作统一限制)def guide_page(guide_word):    print('{0}{1}{0}'.format('*' * 20, guide_word))# 2、自定义数字类型判断函数all_num(n):#      功能描述:判断指定的值是否为数字,要求:#         (1)设置参数n接收用于进行判定的变量的值#         (2)运用isdigit( )方法进行判定并返回其判定结果def all_num(n):    return n.isdigit()# 3、自定义数值合法性判定函数num_legal(ls):#      功能描述:判定指定序列中的数值是否相等以及记录数字区间起始位置的值是否大于记录数字区间终止位置的值,要求:#         (1)设置列表类型的参数用于接收指定的序列#         (2)取出序列中的值并进行比较:#                      若两者相等,则退出程序,并提示玩家重新启动程序;#                      若表示数字区间起始位置的值大于数字区间终止位置的值,则退出程序,并提示玩家重新启动程序;#                      反之,则返回值为1#           注意:导入sys模块,sys.exit()即退出程序def num_legal(ls):    ls_int = list(map(int, ls))    if ls_int[0] == ls_int[1]:        print("您输入的区间数字相同!!请重新启动程序。")        sys.exit()  # sys模块    elif ls_int[0] > ls_int[1]:        print("您输入的数字区间大小有误!!请重新启动程序。")        sys.exit()    else:        return 1# 4、自定义产生指定区间随机数函数set_final_num(num1,num2):#      功能描述:根据参数值,产生一个位于参数值区间以内的随机数, 要求:#        (1)设置两个参数用于接收用户所输入区间的起始值和终止值,并将其保存至列表中#        (2)利用内置函数filter()及思路分析2中的all_num(n)过滤以确保输入值全部为数字#        (3)依据(2)中过滤后的返回值进行判断,若全部为数字,则调用自定义的等值判断函数,判断输入值是否相等,并根据判断之后的返回值,输出用户产生随机数的区间,并运用random模块,返回产生区间内的随机数;反之则提示玩家所输入的为非数字字符,请重新启动def set_final_num(num1, num2):    final_num = [num1, num2]    rest = list(filter(all_num, final_num))    if len(rest) == 2:        if num_legal(rest):            return random.randint(int(num1), int(num2))    else:        print("您所输入的为非数字字符!!请重新启动程序。")        sys.exit()# 5、自定义核查数值是否属于指定区间函数check_num_legal(num):#      功能描述:判定所输入的数值是否在指定的区间#      要求:依据输入的数字区间起始值和终止值,利用条件语句判断输入数值是否在指定区间,若不在该区间内,则提示玩家所输入的数字未在指定区间def check_num_legal(num):    if int(i) <= num <= int(j):        return True    else:        print("对不起您输入的数字未在指定区间!!!")        return False# 6、自定义日志写入函数write_record(times,value):#      功能描述:将玩家每一次猜测数字和本次猜测次数两项信息写入日志文件,要求:#      (1)设置参数接收玩家猜测的次数(times)和本次猜测的具体数字(value)#      (2)根据datetime模块获取玩家进行每一次猜测数字输入的时间#      (3)使用with语法操作日志文件,将获取到的参数和时间信息以追加方式写入日志文件def write_record(times, value):    now_time = datetime.now()    with open('record.txt', 'a+', encoding='utf_8') as f:        f.write('{0}:第{1}次您猜测的数字为:{2}\n'.format(now_time, times, value))# 8、自定义main(rand1)函数:#      功能描述:依据所产生的随机数字(rand1),提示玩家输入猜测数字并进行比对直到猜测到正确数字, 要求:#      (1)设置变量temp接收已产生的随机数字,记录猜测数字的次数(默认为0)#      (2)设置无限循环:#                       1.提示用户输入所猜测数字,并转换为int类型#                       2.if判断核查数值函数,如果为真,则输出对不起您输入的数字未在指定区间!!!,跳过本次循环#                       3.实现用户输入一次猜测数字,次数+1#                       4.调用日志写入函数,传入猜测的次数和用户猜测的数字#                       5.使用if语句判断用户猜测的数字,相等,大于,小于的情况,并输出如效果图所示的提示信息def main(rand1):    number_ = 0    while True:        guess_number = input("请继续输入您猜测的数字:")        if all_num(guess_number):            guess_number = int(guess_number)        else:            print("您所输入的是非数字字符!!请重新输入。")            continue        number_ += 1        write_record(number_,guess_number)        if check_num_legal(guess_number) == False:            continue        else:            print("*" * 20)            if guess_number < rand1:                print("Lower than the answer")            elif guess_number > rand1:                print("Higher than the answer")            else:                print("恭喜您!只用了{0}次就赢得了游戏".format(number_))                break# 9、控制程序逻辑执行流程(if __name__ == '__main__':):#      功能描述:依据效果图,调用自定义函数实现对应的功能#      要求:#               (1)调用guide_page(  )输出如效果图所示的标题信息#               (2)设置两个变量(i,j)分别接收用户输入数字区间的起始值和终止值#               (3)调用set_final_num( )函数得到随机数#               (4)调用main( )执行程序流程if __name__ == '__main__':    guide_word = '欢迎进入数字猜猜猜小游戏'    guide_page(guide_word)    i = input("数字区间起始值:")    j = input("数字区间终止值:")    rand_num = set_final_num(i, j)    print("所产生的随机数字区间为:", [i, j])    main(rand_num)

项目效果图:

 

 

 

 项目源码地址为:

转载地址:http://vcmof.baihongyu.com/

你可能感兴趣的文章
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
逆序对的数量(递归+归并思想)
查看>>
数的范围(二分查找上下界)
查看>>
算法导论阅读顺序
查看>>
Windows程序设计:直线绘制
查看>>
linux之CentOS下文件解压方式
查看>>
Django字段的创建并连接MYSQL
查看>>
div标签布局的使用
查看>>
HTML中表格的使用
查看>>
(模板 重要)Tarjan算法解决LCA问题(PAT 1151 LCA in a Binary Tree)
查看>>
(PAT 1154) Vertex Coloring (图的广度优先遍历)
查看>>
(PAT 1115) Counting Nodes in a BST (二叉查找树-统计指定层元素个数)
查看>>
(PAT 1143) Lowest Common Ancestor (二叉查找树的LCA)
查看>>
(PAT 1061) Dating (字符串处理)
查看>>
(PAT 1118) Birds in Forest (并查集)
查看>>
数据结构 拓扑排序
查看>>
(PAT 1040) Longest Symmetric String (DP-最长回文子串)
查看>>
(PAT 1145) Hashing - Average Search Time (哈希表冲突处理)
查看>>