使用python进行调查/如何允许用户脱离调查

时间:2018-10-12 12:32:04

标签: python function break survey

我无法从“重复项”中获得所需的答案

我制作了一个while循环,向用户询问几个问题,因为我希望调查再次结束,直到用户中断调查的输入为止。我做了一个函数,每个问题问完后,这个函数就会一直伴随着答案。 如果答案是“ break”(或“ hade”),则while循环应停止运行

def check_answer(element):
if str(element) == "break":
    return exit()

此功能有效,因为退出所有功能,所以它不会让程序发布程序的统计信息。我发现我不允许这样做

return break

所以我不知道该怎么办。供参考,这里是完整的代码。其中一些是挪威语,但相关的部分是函数,while循环和打印语句(不会使用quit()打印的语句)

我还尝试使用True / False语句解决此问题,但未成功:

def sjekk_svar(element):
if str(element) == "hade":
    global to_continue
    to_continue = False
    return to_continue

如前所述,这是行不通的。这是完整的代码:

def sjekk_svar(element):
if str(element) == "hade":
    return quit()

while to_continue == True:

    # Sex
    kjonn = input("Er du mann eller kvinne? ")
    *sjekk_svar(kjonn)             # Calling the function
    while kjonn != "mann" and kjonn != "kvinne":
        kjonn = input("Er du mann eller kvinne? ")
        sjekk_svar(kjonn)             # Calling the function
        if kjonn != "mann" and kjonn != "kvinne":
            print("Feil input. Vennligst oppgi kjønn som mann eller kvinne")

    # Age
    alder = input("Hva er alderen din? ")
    sjekk_svar(alder)             # Calling the function
    if (int(alder) > intervall_high or int(alder) < intervall_low):
        print("Du er ikke innenfor aldersgruppen til denne undersøkelsen. Vennligst gi PC-en til noen andre.")

    # Q1, 2 ,3

   fag = input("Tar du noen universitetsfag? [ja/nei] ")
    sjekk_svar(fag)             # Calling the function
    if fag == "ja" and int(alder) < 22:
        itgk_medlem = input("Tar du faget ITGK? ")
        sjekk_svar(itgk_medlem)             # Calling the function
    elif fag == "ja" and int(alder) >= 22:
        itgk_medlem = input("Tar virkelig du ITGK? ")
        sjekk_svar(itgk_medlem)             # Calling the function
    timer_lekser = input("Hvor mange timer om dagen bruker du i snitt på lekser? ")
    sjekk_svar(timer_lekser)             # Calling the function

    # Start over again
    print("Velkommen til ny spørreundersøkelse!")

    # Assigning values of amount of surveys completed
    ant_fag +=1
    ant_timer += int(timer_lekser)
    if kjonn == "mann":
        menn += 1
    if kjonn == "kvinne":
        kvinner += 1
    if itgk_medlem == "ja":
        ant_itgk += 1


# Printing the statistics
print("Resultatet av spørreundersøkelsen er som følger:")
print("Antall kvinner:", str(kvinner))
print("Antall menn:", str(menn))
print("Antall personer som tar et fag:", str(fag))
print("Antall personer som tar ITGK:", str(ant_itgk))
print("Antall timer i snitt brukt på lekser:", str(ant_timer/(kvinner+menn)))

2 个答案:

答案 0 :(得分:0)

只需返回一个布尔值来表示是否应该中断:

def should_i_break(value):
    if value:
        return True
    return False

for i in range(10):
    print(i)
    if should_i_break(i == 6):
        break

或更简单地

def should_i_break(value):
    return value == 6

for i in range(10):
    print(i)
    if should_i_break(i):
        break

给出:

0
1
2
3
4
5
6

我认为函数是接受输入,执行任务并可能返回值的“黑匣子”。由于无法输入您是否处于for循环中,因此该函数无法知道它是否处于for循环中,因此无法中断。因此,与该函数说我们应该中断的for循环作用域通信的唯一方法是返回一个值(此处为布尔值),其他代码可以在需要时解释并中断该值。


而且,正如Martijn所指出的那样,如果“中断功能”确实像一个if语句那样简单,那么将代码分解成该功能就没有必要而且过于复杂。相反,您应该只在for循环中使用该if语句。但是,我想您知道这是您的问题,这是关于如何从一个函数内部进行中断(如果该函数较长且具有更多功能)。

答案 1 :(得分:-1)

函数无法返回语句。相反,您可以让函数返回布尔值,并在代码中使用if语句:

def check_answer(element):
    return str(element) == "break"

# multiple times in your code
if check_answer(value):
    break