将函数调用放入main函数后totalOfItems变量报未定义错误是什么原因?
问题原因
核心是Python变量作用域规则导致的问题:
- 函数内部定义的变量默认是局部变量,仅在当前函数内部可访问,其他作用域无法直接读取
- 你注释掉
main()相关代码时,原本写在main内部的逻辑如果直接在全局作用域运行,totalOfItems会成为全局变量,amountTax、totalBill两个函数可以直接访问,因此运行正常 - 把逻辑移入
main函数后,totalOfItems变为main的局部变量,其他函数无法直接读取,就会抛出未定义的报错 - 额外需要注意:你当前的
amountTax、totalBill函数本身写法不符合规范,函数应该基于传入的参数计算,而不是直接读取外部作用域的变量,可维护性非常差
修复方案
修改两个问题函数,使用已经传入的参数完成计算即可:
import math def shoppingTotal(numItem): totalOfItems = 0 for x in range(numItem): totalOfItems += int(input('商品价格是多少:')) print(totalOfItems) return totalOfItems # 直接用传入的total参数计算,不依赖外部变量 def amountTax(total): totalTax = (total * 1.13) - total print(totalTax) return totalTax # 直接用传入的amount、tax参数计算,不依赖外部变量 def totalBill(amount, tax): finalBill = amount + tax print(finalBill) return finalBill def greeting(): print('1. 芒果 $5') print('2. 肉类 $3') print('3. 果汁 $7') print('4. 香蕉 $2') def main(): greeting() numItem = int(input('你购买了多少件商品:')) totalOfItems = shoppingTotal(numItem) totalTax = amountTax(totalOfItems) totalBill(amount=totalOfItems,tax=totalTax) if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者Arshan Abdi
相关产品推荐
相关产品推荐

