我正在尝试用Python 3编写一个将温度和距离从一个单位转换为另一个单位的代码。有人告诉我,我需要使用函数,并且用户将输入F(华氏温度),C(摄氏温度)或K(开氏温度),并且温度将从他们选择的任何值转换为F,C或K。我为每种情况编写了一个函数。用于从F转换的函数,从C转换的函数,以及从K转换的函数。我也针对英寸,英尺,码和英里进行了此操作。
因此,在我写完所有函数之后,我写了一条if,elif和else语句,我想根据用户的类型来调用每个函数。因此,如果用户输入“ F”,我希望它调用convert_from_F()函数,或者如果他们输入“ K”,我希望它使用convert_from_K(),或者如果用户键入“ inch”,我希望它使用convert_from_inch()函数。我认为实现此目的的方法是使用if,elif和else语句。但是,无论我键入什么内容,总是会收到错误消息:
NameError:名称'F'未定义
我会认为,如果发现用户未输入该特定指令,则迭代将继续经过每个语句。如果我(作为用户)输入“ F”,它也将不起作用。我不确定如何解决此代码。我从中错过了什么?
此外,我正在使用在线python 3编译器来编写程序:OnlineGDB
def convert_from_F():
F = float(input("Please input the temperature in F: "))
print("Temperature in F is", F)
print("Temperature in C is", (F-32)*5/9)
print("Temperature in K is", (F-32)*5/9 + 273.15)
def convert_from_C():
C = float(input("Please input the temperature in C: "))
print("Temperature in F is", (C*9/5) + 32)
print("Temperature in C is", C)
print("Temperature in K is", C+273.15)
def convert_from_K():
K = float(input("Please input the temperature in K: "))
print("Temperature in F is", (K-273.15)*9/5 + 32)
print("Temperature in C is", K-273.15)
print("Temperature in K is", K)
def convert_from_inch():
inch = float(input("Please input the distance in inches: "))
print("Distance in inches is:", inch)
print("Distance in feet is:", inch/12)
print("Distance in yards is:", inch/36)
print("Distance in miles is:", inch/63360)
def convert_from_ft():
ft = float(input("Please input the distance in feet: "))
print("Distance in inches is:", ft*12)
print("Distance in feet is:", ft)
print("Distance in yards is:", ft/3)
print("Distance in miles is:", ft/5280)
def convert_from_yd():
yd = float(input("Please input the distance in yards: "))
print("Distance in inches is:", yd*36)
print("Distance in feet is:", yd*3)
print("Distance in yards is:", yd)
print("Distance in miles is:", yd*1760)
def convert_from_mi():
mi = float(input("Please input the distance in miles: "))
print("Distance in inches is:", mi*63360)
print("Distance in feet is:", mi*5280)
print("Distance in yards is:", mi*1760)
print("Distance in miles is:", mi)
print("To convert distance input inch, ft, yd, or mi. To convert \
temperatures please input F, C, or K. ")
user_input = input("Your input: ")
def user_conversion():
if user_input == F or f:
convert_from_F()
elif user_input == C or c:
convert_from_C()
elif user_input == K or k:
convert_from_K()
elif user_input == inch:
convert_from_inch()
elif user_input == ft:
convert_from_ft
elif user_input == yd:
convert_from_yd()
elif user_input == mi:
convert_from_mi()
else:
print("Invalid input.")
print(user_conversion())
编辑:我看到这被标记为可能重复。重复的问题对我没有帮助,我不是在试图将其设置为集合,而是在试图弄清楚如何使if语句运行。针对我的问题给出的解决方案与针对其他问题的解决方案不同。但是,我是Python的新手,所以我完全有可能无法建立更有经验的人可以建立的联系。我在这里收到的答案确实帮助了我。
答案 0 :(得分:2)
您的if
构造错误。它必须是if user_input == 'F' or user_input == 'f':
或者,您也可以将其写为
if user_input in ['F', 'f']:
或在注释中指定为
if user_input.lower() == 'f':
答案 1 :(得分:1)
它正在读取F
等作为变量名。要解决此问题:
"F"
等。or
用于多个比较,不能用于您的使用方式。考虑改用user_input.casefold() == "f"
。答案 2 :(得分:0)
您需要引用该值并修复测试,所以
if user_input == F or f:
成为
if user_input == "F" or user_input == "f":
与其他行相同
答案 3 :(得分:0)
您必须在or的两边都有条件。所以:
def user_conversion():
if user_input == 'F' or user_input == 'f':
convert_from_F()
...
或者您可以只使用
def user_conversion():
if user_input.lower() == 'f':
convert_from_F()
...
答案 4 :(得分:0)
您要确保要与字符串进行比较。因此,您的if语句如下所示:
if user_input == "F" or user_input == "f":
convert_from_F(user_input)
但是,这有点冗长。相反,请尝试:
if user_input.lower() == "f":
convert_from_F(user_input)
此版本将user_input
的值转换为其小写变体,如果已经是小写,则不理会它。您也可以通过保存user_input.upper() == "F"
来执行类似的操作。
答案 5 :(得分:0)
可能是更短和更简单的版本
if user_input in ["F","f"]:
其他条件也是如此。
原因是您收到该错误,因为if语句的含义适用于布尔布尔值True或False的用户。
让我们假设'or'的左侧(LHS)和右侧的(RHS)条件为布尔值。
因此,按照您的语法,
LHS是user_input == "F"
,返回True或False。
但是或的RHS是"f"
。这就是问题出现的地方。 RHS在符号上不正确。