gao1122 发表于 2026-8-30 16:59:39

猜数字游戏

猜数字游戏,随机产生一个1~100的整数,玩家从键盘输入一个数字,如果与随机产生的数字相同则胜利。
程序要求.
    1.猜错后要提示玩家,猜的数字比实际数字大或小,并提示输入数字以及最新的范围。(例如:随机数是10,玩家猜的是20,则提示比20小,
      请输入1~20之间的数字;然后又输入5,则提示比5大,请输入5~20之间的数字,如果用户再次输入1提示比1大但是范围还应该保持 5~20 )
    2.猜对后提示,正确,并输出共猜了多少次。


import random


num = random.randint(1, 100)

count = 1
big_num = []
small_num = []

while True:
    guess_num = int(input('请输入你猜想的数字(1-100):'))

    if guess_num == num:
      print(f'正确答案是:{num},恭喜你猜对了,你真棒!本次共猜了{count}次')
      break
    elif guess_num > num:
      if small_num and big_num and guess_num >= min(big_num):
            print(f'提示:比{guess_num}小,但是范围还应该保持 {max(small_num)} ~ {min(big_num)} 之间的数字')
      elif big_num and guess_num >= min(big_num):
            print(f'提示:比{guess_num}小,但是范围还应该保持 1 ~ {min(big_num)} 之间的数字')
      elif small_num:
            print(f'提示:数字比{guess_num}小,请输入 {max(small_num)} ~ {guess_num} 之间的数字')
      else:
            print(f'提示:数字比{guess_num}小,请输入 1 ~ {guess_num} 之间的数字')

      big_num.append(guess_num)

    elif guess_num < num:
      if small_num and big_num and guess_num <= max(small_num):
            print(f'提示:比{guess_num}大,但是范围还应该保持 {max(small_num)} ~ {min(big_num)} 之间的数字')
      elif small_num and guess_num <= max(small_num):
            print(f'提示:比{guess_num}大,但是范围还应该保持 {max(small_num)} ~ 100 之间的数字')
      elif big_num:
            print(f'提示:数字比{guess_num}大,请输入 {guess_num} ~ {min(big_num)} 之间的数字')
      else:
            print(f'提示:数字比{guess_num}大,请输入 {guess_num} ~ 100 之间的数字')

      small_num.append(guess_num)

    count += 1

FishC 发表于 2026-8-30 17:00:54

你的代码主要有两个问题需要修正:
[*]big_num 和 small_num 没有初始化成空列表,所以后面无法使用 append 方法。应该加上:big_num = [] 和 small_num = []。
[*]猜错后没有让 count 增加,否则猜多少次都只显示 1 次。应该在每次猜错后执行 count += 1。
另外,猜小分支的代码不完整。下面给你一个更简洁、完整的写法,逻辑也更清晰:

import random

num = random.randint(1, 100)

count = 1
big_num = []   # 记录所有猜大的数字
small_num = [] # 记录所有猜小的数字

while True:
    guess_num = int(input('请输入你猜想的数字(1-100):'))

    if guess_num == num:
      print(f'正确答案是:{num},恭喜你猜对了,你真棒!本次共猜了{count}次')
      break

    # 根据记录计算当前范围
    low = max(small_num) if small_num else 1
    high = min(big_num) if big_num else 100

    if guess_num > num:
      # 猜大了
      if guess_num >= high:
            print(f'提示:比{guess_num}小,但是范围还应该保持 {low} ~ {high} 之间的数字')
      else:
            print(f'提示:比{guess_num}小,请输入 {low} ~ {guess_num} 之间的数字')
      big_num.append(guess_num)
    else:
      # 猜小了
      if guess_num <= low:
            print(f'提示:比{guess_num}大,但是范围还应该保持 {low} ~ {high} 之间的数字')
      else:
            print(f'提示:比{guess_num}大,请输入 {guess_num} ~ {high} 之间的数字')
      small_num.append(guess_num)

    count += 1


核心思路:
small_num 里存所有“猜小”的数,用 max(small_num) 作为下界;
big_num 里存所有“猜大”的数,用 min(b

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 猜数字游戏