2013-05-08 12 views
0

我试图做一个简单的理想气体计算器,但出于某种原因,我似乎无法得到我的任何if语句来返回任何值。当我运行我的程序时,我的if语句永远不会返回任何东西

def Ideal(): 
    p = input("Pressure:") 
    v = input("Volume:") 
    n = input("Moles:") 
    t = input("Temperature in K:") 
    r = 8.31 

    if p is None: 
     y =(n*r*t)/v 
     return y 
    elif v is None: 
     return(n*r*t)/p 
    elif n is None: 
     return (p*v)/(r*t) 
    elif n is None: 
     return (p*v)/(n*r) 

我从上面的代码去这个

def input_float(prompt): 
result = input(prompt) 
if result: 
    return float(result) 
else: 
    return None 

def Ideal(): 
p = input_float("Pressure:") 
v = input_float("Volume:") 
n = input_float("Moles:") 
t = input_float("Temperature in K:") 
r = 8.31 

if p is None: 
    y =(n*r*t)/v 
    print(y) 
elif v is None: 
    u = (n*r*t)/p 
    print(u) 
elif n is None: 
    i = (p*v)/(r*t) 
    print(i) 
elif t is None: 
    o = (p*v)/(n*r) 
    print(o) 
else: 
    print("This should never happen") 

理想()

,现在,它的伟大工程。但我猜测有一个更简单的方法可以解决这个问题,因为我在这里学习我很想在这里听取意见。

+0

Python是选择缩进,你可能想看看。 – paxdiablo 2013-05-08 05:14:41

+0

'if'语句不是函数,所以它们不是为了“返回”任何东西;我相信你的意思是你的if语句永远不会评价为“真”。 (原因可以在icktoofay的回答中解释。) – 2013-05-08 05:17:55

+0

它通常是一种很好的做法,即使if语句中的一个条件应该始终存在,避免在末尾放置一个else语句的情况下避免使用if语句。是真实的。你在'else'块中做什么可能取决于你的代码的细节(引发异常有时是合适的)。至少,做一些像'print(“这不应该发生”),这样你就可以看到是否有意想不到的事情发生(就目前情况而言)。 – Blckknght 2013-05-08 05:19:51

回答

1

input给你一个字符串。如果用户不提供任何输入,则不会得到空字符串None —。你可能想使一个新的功能,把用户的输入,但返回None,如果他们进入什么否则解析它:

def input_float(prompt): 
    result = input(prompt) 
    if result: 
     return float(result) 
    else: 
     return None 

然后你就可以用input_float在你的程序更换input秒。

+0

...或者'返回浮点数(结果)如果结果else无'。 – EOL 2013-05-08 05:29:59

+0

如果您只是在输入提示后按“enter”键,我会得到一个异常而不是输入。你能澄清吗? – Irwin 2013-05-08 05:53:30

+1

@Irwin:我怀疑你在使用Python 2;这个问题和我的答案与Python 3有关。Python 3的'input'是Python 2的'raw_input'; Python 2的'raw_input'是Python 3的'eval(input(...))'。 – icktoofay 2013-05-08 06:13:05

相关问题