gpt4 book ai didi

python - 当用户输入 'q' 或 'quit' 时,如何让我的小型 python 程序退出?

转载 作者:行者123 更新时间:2023-11-28 19:58:31 24 4
gpt4 key购买 nike

我尝试使用 sys.stdout.flush() 刷新标准输出,但它仍然无法正常工作。它工作正常,直到用户只输入 C 或 F 来破坏代码。后缀是第一个调用的函数所以我确保如果用户只输入一个字符,则会返回错误。但是一旦返回错误,用户就不能再键入“quit”或“q”。

#!/usr/local/bin/python
#Converts between Celsius and Fahrenheit
import random, sys

def check_version():
"""
Make sure user is using Python 3k
"""
if(sys.version_info[0] != 3):
print("Stop peddling with your feet Fred!")
print("Only Py3k supported")
sys.exit()
else:
pass

def random_insult():
"""
Returns a list of random insults with the sole purpose of insulting the user
"""
insults = ["Kel", "stimpy", "knucklehead"]
return insults[random.randrange(3)]

def suffix(temp):
"""
Accepts the input temperature value which should be a string suffixed by C(c) or F(f)
Returns the last element of the input string(C or F)
"""
if(len(temp) >= 2):
return temp[len(temp)-1]
else:
temperature("Input String TOO Small")

def temp_value(temp):
"""
Accepts the input temperature value which should be a string suffixed by C(c) or F(f)
Returns the actual temperature value
"""
if(len(temp) >= 2):
return temp[0:len(temp)-1]
else:
temperature("Input String TOO Small")

def cel_to_far(temp):
"""
Accepts the input temperature value as Celsius and returns it in Fahrenheit
"""
try:
return ((temp * (9/5.0)) + 32)
except TypeError:
return "Has to be a number"

def far_to_cel(temp):
"""
Accepts the input temperature value as Fahrenheit and returns it in Celsius
"""
try:
return ((temp - 32) * (5/9.0))
except TypeError:
return "Has to be a number"

def temperature(error=None):
"""
Loops until the user enters quit or q. Allows the user to enter the temperature suffixed by either C(c) or F(f).
If suffixed with C then the temperature is taken as Celsius and converted to Fahrenheit.
If suffixed with F then the temperature is taken as Fahrenheit and converted to Celsius.
If the user enters anything else be sure to belittle him/her.
"""
prompt1 = "Enter value suffixed by C or F *\n"
prompt2 = "Type 'quit' or 'q' to quit *\n"
error1 = "What in the world are you doing "+ random_insult() + "?\n"
error2 = "Did you forget to add C or F to the end of the value?\n"
example = "Here's an example of input: 30F\n"
stars = ("*" * 32) + "\n"
temp = None
if(error != None):
print(error)
print(example)
temperature()
else:
while(True):
sys.stdout.flush()
try:
temp = input("\n"+ stars + prompt1 + prompt2 + stars + ">>")
if( (temp == 'quit') or (temp == 'q')):
return

elif( (suffix(temp) == 'C') or (suffix(temp) == 'c') ):
print("Celsius:", temp_value(temp))
print("Fahrenheit: {0:.1f}".format(cel_to_far(float(temp_value(temp)))))

elif( (suffix(temp) == 'F') or (suffix(temp) == 'f') ):
print("Fahrenheit:", temp_value(temp))
print("Celsius: {0:.1f}".format(far_to_cel(float(temp_value(temp)))))

else:
print(error1 + error2 + example)

except:
print("Something went wrong and I don't care to fix it.\n")
return

if(__name__ == '__main__'):
check_version()
temperature()

最佳答案

问题是 temperature当发生错误时在不同的地方被递归调用,并且要退出程序用户必须输入 q/quittemperature 一样多被调用了。

要解决此问题,我建议删除所有递归调用并以不同的方式处理错误。例如,temp可能会检查以确保它是来自用户的正确输入,如果不是这样,则打印错误消息和 continue无限循环直到 break当输入为 q 时被调用或 quit .

关于python - 当用户输入 'q' 或 'quit' 时,如何让我的小型 python 程序退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8706458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com