老师,我的基本功能算是实现了,您帮忙看下需要改进的地方吧!

老师,我的基本功能算是实现了,您帮忙看下需要改进的地方吧!

"""guide_page(guide_word)函数用于创建用户输入和提示的界面"""
import random
import sys
from datetime import datetime
def guide_page(guide_word):
   # 输出标题
   if guide_word == 0:
      print("{Symbols}欢迎进入数字猜猜猜小游戏{Symbols}".format(Symbols = "*" * 20))
   elif guide_word == 1:
       print('您输入的数字区间相同,请重新启动游戏')
   elif guide_word == 2:
       print('*' * 20)

#自定义数字类型判断函数,判断指定的值是否为数字
def all_num(n):
   #用isdigit方法判断n是否为数字
   n_results = n.isdigit()
   return n_results

#自定义数值合法性判定函数,判定指定序列中的数值是否相等以及记录数字区间起始位置的值是否大于记录数字区间终止位置的值
def num_legal(lst = []):
   #判断用户输入两个区间值(保存在列表),是否相同
   if lst[0] == lst[1]:
       guide_page(1)
       sys.exit()
   # 判断用户输入两个区间值(保存在列表),初始值是否大于终止位置的值
   elif lst[0] > lst[1]:
       print("您输入的数字区间大小有误!!请重新启动程序。")
       sys.exit()
   #如果以上-0条件都不满足则返回一个数字1
   else:
       return 1

#自定义产生指定区间随机数函数
def set_final_num(num1,num2):
   #用来保存正确输入后产生的随机数
   rand_i = 0
   #定义一个用来保存用户输入的数字列表
   num_ipt_lst = [num1,num2]
   #用filter筛选用户输入的两个数字是否是数字
   rest = filter(all_num , num_ipt_lst)
   #将获取的值转换成列表
   rest_list = list(rest)
   #如果列表不等于2,则表示肯定有一个或两个都不是数字类型
   if len(list(rest_list)) == 2:
       #将字符串数字类型转换成int型数字列表
       rest_list = list(map(int,rest_list))
       if num_legal(rest_list) == 1:
           rand_i = random.randint(rest_list[0],rest_list[1])
           #print(rand_i)   #测试
           return rand_i
   else:
       #列表长度不等于2,肯定有非法字符,所以输出如下
       print("你输入的为非数字字符,请重新启动!")
       sys.exit()



''' 功能描述:判定所输入的数值是否在指定的区间'''
def check_num_legal(num):
   #定义一个布尔型用来判定用户猜的数字是否在区间内,初始值为False
   is_primer = True
   if num >= int(i) and num <= int (j):
   #如果用户判定属于区间则返回布尔值True
       is_primer = False
   else:
       print("对不起你输入的数字未在指定区间!!!")
       return is_primer

   '''定义打开日志写入玩家猜测的时间和次数、以及数字,并且赋值给变量名'''
def write_record(times,value):
   #打开文件record.txt用读写的模式将用户信息写入日期
   with open("record.txt",'a+',encoding = "UTF-8") as f:
       a = datetime.now()
       f.write("{0}:第{1}次您猜测的数字为:{2}\n".format(datetime.now(),times,value))




"""依据所产生的随机数字(rand1),提示玩家输入猜测数字并进行比对直到猜测到正确数字"""
def main(rand1):
   #记录用户猜测数字的次数,默认为整形0
   temp = 0
   #给定无限循环用来完成用户的猜测过程
   while True:
       guess_num = int(input("请继续输入你猜测的数字:"))
       if check_num_legal(guess_num) == True:
           continue
       temp += 1
       write_record(temp, guess_num)
       if guess_num == rand1:
           print("恭喜你!只用了{0}次就赢得了游戏".format(temp))
           sys.exit()
       elif guess_num < rand1:
           print("Lower than the answer")
           guide_page(2)
           continue
       else:
           print("Higher than the answer")
           guide_page(2)
           continue

