首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我的python程序给我的错误是if/else语句中的变量未定义?

为什么我的python程序给我的错误是if/else语句中的变量未定义?
EN

Stack Overflow用户
提问于 2018-07-25 05:11:02
回答 5查看 115关注 0票数 1

我正在尝试用Python 3编写一段代码,将温度和距离从一个单位转换到另一个单位。我被告知我需要使用函数,用户将输入F (华氏度)、C(摄氏度)或K (开尔文),温度将从他们选择的任何温度转换为F、C或K。因此,我为每个场景编写了一个函数。一个函数,如果它是从F转换而来的,另一个是如果它是从C转换而来的,另一个是如果它是从K转换而来的。我还对英寸、英尺、码和英里做了这个操作。

所以在我写完所有的函数后,我写了一个if、elif和else语句,我想根据用户输入的内容来调用每个函数。因此,如果用户输入"F“,我希望它调用convert_from_F()函数,或者如果他们放入"K”,我希望它使用convert_from_K(),或者如果用户输入“英寸”,我希望它使用convert_from_inch()函数。我认为这样做的方法应该是使用if、elif和else语句。然而,无论我输入什么,我总是得到错误消息:

NameError:未定义名称'F‘

如果它发现用户没有输入特定的指令,我会认为迭代会在每条语句之后继续。如果我(作为用户)输入‘F’,它也不起作用。我不确定如何修复这段代码。我遗漏了什么?

此外,我正在使用在线Python3编译器来编写我的程序:OnlineGDB

代码语言:javascript
复制
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的新手,所以我完全有可能不能像更有经验的人那样建立联系。我在这里收到的答案确实对我有帮助。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-07-25 05:13:01

您的if构造错误。它必须是if user_input == 'F' or user_input == 'f':

或者,您可以将其简短地写为

代码语言:javascript
复制
if user_input in ['F', 'f']:

或在注释中指定为

代码语言:javascript
复制
if user_input.lower() == 'f':
票数 2
EN

Stack Overflow用户

发布于 2018-07-25 05:12:52

您需要引用该值并修复测试,因此

代码语言:javascript
复制
   if user_input == F or f:

成为

代码语言:javascript
复制
   if user_input == "F" or user_input == "f":

其他行也是如此

票数 0
EN

Stack Overflow用户

发布于 2018-07-25 05:15:27

你必须在或的两边都有条件。所以:

代码语言:javascript
复制
def user_conversion():
   if user_input == 'F' or user_input == 'f':
       convert_from_F()
...

或者你可以直接使用

代码语言:javascript
复制
def user_conversion():
   if user_input.lower() == 'f':
       convert_from_F()
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51507592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档