跳过了Elif语句



我写了一个温度转换程序。除了开尔文到摄氏度、开尔文到华氏度以及反之亦然之外,一切都很好。我尝试了很多不同的代码,看看它是否会被修复,但都是徒劳的。请告知。下面是整个代码。您将在第二个名为ToTemp((的函数中找到问题所在;如果您输入一个较低的上限温度缩写或较高的上限(即34F或34F(,前两个语句都能很好地工作。但其他任何事情都无法发挥作用。

'''
Python program to convert temperature from Celsius,
Fahrenheit or Kelvin. These next lines of code (loc) introduce
the program and ask user for temperature to be converted.
'''
import sys # to exit when user makes error.
print ("n****Welcome to your own advanced temperature conversion application!****n")
print ("^^^What would you like to convert?^^^")
print ("Type 'C' for Celsius, 'F' for Fahrenheit and 'K' for Kelvin 
after entering digits. (Ex: '34C')n")
user_temp1 = input('--> ')
# function to determine which temperature user wishes to convert from.
def FromTemp(user_temp):
if user_temp1[-1] == 'C' or user_temp1[-1] == 'c':
print ("You wish to convert from Celsius.")
elif user_temp1[-1] == 'F' or user_temp1[-1] == 'f':
print ("You wish to convert from Fahrenheit.")
elif user_temp1[-1] == 'K' or user_temp1[-1] == 'k':
print ("Ah! Yes, the elusive Kelvin!")
else:
print ("You must think me mad; I only allow C, F and K.")
sys.exit() # exits when user makes mistake.
FromTemp(user_temp1)
# asks user for desired conversion rate.
print ("n^^^What would you like to convert to? (Enter 'C', 'F' or 'K')^^^n")
destin_temp = input("--> ")
# stripping the numbers from the temperature symbol.
real_temp = user_temp1[:- 1]
raw_temp = int(real_temp)
# function to make conversion from and to appropriate thermal unit.
def ToTemp(raw_temp):
if destin_temp == 'C' or destin_temp == 'c' and user_temp1[-1] == 'F' or user_temp1[-1] == 'f':
f_to_c = round(float((raw_temp - 32) * 5/9), 2)
print (real_temp, "degrees Fahrenheit is", f_to_c, "degrees Celsius.n")
print ("****Thank you for stopping by!****n") #good
elif destin_temp == 'F' or destin_temp == 'f' and user_temp1[-1] == 'C' or user_temp1[-1] == 'c':
c_to_f = round(float(raw_temp * (9/5) + 32), 2)
print (real_temp, "degrees Celsius is", c_to_f, "degrees Fahrenheit.")
print ("****Thank you for stopping by!****n") #good
elif destin_temp == 'C' or destin_temp == 'c' and user_temp1[-1] == 'K' or user_temp1[-1] == 'k':
k_to_c = round(float(raw_temp - 273.15), 2)
print (real_temp, "degrees Kelvin is", k_to_c, "degrees Celsius.")
print ("****Thank you for stopping by!****n") # doesn't work
elif destin_temp == 'K' or destin_temp == 'k' and user_temp1[-1] == 'C' or user_temp1[-1] == 'c':
c_to_k = round(float(raw_temp + 273.15), 2)
print (real_temp, "degrees Celsius is", c_to_k, "degrees Kelvin.")
print ("****Thank you for stopping by!****n") # doesn't work
elif destin_temp == 'F' or destin_temp == 'f' and user_temp1[-1] == 'K' or user_temp1[-1] == 'k':
k_to_f = round(float((raw_temp - 273.15) * (9/5) + 32), 2)
print (real_temp, "degrees Kelvin is", k_to_f, "degrees Fahrenheit.")
print ("****Thank you for stopping by!****n") # doesn't work
elif destin_temp == 'K' or destin_temp == 'k' and user_temp1[-1] == 'F' or user_temp1[-1] == 'f':
f_to_k = round(float(raw_temp - 32 *(5/9) + 273.15), 2)
print (real_temp, "degrees Fahrenheit is", k_to_f, "degrees Kelvin.")
print ("****Thank you for stopping by!****n") # doesn't work
else:
print("You made a mistake somewhere. Try again later.")
sys.exit()
ToTemp(raw_temp)

我宁愿重写这个:

if destin_temp == 'C' or destin_temp == 'c' and user_temp1[-1] == 'F' or user_temp1[-1] == 'f':

如下:

destin_temp = destin_temp.lower()
user_temp = user_temp1[-1].lower()
if destin_temp == 'c' and user_temp == 'f':

将所有内容转换为小写(或大写(并处理简单得多的表达式。

将华氏温度转换为开尔文时会出现错误,因为在上一个elif中,您计算了f_to_k,但打印了k_to_f。您的错误来自代码的这一部分。此外,最好使用圆括号,以便有一个明确的条件。这是最后的代码。

'''
Python program to convert temperature from Celsius,
Fahrenheit or Kelvin. These next lines of code (loc) introduce
the program and ask user for temperature to be converted.
'''
import sys # to exit when user makes error.
print ("n****Welcome to your own advanced temperature conversion application!****n")
print ("^^^What would you like to convert?^^^")
print ("Type 'C' for Celsius, 'F' for Fahrenheit and 'K' for Kelvin 
after entering digits. (Ex: '34C')n")
user_temp1 = input('--> ')
# function to determine which temperature user wishes to convert from.
def FromTemp(user_temp):
if user_temp1[-1] == 'C' or user_temp1[-1] == 'c':
print ("You wish to convert from Celsius.")
elif user_temp1[-1] == 'F' or user_temp1[-1] == 'f':
print ("You wish to convert from Fahrenheit.")
elif user_temp1[-1] == 'K' or user_temp1[-1] == 'k':
print ("Ah! Yes, the elusive Kelvin!")
else:
print ("You must think me mad; I only allow C, F and K.")
sys.exit() # exits when user makes mistake.
FromTemp(user_temp1)
# asks user for desired conversion rate.
print ("n^^^What would you like to convert to? (Enter 'C', 'F' or 'K')^^^n")
destin_temp = input("--> ")
# stripping the numbers from the temperature symbol.
real_temp = user_temp1[:- 1]
raw_temp = int(real_temp)
# function to make conversion from and to appropriate thermal unit.
def ToTemp(raw_temp):
if (destin_temp == 'C' or destin_temp == 'c') and (user_temp1[-1] == 'F' or user_temp1[-1] == 'f'):
f_to_c = round(float((raw_temp - 32) * 5/9), 2)
print (real_temp, "degrees Fahrenheit is", f_to_c, "degrees Celsius.n")
print ("****Thank you for stopping by!****n") #good
elif (destin_temp == 'F' or destin_temp == 'f') and (user_temp1[-1] == 'C' or user_temp1[-1] == 'c'):
c_to_f = round(float(raw_temp * (9/5) + 32), 2)
print (real_temp, "degrees Celsius is", c_to_f, "degrees Fahrenheit.")
print ("****Thank you for stopping by!****n") #good
elif (destin_temp == 'C' or destin_temp == 'c') and (user_temp1[-1] == 'K' or user_temp1[-1] == 'k'):
k_to_c = round(float(raw_temp - 273.15), 2)
print (real_temp, "degrees Kelvin is", k_to_c, "degrees Celsius.")
print ("****Thank you for stopping by!****n") # doesn't work
elif (destin_temp == 'K' or destin_temp == 'k') and (user_temp1[-1] == 'C' or user_temp1[-1] == 'c'):
c_to_k = round(float(raw_temp + 273.15), 2)
print (real_temp, "degrees Celsius is", c_to_k, "degrees Kelvin.")
print ("****Thank you for stopping by!****n") # doesn't work
elif (destin_temp == 'F' or destin_temp == 'f') and (user_temp1[-1] == 'K' or user_temp1[-1] == 'k'):
k_to_f = round(float((raw_temp - 273.15) * (9/5) + 32), 2)
print (real_temp, "degrees Kelvin is", k_to_f, "degrees Fahrenheit.")
print ("****Thank you for stopping by!****n") # doesn't work
elif (destin_temp == 'K' or destin_temp == 'k') and (user_temp1[-1] == 'F' or user_temp1[-1] == 'f'):
f_to_k = round(float(raw_temp - 32 *(5/9) + 273.15), 2)
print (real_temp, "degrees Fahrenheit is", f_to_k, "degrees Kelvin.")
print ("****Thank you for stopping by!****n") # doesn't work
else:
print("You made a mistake somewhere. Try again later.")
sys.exit()
ToTemp(raw_temp)

更新:这里有一个组织得更好的代码。

'''
Python program to convert temperature from Celsius,
Fahrenheit or Kelvin. These next lines of code (loc) introduce
the program and ask user for temperature to be converted.
'''
import sys # to exit when user makes error.

# function to determine which temperature user wishes to convert from.
def FromTemp(user_temp):
if user_temp1[-1] == 'C' or user_temp1[-1] == 'c':
print ("You wish to convert from Celsius.")
elif user_temp1[-1] == 'F' or user_temp1[-1] == 'f':
print ("You wish to convert from Fahrenheit.")
elif user_temp1[-1] == 'K' or user_temp1[-1] == 'k':
print ("Ah! Yes, the elusive Kelvin!")
else:
print ("You must think me mad; I only allow C, F and K.")
sys.exit() # exits when user makes mistake.
# function to make conversion from and to appropriate thermal unit.
def ToTemp(raw_temp):
if destin_temp.lower() == 'c' and user_temp1[-1].lower() == 'f':
f_to_c = round(float((raw_temp - 32) * 5/9), 2)
print (real_temp, "degrees Fahrenheit is", f_to_c, "degrees Celsius.n")
print ("****Thank you for stopping by!****n") #good
elif destin_temp.lower() == 'f' and user_temp1[-1].lower() == 'c':
c_to_f = round(float(raw_temp * (9/5) + 32), 2)
print (real_temp, "degrees Celsius is", c_to_f, "degrees Fahrenheit.")
print ("****Thank you for stopping by!****n") #good
elif destin_temp.lower() == 'c' and user_temp1[-1].lower() == 'k':
k_to_c = round(float(raw_temp - 273.15), 2)
print (real_temp, "degrees Kelvin is", k_to_c, "degrees Celsius.")
print ("****Thank you for stopping by!****n") # doesn't work
elif destin_temp.lower() == 'k' and user_temp1[-1].lower() == 'c':
c_to_k = round(float(raw_temp + 273.15), 2)
print (real_temp, "degrees Celsius is", c_to_k, "degrees Kelvin.")
print ("****Thank you for stopping by!****n") # doesn't work
elif destin_temp.lower() == 'f' and user_temp1[-1].lower() == 'k':
k_to_f = round(float((raw_temp - 273.15) * (9/5) + 32), 2)
print (real_temp, "degrees Kelvin is", k_to_f, "degrees Fahrenheit.")
print ("****Thank you for stopping by!****n") # doesn't work
elif destin_temp.lower() == 'k' and user_temp1[-1].lower() == 'f':
f_to_k = round(float(raw_temp - 32 *(5/9) + 273.15), 2)
print (real_temp, "degrees Fahrenheit is", f_to_k, "degrees Kelvin.")
print ("****Thank you for stopping by!****n") # doesn't work
else:
print("You made a mistake somewhere. Try again later.")
sys.exit()

if __name__ == "__main__":
print ("n****Welcome to your own advanced temperature conversion application!****n")
print ("^^^What would you like to convert?^^^")
print ("Type 'C' for Celsius, 'F' for Fahrenheit and 'K' for Kelvin 
after entering digits. (Ex: '34C')n")
user_temp1 = input('--> ')
FromTemp(user_temp1)
# asks user for desired conversion rate.
print ("n^^^What would you like to convert to? (Enter 'C', 'F' or 'K')^^^n")
destin_temp = input("--> ")
# stripping the numbers from the temperature symbol.
real_temp = user_temp1[:- 1]
raw_temp = int(real_temp)
ToTemp(raw_temp)

Python并没有按照您认为的方式解释您的和/或语句。

你认为它好像(1或2(和(3或4(:

但蟒蛇并没有这么看。它正在读取1或(2和3(或4:

通过使用.upper((命令压缩代码来清除代码可以解决您的问题。

'''
Python program to convert temperature from Celsius,
Fahrenheit or Kelvin. These next lines of code (loc) introduce
the program and ask user for temperature to be converted.
'''
import sys # to exit when user makes error.
print ("n****Welcome to your own advanced temperature conversion application!****n")
print ("^^^What would you like to convert?^^^")
print ("Type 'C' for Celsius, 'F' for Fahrenheit and 'K' for Kelvin 
after entering digits. (Ex: '34C')n")
user_temp1 = input('--> ')
# function to determine which temperature user wishes to convert from.
def FromTemp(user_temp):
if user_temp1[-1].upper() == 'C':
print ("You wish to convert from Celsius.")
elif user_temp1[-1].upper() == 'F':
print ("You wish to convert from Fahrenheit.")
elif user_temp1[-1].upper() == 'K':
print ("Ah! Yes, the elusive Kelvin!")
else:
print ("You must think me mad; I only allow C, F and K.")
sys.exit() # exits when user makes mistake.
FromTemp(user_temp1)
# asks user for desired conversion rate.
print ("n^^^What would you like to convert to? (Enter 'C', 'F' or 'K')^^^n")
destin_temp = input("--> ")
# stripping the numbers from the temperature symbol.
real_temp = user_temp1[:- 1]
raw_temp = int(real_temp)
# function to make conversion from and to appropriate thermal unit.
def ToTemp(raw_temp):
if destin_temp.upper() == 'C' and user_temp1[-1].upper() == 'F':
f_to_c = round(float((raw_temp - 32) * 5/9), 2)
print (real_temp, "degrees Fahrenheit is", f_to_c, "degrees Celsius.n")
print ("****Thank you for stopping by!****n") #good
elif destin_temp.upper() == 'F' and user_temp1[-1].upper() == 'C':
c_to_f = round(float(raw_temp * (9/5) + 32), 2)
print (real_temp, "degrees Celsius is", c_to_f, "degrees Fahrenheit.")
print ("****Thank you for stopping by!****n") #good
elif destin_temp.upper() == 'C' and user_temp1[-1].upper() == 'K':
k_to_c = round(float(raw_temp - 273.15), 2)
print (real_temp, "degrees Kelvin is", k_to_c, "degrees Celsius.")
print ("****Thank you for stopping by!****n") # doesn't work
elif destin_temp.upper() == 'K' and user_temp1[-1].upper() == 'C':
c_to_k = round(float(raw_temp + 273.15), 2)
print (real_temp, "degrees Celsius is", c_to_k, "degrees Kelvin.")
print ("****Thank you for stopping by!****n") # doesn't work
elif destin_temp.upper() == 'F' and user_temp1[-1].upper() == 'K':
k_to_f = round(float((raw_temp - 273.15) * (9/5) + 32), 2)
print (real_temp, "degrees Kelvin is", k_to_f, "degrees Fahrenheit.")
print ("****Thank you for stopping by!****n") # doesn't work
elif destin_temp.upper() == 'K' and user_temp1[-1].upper() == 'F':
f_to_k = round(float(raw_temp - 32 *(5/9) + 273.15), 2)
print (real_temp, "degrees Fahrenheit is", f_to_k, "degrees Kelvin.")
print ("****Thank you for stopping by!****n") # doesn't work
else:
print("You made a mistake somewhere. Try again later.")
sys.exit()

最新更新