if __name__ == '__main__':
   guide_page(0)
   #用户输入区间起始值
   i = input("数字区间起始值:")
   #用户输入区间终止值
   j = input("数字区间终止值:")
   rand_section = [i,j]
   print("所产生的随机数区间是:",rand_section)
   #接受产生的随机数
   r_rand = set_final_num(i, j)
   #哈哈,先打印答案,有点智障
   print("答案:{0}".format(r_rand))
   #调用主函数,我们来快乐的游戏吧
   main(r_rand)

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
Quantitative 2019-08-13 01:40:55
#自定义产生指定区间随机数函数
def set_final_num(num1,num2):
    #用来保存正确输入后产生的随机数
    rand_i = 0
    #定义一个用来保存用户输入的数字列表
    num_ipt_lst = [num1,num2]
    #用filter筛选用户输入的两个数字是否是数字
    rest = filter(all_num , num_ipt_lst)
    #将获取的值转换成列表
    rest_list = list(rest)
    #如果列表不等于2,则表示肯定有一个或两个都不是数字类型
    if len(list(rest_list)) == 2:
        #将字符串数字类型转换成int型数字列表
        rest_list = list(map(int,rest_list))
        if num_legal(rest_list) == 1:
            rand_i = random.randint(rest_list[0],rest_list[1])
            #print(rand_i)   #测试
            return rand_i
    else:
        #列表长度不等于2,肯定有非法字符,所以输出如下
        print("你输入的为非数字字符,请重新启动!")
        sys.exit()

rest = filter(all_num, num_list)

rest_list = list(rest) 

all_num()里面是isdigit函数,返回的是True和False,为什么用来判断数字呢?

我尝试list(rest)返回的是一个空列表,又是什么原因呢

  • 同学,你好。isdigit() 方法检测字符串是否只由数字组成。如果字符串只包含数字则返回 True 否则返回 False。filter() 函数用于过滤序列,将num_ipt_lst列表的每个元素作为参数传递给函数all_num进行判断,返回 True 或 False,最后将返回 True 的元素放到新列表中。同学可以看下num1和num2的值是否都由数字组成。
    2019-08-13 10:18:20
  • 明白了,谢谢
    2019-08-13 10:50:19
好帮手慕美 2019-08-12 11:17:33

同学,你好。同学相应功能完成了,很棒哦!但还有细节需要注意:

1、set_final_num()函数中,rest已经转换为列表了,在使用len()获取长度时不需要再转换成列表了。

http://img1.sycdn.imooc.com//climg/5d50d9de0001a32e06410210.jpg

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • #自定义产生指定区间随机数函数 def set_final_num(num1,num2): #用来保存正确输入后产生的随机数 rand_i = 0 #定义一个用来保存用户输入的数字列表 num_ipt_lst = [num1,num2] #用filter筛选用户输入的两个数字是否是数字 rest = filter(all_num , num_ipt_lst) #将获取的值转换成列表 rest_list = list(rest) #如果列表不等于2,则表示肯定有一个或两个都不是数字类型 if len(list(rest_list)) == 2: #将字符串数字类型转换成int型数字列表 rest_list = list(map(int,rest_list)) if num_legal(rest_list) == 1: rand_i = random.randint(rest_list[0],rest_list[1]) #print(rand_i) #测试 return rand_i else: #列表长度不等于2,肯定有非法字符,所以输出如下 print("你输入的为非数字字符,请重新启动!") sys.exit() rest = filter(all_num, num_list) rest_list = list(rest) all_num()里面是isdigit函数,返回的是True和False,为什么用来判断数字呢? 我尝试list(rest)返回的是一个空列表,又是什么原因呢
    2019-08-13 01:41:22
  • #自定义产生指定区间随机数函数 def set_final_num(num1,num2): #用来保存正确输入后产生的随机数 rand_i = 0 #定义一个用来保存用户输入的数字列表 num_ipt_lst = [num1,num2] #用filter筛选用户输入的两个数字是否是数字 rest = filter(all_num , num_ipt_lst) #将获取的值转换成列表 rest_list = list(rest) #如果列表不等于2,则表示肯定有一个或两个都不是数字类型 if len(list(rest_list)) == 2: #将字符串数字类型转换成int型数字列表 rest_list = list(map(int,rest_list)) if num_legal(rest_list) == 1: rand_i = random.randint(rest_list[0],rest_list[1]) #print(rand_i) #测试 return rand_i else: #列表长度不等于2,肯定有非法字符,所以输出如下 print("你输入的为非数字字符,请重新启动!") sys.exit() rest = filter(all_num, num_list) rest_list = list(rest) all_num()里面是isdigit函数,返回的是True和False,为什么用来判断数字呢? 我尝试list(rest)返回的是一个空列表,又是什么原因呢
    2019-08-13 01:41:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师