Python测验难度函数

时间:2016-02-16 16:03:55

标签: python while-loop

我是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

有人可以给我指点如何把它变成一个函数吗? 谢谢!!

2 个答案:

答案 0 :(得分:0)

{ "ok" : 0, "errmsg" : "unable to login { ok: 0.0, code: 18, errmsg: \"Authentication failed.\" }" } 变量返回空括号,因为函数中的level local 变量;与您在函数外声明的level完全不同,它在函数的范围之外。此外部变量隐藏在本地level变量后面,因此函数中的所有分配都是对本地level进行的,并且根本不影响外部的level

您必须明确声明levellevel变量(通常被视为不良做法),或者从函数返回本地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

Abstraction

这是计算机科学和通用编程中非常重要的主题。您必须了解更多才能理解抽象的重要性。

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既是过程又是函数。