2013-05-08 21 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

相關問題