hi我最近开始使用python中的类,有一段代码我必须使用class来转换温标。例如,你选择两个刻度,并在第一个刻度中给出温度,第二个刻度中的温度将显示在输出中。一种方法是使用if条件,例如,我可以从用户那里获得输入,在检查条件后调用所需的方法:
class temp_convertor:
def c_f(c):
f = 1.8*(c)+32
return f
def f_c(f):
c = (f-32)*(5/9)
return c
def c_k(c):
k = c +273.15
return k
def k_c(k):
c = k-273.15
return c
def c_r(c):
r = temp_convertor.c_f(c)+ 459.67
return r
def r_c(r):
c = temp_convertor.f_c(r-459.67 )
return c
def k_r(k):
r = temp_convertor.c_r(temp_convertor.k_c(k))
return r
def r_k(r):
k = temp_convertor.c_k(temp_convertor.r_c(r))
return k
a = input("scale1,scale2: ")
if a == "f,c":
temp_convertor.f_c(float(input("temp? ")))
elif a == "c,f":
temp_convertor.c_f(float(input("temp? ")))
# and for every convertor I should continue checking conditions :(
但我以前用过global(([name]来调用函数,例如:
def apple(a):
print(2*a)
globals()[input("type apple if you want to double your number: ")](int(input("number: ")))
输出是这样的:
type apple if you want to double your number: apple
number: 5
10
但我不能在这里使用:
class temp_convertor:
def c_f(c):
f = 1.8*(c)+32
return f
def f_c(f):
c = (f-32)*(5/9)
return c
def c_k(c):
k = c +273.15
return k
def k_c(k):
c = k-273.15
return c
def c_r(c):
r = temp_convertor.c_f(c)+ 459.67
return r
def r_c(r):
c = temp_convertor.f_c(r-459.67 )
return c
def k_r(k):
r = temp_convertor.c_r(temp_convertor.k_c(k))
return r
def r_k(r):
k = temp_convertor.c_k(temp_convertor.r_c(r))
return k
print(temp_convertor.globals()[input("scale1_scale2")](float(input("temp? "))))
错误为:AttributeError:类型对象"temp_convertor"没有属性"globals"我想知道第二个解决方案是否有可能,如果没有,还有更短的解决方案吗?感谢您阅读本文!
使用
getattr(temp_convertor, input('scale1_scale2: '))(float(input('temp? ')))