鱼C论坛

 找回密码
 立即注册
查看: 57|回复: 5

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

[复制链接]
发表于 昨天 10:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 10:27 | 显示全部楼层
您的代码中出现了 `times = times + 1` 导致报错,这是因为:

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

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

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

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


修改后的完整代码:

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

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

  13. print(f"恭喜猜对!你用了{times}次尝试")
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 10:39 | 显示全部楼层
FishC 发表于 2025-7-20 10:27
您的代码中出现了 `times = times + 1` 导致报错,这是因为:

原因分析:

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


-------------------IDLE画面------------------------------------
不妨猜猜我心中想的哪个数字:20
小了小了,胆子放大点
勉强给你个机会,请再试试吧:24
小了小了,胆子放大点
勉强给你个机会,请再试试吧:26
小了小了,胆子放大点
勉强给你个机会,请再试试吧:27
小了小了,胆子放大点
勉强给你个机会,请再试试吧:28
小了小了,胆子放大点
勉强给你个机会,请再试试吧:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 10:40 | 显示全部楼层
闲云野 发表于 2025-07-20 10:39
FishC 发表于 2025-7-20 10:27
您的代码中出现了 `ti ...


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

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

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

  20. if guess == 30:
  21.     print(f"恭喜猜对!你用了{times}次尝试")
复制代码


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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 12:59 | 显示全部楼层
times 在本代码中没有复制就调用(times+1),当然会报错。try this:
  1. """---第一个小游戏---"""
  2. times = 0  
  3. temp = input("不妨猜猜我心中想的哪个数字:")
  4. guess = int(temp)
  5. while guess != 30:
  6.     times = times +1  
  7.     if times >= 3:
  8.         print("机会用完啦!正确答案是30")
  9.         break  
  10.    
  11.     if guess > 30:
  12.         print("太大了太大了")
  13.     else:
  14.         print("小了小了,胆子放大点")
  15.    
  16.     temp = input("勉强给你个机会,请再试试吧:")
  17.     guess = int(temp)

  18. if guess == 30:
  19.     print(f"恭喜猜对!你用了{times}次尝试")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 15:38 | 显示全部楼层
第一个:没有出现三次猜玩就结束是因为你没有把这段代码写进while循环
  1. if (times <= 3) and (guess == 30):
  2.     print("猜对啦")
  3.     print("哈哈哈!真是太不可思议了!您抽中一杯圣诞杯!!!")
  4. else:
  5.     print("啊,给3次机会都猜错,送你一坨便便,不玩啦!!!")
复制代码

第二:即使写进while循环也不会在三次未猜对结束,因为当猜错三次之后就永远不会执行上面那段代码,就会导致进入死循环。
想要执行上面的那段代码就需要在三次内(包括三次)猜中30,但这又会导致一个问题,导致else语句下面的那段代码永远不会执行。
建议使用二楼用户@sfqxx回答的代码思路。
(本人只是个新"fish"若有讲解错误还请谅解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-21 02:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表