简体   繁体   中英

Python quiz difficulty function

I'm new to Python and am really struggling to create a function for my quiz: I have created a while loop to offer different levels to the quiz player before they receive any questions. The while loop works on its own, but when i try to turn it into a function, the level variable stops working (returning only empty brackets outside of the code).

This is the while loop:

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

Could anybody please give me pointers on how to turn this into a function please? Thank you!!

The level variable returns empty brackets because the level within the function is a local variable; completely different from the level you declared outside the function, which is outside the function's scope. This outside variable was hidden behind the local level variable, so all your assignments within the function were made to the local level and did not affect the level on the outside at all.

You have to either declare level as a global variable explicitly (generally considered bad practice) or you return your local level from the function. So perform all the changes you want in your function and then use the return statement like this:

def user_select():  # your function
    #......your code goes here
    return level

level = user_select() # the level variable within your function is now in this variable

I try to give you a jump start. But I won't give you the final solution.

In general, to make a function meaningful, you have to know why you need it.

I give you some example of the benefit using function.

Removal of repetitive code. (DRY, don't repeat yourself)

Identify a Pattern, and extract into a separate function. In your example, the repeating behavior can be seen near the condition inside the loop. (right after the raw_input function).

That is: if level_request == <something> then do <some-work> .

Thus, one improvement could be:

def updateLevel(level_request):
    # Think about how you can determine the level without if-else
    level = <?level?>
    global_string_list  = <?global_level|level?>

such that you only need to call:

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

This is a very important topic in Computer Science and General Programming. You have to understand more to be able to appreciate the importance of abstraction.

Eg

def askLevel():
    print(user_level_options)
    return raw_input("> ")

def displayError():
    print("Please try again")

def incrementRequestCounter():
    request_count += 1

such that you just need to call:

while request_count < 1:
    level_request = askLevel()
    updateLevel(level_request)
    if level_request == False:
        displayError()
    incrementRequestCounter()

Note: in strict functional programming, function is a mapping of (input)->(output). And the function does not modify any global state (immutability). And all function must return a value. But in practice, we normally use a procedure instead. (procedure is a sequence of instruction). And def in python is both procedure and function.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM