闲云野 发表于 2025-7-20 10:26:40

times = times + 1 是什么意思呀?运行后显示“NameError“说”times”未被定义

# p2_1.py
"""---第一个小游戏---"""
temp = input("不妨猜猜我心中想的哪个数字:")
guess = int(temp)

while guess != 30:
    if guess > 30:
      print("太大了太大了")
    else:
      print("小了小了,胆子放大点")

    temp = input("勉强给你个机会,请再试试吧:")
    guess = int(temp)
    times = times + 1

if (times <= 3) and (guess == 30):
    print("猜对啦")
    print("哈哈哈!真是太不可思议了!您抽中一杯圣诞杯!!!")
else:
    print("啊,给3次机会都猜错,送你一坨便便,不玩啦!!!")

------------------------------------IDLE画面-------------------------------------------------------------------------
不妨猜猜我心中想的哪个数字:15
小了小了,胆子放大点
勉强给你个机会,请再试试吧:30
Traceback (most recent call last):
File "C:\Users\szz00054\Desktop\第二个游戏.py", line 14, in <module>
    times = times + 1
NameError: name 'times' is not defined

FishC 发表于 2025-7-20 10:27:16

您的代码中出现了 `times = times + 1` 导致报错,这是因为:

原因分析:
1. 在第一次执行 `times = times + 1` 时,右侧的 `times` 需要从内存中读取值
2. 但此时 `times` 从未被赋值过(未初始化),程序不知道它的值是多少
3. 因此 Python 抛出 NameError: name 'times' is not defined

解决方案:
在循环开始前给 `times` 设置初始值(比如从0开始计数):

# 在 while 循环之前添加初始化
times = 0# 初始化计数器

while guess != 30:
    # ...原有代码...
    times = times + 1# 此时times已有初始值,不会报错


修改后的完整代码:

times = 0# 初始化计数器
temp = input("不妨猜猜我心中想的哪个数字:")
guess = int(temp)

while guess != 30:
    if guess > 30:
      print("太大了太大了")
    else:
      print("小了小了,胆子放大点")
   
    temp = input("勉强给你个机会,请再试试吧:")
    guess = int(temp)
    times = times + 1# 每次循环增加计数

print(f"恭喜猜对!你用了{times}次尝试")


关键点:
- Python 要求变量必须 先赋值后使用
- 计数器变量通常从0开始初始化
- 可以用 times += 1 简写代替 times = times + 1

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

闲云野 发表于 2025-7-20 10:39:32

FishC 发表于 2025-7-20 10:27
您的代码中出现了 `times = times + 1` 导致报错,这是因为:

原因分析:


给times赋值后可以了,但是运行后发现,还是一直循环下去,并没有在3次猜完后就结束呢


-------------------IDLE画面------------------------------------
不妨猜猜我心中想的哪个数字:20
小了小了,胆子放大点
勉强给你个机会,请再试试吧:24
小了小了,胆子放大点
勉强给你个机会,请再试试吧:26
小了小了,胆子放大点
勉强给你个机会,请再试试吧:27
小了小了,胆子放大点
勉强给你个机会,请再试试吧:28
小了小了,胆子放大点
勉强给你个机会,请再试试吧:

FishC 发表于 2025-7-20 10:40:55

闲云野 发表于 2025-07-20 10:39
FishC 发表于 2025-7-20 10:27
您的代码中出现了 `ti ...

您的代码中只设置了循环条件 `guess != 30`,但并未添加尝试次数限制。要实现"3次猜完结束"的功能,需要增加次数判断逻辑:

"""---第一个小游戏---"""
times = 0# 初始化计数器
temp = input("不妨猜猜我心中想的哪个数字:")
guess = int(temp)

while guess != 30:
    times += 1# 每次循环计数+1
   
    # 添加次数限制判断
    if times >= 3:
      print("机会用完啦!正确答案是30")
      break# 跳出循环
   
    if guess > 30:
      print("太大了太大了")
    else:
      print("小了小了,胆子放大点")
   
    temp = input("勉强给你个机会,请再试试吧:")
    guess = int(temp)

if guess == 30:
    print(f"恭喜猜对!你用了{times}次尝试")

关键修改说明:
1. 添加了 times >= 3 判断条件
2. 使用 break 跳出循环
3. 循环结束后判断是否猜中

执行流程:
1. 用户有3次尝试机会(第一次输入 + 两次"再试试")
2. 第3次错误后自动揭示答案并结束
3. 提前猜中会显示使用次数

(注:第1次输入不算在循环计数内,所以实际是"1次初始输入+2次循环机会"共3次尝试)

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2025-7-20 12:59:25

times 在本代码中没有复制就调用(times+1),当然会报错。try this:"""---第一个小游戏---"""
times = 0
temp = input("不妨猜猜我心中想的哪个数字:")
guess = int(temp)
while guess != 30:
    times = times +1
    if times >= 3:
      print("机会用完啦!正确答案是30")
      break
   
    if guess > 30:
      print("太大了太大了")
    else:
      print("小了小了,胆子放大点")
   
    temp = input("勉强给你个机会,请再试试吧:")
    guess = int(temp)

if guess == 30:
    print(f"恭喜猜对!你用了{times}次尝试")

666999666999 发表于 2025-7-20 15:38:01

第一个:没有出现三次猜玩就结束是因为你没有把这段代码写进while循环if (times <= 3) and (guess == 30):
    print("猜对啦")
    print("哈哈哈!真是太不可思议了!您抽中一杯圣诞杯!!!")
else:
    print("啊,给3次机会都猜错,送你一坨便便,不玩啦!!!")
第二:即使写进while循环也不会在三次未猜对结束,因为当猜错三次之后就永远不会执行上面那段代码,就会导致进入死循环。
想要执行上面的那段代码就需要在三次内(包括三次)猜中30,但这又会导致一个问题,导致else语句下面的那段代码永远不会执行。
建议使用二楼用户@sfqxx回答的代码思路。
(本人只是个新"fish"若有讲解错误还请谅解{:10_254:})

闲云野 发表于 2025-7-21 15:32:01

sfqxx 发表于 2025-7-20 12:59
times 在本代码中没有复制就调用(times+1),当然会报错。try this:

谢谢回复~~

学数学的混子 发表于 2025-7-22 08:16:19

你往后看就知道了
页: [1]
查看完整版本: times = times + 1 是什么意思呀?运行后显示“NameError“说”times”未被定义