试图使一个函数使用SUVAT方程来计算每个变量,而这些函数没有返回应该已经计算出的值。
def float_input(text: str) -> float:
while True:
try:
num = float(input(text))
except ValueError:
num = ''
break
else:
return num
print ('Enter the values of the following variables if they have been given')
s = float_input('Displacement')
u = float_input('Initial Velocity')
v = float_input('Final Velocity')
a = float_input('Acceleration')
t = float_input('Time')
def find_s (s, u, v, a, t):
if s == '':
if '' not in (v, u, a):
es = 's = (v^2-u^2)/(2a)'
s = ((v**2)-(u**2))/(2*a)
elif '' not in (u, t, a):
es = 's = ut + 1/2at^2'
s = (u*t) + (0.5*a*t**2)
elif '' not in (v, a, t):
es = 's = vt - 1/2at^2'
s = (v*t)-(0.5*a*t**2)
elif '' not in (v, u, t):
es = 's = t(v+u)/2'
s = (0.5*(v+u))*t
return (s, es)
else:
es = ''
return (s, es)
s, es = find_s (s, u, v, a, t)
print (s)
我已经输入了u,v和a的值,这应该表示已计算出s,但是根据计算结果,它会打印'None'而不是s的值,为什么以及如何解决呢? / p>
答案 0 :(得分:3)
请注意以下行为:
>>> def float_input(text: str) -> float:
while True:
try:
num = float(input(text))
except ValueError:
num = ''
break
else:
return num
>>> float_input('Foo: ')
Foo: NotAFloat
>>>
如您所见,即使我没有输入浮点数,float_input
函数也会返回。这是因为当您遇到ValueError
时,您会从while循环中中断,因此您实际上不会重新执行循环主体。
由于您中断了循环,因此在没有任何内容的循环之后,代码将继续执行,因此不会返回任何内容(None
。
您可能打算这样写:
>>> def float_input(text: str) -> float:
while True:
try:
return float(input(text))
except ValueError:
pass
>>> float_input('Foo: ')
Foo: NotAFloat
Foo: MaybeAFloat?
Foo: 123foo
Foo: 123
123.0
一旦您解决了这一问题,代码的下一个问题当然就是您实际上从未调用过find_s
,因此无需进行任何计算。相反,您只需打印“位移”输入的值。