【问题标题】:Why can't a variable be overwritten under a function? [duplicate]为什么不能在函数下覆盖变量? [复制]
【发布时间】:2022-01-26 06:53:44
【问题描述】:
a = int(input("How many pizza would you like to order? "))                   #line 1

def count_ordered_pizza():
    if a==0:
        print("Okay see u next time!")
    elif a==1:
        print(str(a)+ " pizza ordered.")
    elif a>1:
        print(str(a)+ " pizzas ordered.")
    else:
        print("Sorry that's impossible")

def reorder():
    user_said= str(input('Do you wish to order again? State Y/N. '))
    while user_said != "N":
        a = int(input("How many pizza would you like to order? "))          #line 16
        count_ordered_pizza()
        reorder()
    print('Bye!')

如果我执行此操作,reorder() 函数(第 16 行)中的 a 不会替换 count_ordered_pizza() 函数(第 1 行)中的 a。这是为什么呢?

我认为它可以替换它们,因为变量已被覆盖,但如果我这样做:

def reorder():
    user_said= str(input('Do you wish to order again? State Y/N. '))
    while user_said != "N":
        a = int(input("How many pizza would you like to order? "))          #line 16
        if a==0: 
            print("Okay see u next time!")
        elif a==1:
            print(str(a)+ " pizza ordered.")
        elif a>1:
            print(str(a)+ " pizzas ordered.")
        else:
            print("Sorry that's impossible")

        reorder()
    print('Bye!')

它显示了正确的值。有人可以帮我吗?提前谢谢!

【问题讨论】:

  • "如果我执行此操作,reorder() 函数(第 16 行)中的 a 不会替换 count_ordered_pizza() 函数(第 1 行)中的 a。这是为什么呢? "当然不是,它们是两个不同的变量。一个是全局变量,另一个是reorder中的局部变量
  • 可以reorder中改变全局a,但你不应该。在函数之间共享数据的更好方法是将输入作为参数提供返回值。另一种选择是使用一个类来封装状态

标签: python function variables while-loop


【解决方案1】:

如果你在函数global explanation中使用global a表达式,你可以改变全局变量的值

a = int(input("How many pizza would you like to order? "))                   #line 1

def count_ordered_pizza():
    if a==0:
        print("Okay see u next time!")
    elif a==1:
        print(str(a)+ " pizza ordered.")
    elif a>1:
        print(str(a)+ " pizzas ordered.")
    else:
        print("Sorry that's impossible")

def reorder():
    user_said= str(input('Do you wish to order again? State Y/N. '))
    while user_said != "N":
        global a
        a = int(input("How many pizza would you like to order? "))          #line 16
        count_ordered_pizza()
        reorder()
    print('Bye!')

【讨论】:

  • 但你真的不应该
猜你喜欢
  • 2017-07-11
  • 2020-11-06
  • 1970-01-01
  • 2016-02-08
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
相关资源
最近更新 更多