我是Python的新手,我真的很难为我的测验创建一个函数:我创建了一个while循环,在测验播放器收到任何问题之前提供不同级别。 while循环独立工作,但是当我尝试将其转换为函数时,级别变量停止工作(仅返回代码之外的空括号)。
这是while循环:
request_count = 0
level = ()
global_string_list = ()
while request_count < 1:
print user_level_options
level_request = raw_input("> ")
if level_request == "1":
level = string_1
global_string_list = string_1_list
if level_request == "2":
level = string_2
global_string_list = string_2_list
if level_request == "3":
level = string_3
global_string_list = string_3_list
if level_request == False:
print "Please try again."
request_count = request_count + 1
有人可以给我指点如何把它变成一个函数吗? 谢谢!!
答案 0 :(得分:0)
{
"ok" : 0,
"errmsg" : "unable to login { ok: 0.0, code: 18, errmsg: \"Authentication failed.\" }"
}
变量返回空括号,因为函数中的level
是 local 变量;与您在函数外声明的level
完全不同,它在函数的范围之外。此外部变量隐藏在本地level
变量后面,因此函数中的所有分配都是对本地level
进行的,并且根本不影响外部的level
。
您必须明确声明level
为level
变量(通常被视为不良做法),或者从函数返回本地global
。因此,在函数中执行所需的所有更改,然后使用如下所示的return语句:
level
答案 1 :(得分:0)
我试着给你一个快速启动。但我不会给你最终解决方案。
一般来说,为了使函数有意义,你必须知道为什么需要它。
我给你一些使用函数的好处的例子。
识别模式,并提取到单独的函数中。在您的示例中,可以在循环内的条件附近看到重复行为。 (在raw_input
函数之后)。
即:if level_request == <something> then do <some-work>
。
因此,一个改进可能是:
def updateLevel(level_request):
# Think about how you can determine the level without if-else
level = <?level?>
global_string_list = <?global_level|level?>
这样你只需要打电话:
while request_count < 1:
print user_level_options
level_request = raw_input("> ")
updateLevel(level_request)
if level_request == False:
print "Please try again."
request_count = request_count + 1
这是计算机科学和通用编程中非常重要的主题。您必须了解更多才能理解抽象的重要性。
E.g。
def askLevel():
print(user_level_options)
return raw_input("> ")
def displayError():
print("Please try again")
def incrementRequestCounter():
request_count += 1
这样你只需要打电话:
while request_count < 1:
level_request = askLevel()
updateLevel(level_request)
if level_request == False:
displayError()
incrementRequestCounter()
注意:在严格的函数式编程中,函数是(输入) - &gt;(输出)的映射。并且该函数不会修改任何全局状态(不变性)。并且所有函数都必须返回一个值。但在实践中,我们通常使用一个程序。 (程序是一系列指令)。而python中的
def
既是过程又是函数。