gpt4 book ai didi

Python:变量不通过函数累积传递

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:18 25 4
gpt4 key购买 nike

我正在为我正在制作的文本冒险编写一个函数,当玩家获得经验时,该函数将充当进度条(然后在玩家达到 100 级时将其升级)。由于某种原因,即使我返回了所有三个变量,更改函数内部变量的值也不会更改函数外部的值。当我尝试调用该函数两次,每次将 85 添加到变量 a 时,这一点变得很明显。

在函数内,目标是将a的值传递给b,检查b是否大于或等于100,如果是,则将1添加到c并从b中删除100 ,然后将a重置为0打印结果,并返回新值。

a = 新经验 b = 当前经验 c = 玩家等级

a = 0
b = 0
c = 1

def func_1(a, b, c):
b = b + a
loop1 = 0
while loop1 < 1:
if b >= 100:
print(" ")
print("Add 1!")
print(" ")
c = c + 1
b = b - 100
else:
loop1 = loop1 + 1
a = a - a
print("c is " + str(c))
print("b is " + str(b))
print("a is " + str(a))
return a
return b
return c

a = a + 85
func_1(a, b, c)
a = a + 85
func_1(a, b, c)
print a, b, c

我对编程真的很陌生,所以我对任何低效率表示歉意。感谢您的帮助,如果有什么不明白/不清楚的地方请告诉我。

最佳答案

我在这里看到的一些东西:

首先,在代码末尾的三个 return 语句中,只有第一个 return a ,被执行。一个return语句立即停止函数的执行; return breturn c从未被触及。

其次,您对变量的范围感到困惑。 a , b ,和c在函数外部定义的是全局变量,而 a , b ,和c传递到函数中的参数对于函数的作用域来说是本地的。因此,对函数中变量的任何修改都不会影响全局变量。

你可以做两件事。首先,在函数的开头有一个全局声明:

def func_1():
global a
global b
global c
# Function body

这向函数表明 a , b ,和c是存在于函数外部的全局变量。因此,不再需要传递参数;该函数将搜索函数外部的变量。然而,这是不好的编程习惯。更好的选择是 func_1返回修改后的值并将全局值重新分配给这些新值,如下所示:

def func_1(a, b, c):
# Function body
return (a, b, c)

然后,调用函数并修改函数外部的变量:

a, b, c = func_1(a, b, c)

一些建议:

你有很多递增操作,Python 有专门的语法:b = b + a可以缩短为 b += a , c = c + 1c += 1 , b = b - 100b -= 100 。另外,只需使用 a = 0 将 a 重置为 0而不是减去a - a 。另外,你不需要print(" ") ; print()就足够了。

接下来是您的while循环是不必要的。你的函数只需要检查一次是否 b >= 100 ,所以不需要设置循环。增量b然后使用简单的 if必要时升级的声明:

def func_1(a, b, c):
b += a
if b >= 100:
print("\nAdd 1!\n")
c += 1
b -= 100
a = 0
# Rest of the function

关于Python:变量不通过函数累积传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21323294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com