鱼C论坛

 找回密码
 立即注册
查看: 1586|回复: 1

为什么global oldprice没有生效?

[复制链接]
发表于 2021-2-20 00:13:17 | 显示全部楼层 |阅读模式

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

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

x
学到函数时,里面有一部分是将局部变量和全局变量的。在书中有提到:

如果想要在函数中对全局变量进行修改,可以通过global关键字来达到目的。书中还举了一个例子:
>>> count = 5
>>> def myFun():
        global count
        count = 10
        print(count)

        
>>> myFun()
10
>>> count
10

这个倒也不难,所以我打算弄个例子试一下。于是我写了如下一段代码:
oldprice = float(input('请输入原价:'))
def zhekou(price,rate):
    global oldprice
    oldprice = 50
    finalprice = price * rate
    return finalprice

rate = float(input('请输入折扣:'))
newprice = zhekou(oldprice,rate)

print('最终的价格是:%.2f' % newprice)

按照我的设想,程序执行的步骤如下:

1、通过input获取了一个oldprice(假如等于80);

2、通过input获取了一个rate(假如等于0.5);

3、newprice调用了,zhekou这个函数,把80赋值给了price这个参数,把0.5赋值给了rate这个参数;

4、在函数的内部,又将oldprice改成了50;

5、函数将50复制给price;

6、函数return出finalprice这个结果,并将其赋值给newprice;

7、print命令将其打印。

按照以上步骤理解,最终输出的结果应该为50 *0.5 = 25. 然而结果却是40. 但我单独print(oldprice)却得出了50这么一个结果。那么按照结果推测,应该是第5步并未执行。可我想知道为什么?

按照从上到下的顺序,不就是应该先执行oldprice = 50,然后才执行finalprice = price * rate 的吗?

第二个问题,如果我就想通过在函数内部修改全局变量来实现最终的newprice是25,代码要怎么修改呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-20 01:25:25 | 显示全部楼层
第五行 改成  finalprice = oldprice * rate

price这个参数没用可以删了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 11:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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