我试图将华氏温度转换为摄氏温度,反之亦然,但是我总是在运行后以else语句结束。瑞典语也很抱歉。
我不知道为什么它总是运行else语句。
代码:
def meny():
print (""" Programs menu:
1. Convert from Fahrenheit to Celsius
2. Convert from Celsius to Fahrenheit
3. Exit the program
""")
def val():
val = int(input("Enter your choice (1, 2 or 3):") )
return val
meny()
val()
if val == 1:
# Convert from Fahrenheit to Celsius
elif val == 2:
# Convert from Celsius to Fahrenheit
elif val == 3:
# Exit the program
else:
print("Invalid choice. Try again")
答案 0 :(得分:1)
这里的根本问题是名称val
用于不同的事物。
首先,您有一个名为val
的函数:
def val():
在函数之外,名称val
始终引用此函数对象。函数对象不等于任何整数,因此与任何整数的任何比较都将始终返回False
。
在函数内部,创建一个新的 local 名称val
:
val = int(input("Ange ditt val (1, 2 eller 3): ") )
此名称是该函数的 local ,并且在函数结束后将消失。我们说它有本地 scope 。实际上,每个赋值语句(每个使用=
赋值运算符的语句)将始终分配给 current 范围内的名称,而不是外部范围,除非使用nonlocal
或使用了global
个关键字。
您可以使用val
声明从功能val
中重新分配全局名称global val
,但是如果这样做,那么您不能再使用名称val
来引用该函数。同样,您可以从函数外部重新分配全局名称val
:
val = val()
但是同样,这只能一次完成,因为之后的val
将不再引用函数对象。 (而且,这会使程序难以阅读和理解。)
最好的办法是为这两种不同的东西使用两个不同的名称。
通常最好的做法是使用动词或动词短语来命名函数,例如:
def get_value():
然后您可以使用名词或名词短语作为返回值:
value = get_value()
if value == 1:
...
答案 1 :(得分:0)
您将相同的标识符用于不同的事物。尽管有时可以做到这一点,但可能会非常令人困惑。
此外,函数名称应描述该函数的功能。例如,代替
def val():
val = int(input("Ange ditt val (1, 2 eller 3): ") )
return val
你应该做
def get_value():
val = int(input("Ange ditt val (1, 2 eller 3): ") )
return val
(或者也许是get_choice()
或get_val()
)。
并且,当您调用函数时,应将其返回值放入某个变量中。就您而言,应该是
val = get_choice() # or how you named the function
这样,该函数的名称不会被覆盖,从而使该函数随后无法调用。