鱼C论坛

 找回密码
 立即注册
查看: 1538|回复: 3

[已解决]第019讲上课内容请教

[复制链接]
发表于 2017-12-14 17:22:07 | 显示全部楼层 |阅读模式

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

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

x
  1. def discounts(price, rate):
  2.     final_price = price * rate
  3.     print('這裡試圖打印全局變量old_price的值:',old_price)
  4.     old_price = 88 #这里试图修改全局变量
  5.     print('修改后old_price的值是:', old_price)
  6.     return final_price

  7. old_price = float(input('请输入原价:'))
  8. rate = float(input('请输入折扣率:'))
  9. new_price = discounts(old_price, rate)
  10. print('修改后old_price的值是:', old_price)
  11. print('打折后价格是:', new_price)
复制代码


在小鱼老师,上课的过程中,有提到print('这里试图打印全局变量old_price的值:',old_price)这程式如没有注记的话,程式会出错
Traceback (most recent call last):
  File "F:\C\影片\PYTHON\想變量為何會出錯.py", line 10, in <module>
    new_price = discounts(old_price, rate)
  File "F:\C\影片\PYTHON\想變量為何會出錯.py", line 3, in discounts
    print('這裡試圖打印全局變量old_price的值:',old_price)
UnboundLocalError: local variable 'old_price' referenced before assignment\

但我觉得局部变量目前应该是你输入的值,而不会有未赋值的错误产生。
最佳答案
2017-12-15 11:05:15
在函数中定义的局部变量如果和全局变量同名,则它会隐藏该全局变量。

也就是说在函数中只要有old_price = 88,就会把同名的全局变量屏蔽掉,无论在函数中的第几行。
所以你添加old_price = 88这行代码之后,整个函数中只存在一个局部变量old_price,你在给这个变量赋值之前就print 就会出现你的报错

如果你还是想要这么写,在函数开头部分添加 global old_price,声明函数中的这个变量是全局变量就可以了

  1. def discounts(price, rate):
  2.     global old_price
  3.     final_price = price * rate
  4.     print('這裡試圖打印全局變量old_price的值:',old_price)
  5.     old_price = 88 #这里试图修改全局变量
  6.     print('修改后old_price的值是:', old_price)
  7.     return final_price

  8. old_price = float(input('请输入原价:'))
  9. rate = float(input('请输入折扣率:'))
  10. new_price = discounts(old_price, rate)
  11. print('修改后old_price的值是:', old_price)
  12. print('打折后价格是:', new_price)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-14 17:27:47 | 显示全部楼层
你不对这个变量先进行赋值当然不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-15 09:41:54 | 显示全部楼层
我补充说明,我是认为在line3中会先调用old_price(全局变量),再屏敝掉,以赋值的old_price(局部变量)代之,如此,为什么程式会出错;因如果注记line4(old_price = 88 )后,程式是可以正常运行的,这是我想不懂的地方。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-15 11:05:15 | 显示全部楼层    本楼为最佳答案   
在函数中定义的局部变量如果和全局变量同名,则它会隐藏该全局变量。

也就是说在函数中只要有old_price = 88,就会把同名的全局变量屏蔽掉,无论在函数中的第几行。
所以你添加old_price = 88这行代码之后,整个函数中只存在一个局部变量old_price,你在给这个变量赋值之前就print 就会出现你的报错

如果你还是想要这么写,在函数开头部分添加 global old_price,声明函数中的这个变量是全局变量就可以了

  1. def discounts(price, rate):
  2.     global old_price
  3.     final_price = price * rate
  4.     print('這裡試圖打印全局變量old_price的值:',old_price)
  5.     old_price = 88 #这里试图修改全局变量
  6.     print('修改后old_price的值是:', old_price)
  7.     return final_price

  8. old_price = float(input('请输入原价:'))
  9. rate = float(input('请输入折扣率:'))
  10. new_price = discounts(old_price, rate)
  11. print('修改后old_price的值是:', old_price)
  12. print('打折后价格是:', new_price)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-4 20:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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