python - python中的调查/如何让用户跳出调查

标签 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)))

最佳答案

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

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 循环范围通信的唯一方法是返回一个值(此处为 bool 值),其他代码可以解释该值并在必要时中断。


而且,正如 Martijn 指出的那样,如果“中断函数”真的像一个 if 语句一样简单,那么将代码分解为该函数就没有必要而且过于复杂。相反,您应该只在 for 循环中使用该 if 语句。但是,我认为您知道这一点,您的问题是关于如何从函数内部中断(如果函数更长并且包含更多内容)。

关于python - python中的调查/如何让用户跳出调查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52779628/

相关文章:

python - 套接字 "import"不工作 "from"可以!这是怎么回事?

Python-Lex-Yacc 符号无法访问

javascript - 我写的这个函数有什么问题吗?

PHP 为什么我的函数返回具有不同键的数组结果的两倍?

c - 如何在没有 Goto 语句的情况下返回程序的开头

java - 开关声明(价格以 5 美分为增量)

python - 如何在Python中对排列的每一行求和

python - 从数组中删除子数组

python - Numpy - 在 Python 中创建一个输入为两个矩阵、输出为二进制矩阵的函数

java - Break 语句会导致执行速度变慢?