python中的调查/如何让用户退出调查[重复]

Posted

技术标签:

【中文标题】python中的调查/如何让用户退出调查[重复]【英文标题】:Survey in python / how to allow the user to break out of the survey [duplicate] 【发布时间】:2018-10-12 12:32:04 【问题描述】:

我无法从“重复”中得到我需要的答案

我创建了一个 while 循环来询问用户几个问题,因为我希望调查再次运行,直到用户输入以中断调查。我做了一个函数,在每一个问题之后,这个函数都会带着答案运行。 如果答案是“break”(或“hade”),while 循环应该停止运行

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

这个功能有效,把它不让程序输出程序的统计信息,因为一起退出。我发现我不被允许

return break

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

我也尝试使用真/假语句来解决这个问题,但我没有成功:

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

【问题讨论】:

【参考方案1】:

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

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 语句。但是,我认为您知道这一点,您的问题是关于如何从函数内部中断(如果函数更长并且有更多内容)。

【讨论】:

那为什么不直接使用if i == 6: break呢?不要将return True / return False 用于已经布尔值的东西。 所以,是的,虽然这是一个超级简单的函数示例并解决了 您不能在函数中使用 break 问题,但这也是一种不好的做法,至少应该被解决以避免整个if boolean: return True / else: return False 反模式。 @MartijnPieters 我的意思是演示逻辑!当然,代码永远不会这么简单,但should_i_break 函数在实际情况下会包含更多内容。 此时您将使用:should_i_break(i)return i == 6(在解释中使用 if i == 6: return True / return False 版本作为中介,如果使用的话)。 @MartijnPieters 我同意你的观点,会更新。【参考方案2】:

函数不能返回语句。相反,您可以让您的函数返回一个布尔值并在您的代码中使用 if 语句:

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

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

【讨论】:

以上是关于python中的调查/如何让用户退出调查[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py 机器人:如何让我的不和谐机器人向我发送对用户在 DM 中使用的命令的响应,例如进行调查?

如何将调查熊猫数据框转换为可用于 Python 中的 BI 工具的不同格式?

过早退出 Qualtrics 中的循环和合并块

问卷调查

调查 000 从 bash 脚本中的 cURL 返回错误代码的原因 [重复]

Beta冲刺--用户使用调查报告