• python实例 - 猜数字游戏


    猜数字游戏

    • 在游戏中,程序每一轮会随机生成一个0~1024之间的数字,用户输入猜测的数字,程序告诉用户猜大了还是猜小了。在一定次数内猜对,则本轮用户获胜,否则本轮用户失败。每一轮开始时,程序会要求用户输入用户名。程序会一直运行,直到用户输入“3”,停止游戏。在每一轮游戏开始前,输入“1”可以查看用户的输入历史。
    • 如何判断每一轮猜测多少次以内算猜测成功,多少次以上算猜测失败?
    • 根据二分法的原理,假设答案的范围是M~N,那么最多猜测log2(M+N)次就能猜测出正确答案。在这个案例中,范围为0~1024,以2为底,1024的对数为10,所以最多猜测10次就能得到正确答案。
    • 程序代码:
      import random
      
      history = {}
      
      def creat_answer():
          return random.randint(0, 1024)
      
      def try_to_guess(name, answer):
          # 猜数的次数
          try_num = 0
          while try_num < 10:
              guess_answer = int(input("请输入一个数字:"))
              if guess_answer < answer:
                  print("你猜小了~")
                  history[name].append('失败')
      
              elif guess_answer == answer:
                  print("bingo,你猜对了~")
                  history[name].append('成功')
                  break
              else:
                  print("你猜大了~")
                  history[name].append('失败')
              try_num += 1
          else:
              print("你猜的次数太多啦,失败~")
              history[name].append('失败')
      
      # 显示历史成绩
      def show_history():
          for name, score in history.items():
              print('用户名:',name + ',历史成绩', score)
      
      # 开始游戏
      def start():
          guess_name = input("请输入你的名字:")
          # 检查用户名是否存在,不存在则创建
          if guess_name not in history.keys():
              history[guess_name] = []
      
          try_to_guess(guess_name, creat_answer())
      
      if __name__ == '__main__':
          select_dict = {'1': show_history, '2': start, '3': exit}
          while True:
              guess_select = input('1. 历史记录\n2. 开始游戏\n3. 退出游戏\n请输入数字选择:')
              select_dict.get(guess_select)()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
    • 运行结果
      在这里插入图片描述
    • 拓展,用户自定义数字区间
      import random
      import math
      
      history = {}
      
      def input_guess(start, end):
          ''' 判断用户输入的字符,不符合则提示用户重新输入,符合则返回这个字符 '''
          guess = int(input('请输入{}~{}之间,猜测的数字:'.format(start, end)))
          if guess >= start and guess <= end:
              return guess
          else:
              print('输入非法数字,重新输入,请确定数字在{}~{}之间'.format(start, end))
      
      def try_to_guess(name):
          # 定义猜测次数
          try_num = 0
          # 定义数字范围,并转成整型
          start, end = input("请输入猜测数字的范围(用,分隔):").split(',')
          start, end = int(start), int(end)
          # 随机答案
          answer = random.randrange(start, end+1)
          # 规定次数,并转为整数
          times = math.log2(start + end)
          times = math.floor(times)
          print('请在{}次内猜测正确数字'.format(times))
      
          # 判断语句,当猜测次数小于规定次数,则循环
          while try_num < times:
              guess_answer = input_guess(start, end)
              if guess_answer < answer:
                  print("你猜小了~")
                  history[name].append('失败')
              elif guess_answer == answer:
                  print("bingo,你猜对了~")
                  history[name].append('成功')
                  break
              else:
                  print("你猜大了~")
                  history[name].append('失败')
              try_num += 1
          else:
              print("你猜的次数太多啦,失败~")
              history[name].append('失败')
      
      def show_history():
          for name, score in history.items():
              print('用户名:',name + ',历史成绩', score)
      
      def start():
          guess_name = input("请输入你的名字:")
          # 检查用户名是否存在,不存在则创建
          if guess_name not in history.keys():
              history[guess_name] = []
          try_to_guess(guess_name)
      
      if __name__ == '__main__':
          select_dict = {'1': show_history, '2': start, '3': exit}
          while True:
              guess_select = input('1. 历史记录\n2. 开始游戏\n3. 退出游戏\n请输入数字选择:')
              select_dict.get(guess_select)()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
    • 运行结果
      在这里插入图片描述
  • 相关阅读:
    设计模式【5】——观察者模式
    云原生之Docker
    Oracle Schema Only账户
    Cadence Allegro 过孔通孔盲孔埋孔详细说明及设计举例图文教程
    mac怎么把两张图片拼在一起
    解决创建maven工程时,产生“找不到插件的错误”
    以前积的C币过期不能C币被兑换成优惠券优惠券过期扣了我333个币,不爽了。
    一文教你如何发挥好 TDengine Grafana 插件作用
    扫雷游戏分析实现(完整代码)
    win下载安装不同java版本教程
  • 原文地址:https://blog.csdn.net/Cherish1ove/article/details/126254215