我正在做一个学校项目。我做了一个程序的测试版本,因为我是Python的新手,并且我只有C#的经验,所以我仍然在学习基础知识。我的问题如下: 在函数“ Fill_Array()”之前,我声明了一个变量(“ max_element_var”),该变量应该存储可以在数组中存储的最大元素数(“ content_array”)。稍后在函数中,我将其值更改为控制台的输入,这发生了,并且该函数按预期运行,唯一的问题是,在函数外部,“ max_element_var”的值保持为“ None”。我该怎么做才能解决此问题?
#__Test__#
def Test():
class Que:
def __init__(self, content, max_element ,actual_elements):
self.content = content
self.max_element = max_element
self.actual_elements = actual_elements
max_element_var = None
content_array = []
def Fill_array():
print("What should be the max number of elements that can be stored in the array? (Type in an integer!)")
max_element_var = int(input())
if(max_element_var>0):
import random
random_var = random.randrange(0,max_element_var)
for x in range(max_element_var-random_var):
content_array.append(x)
else:
print("It has to be more than 0!")
Fill_array()
Fill_array()
actual_elements_var = len(content_array)
que = Que (content_array, max_element_var, actual_elements_var)
print("Content: ", que.content)
print("Max number of elements: ", que.max_element)
print("Actual number of elements: ", que.actual_elements)
#__Test__#
#__Full__#
def Full():
pass
#__Full__#
#__Version_selector__#
def Version_selector():
print("Which version should be used? (Type in the number!)")
print("1 - Test")
print("2 - Full")
answer = int(input())
if(answer == 1):
Test()
Version_selector()
elif(answer == 2):
Full()
Version_selector()
#__Version_selector__#
Version_selector()
答案 0 :(得分:0)
在python中,在单独使用它们的函数范围内,变量会自动创建为局部变量。 为了解决您的问题,您可以 (1)返回变量,将其从一个函数传递给另一个函数。 (2)将其声明为全局,以便所有功能都可以访问它。
答案 1 :(得分:0)
请考虑以下代码。在下面的代码中,您可能会更改x
的值,但实际上,函数内部和外部的x
之间存在很大差异。函数内部的x是 local 变量,函数结束后将“消失”。如果要保存x的值,则必须使用return x
并将结果保存到变量中。例如,请参见函数a_saving_example(x)
您也可以使用global
变量,尽管有人说它是bad practice,最好在函数中使用return
。
def times_two(x):
x = x * 2
x = 5
print(x)
times_two(x)
print(x)
输出:
5
5
保存示例:
def a_saving_example(x):
x = x * 2
return x
x = 5
print(x)
x = a_saving_example(x)
print(x)
输出:
5
10
答案 2 :(得分:0)
修改后的代码可纠正一些问题。
代码重构
import random
class Que:
def __init__(self, content, max_element ,actual_elements):
self.content = content
self.max_element = max_element
self.actual_elements = actual_elements
def Fill_array():
" Returns requested size and array "
while True:
prompt = """"What should be the max number of elements that can be stored in the array? Type in an integer!: """
max_element_var = int(input(prompt))
if max_element_var > 0:
random_var = random.randrange(0,max_element_var)
return max_element_var, [x for x in range(max_element_var-random_var)]
else:
print("It has to be more than 0!")
def Test():
max_element_var, content_array = Fill_array()
actual_elements_var = len(content_array)
que = Que (content_array, max_element_var, actual_elements_var)
print("Content: ", que.content)
print("Max number of elements: ", que.max_element)
print("Actual number of elements: ", que.actual_elements)
#__Test__#
#__Full__#
def Full():
pass
#__Full__#
#__Version_selector__#
def Version_selector():
while True:
prompt = """Which version should be used? (Type in the number!)
1 - Test
2 - Full
3 - Quit\n\t"""
answer = int(input(prompt))
if answer == 1:
Test()
elif answer == 2:
Full()
else:
break
#__Version_selector__#
Version_selector()