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 工具的不同格式?