2013-01-05 94 views
0
""" 
This program presents a menu to the user and based upon the selection made 
invokes already existing programs respectively. 
""" 
import sys 

def get_numbers(): 
    """get the upper limit of numbers the user wishes to input""" 
    limit = int(raw_input('Enter the upper limit: ')) 
    numbers = [] 

    # obtain the numbers from user and add them to list 
    counter = 1 
    while counter <= limit: 
    numbers.append(int(raw_input('Enter number %d: ' % (counter)))) 
    counter += 1 

    return numbers 

def main(): 
    continue_loop = True 
    while continue_loop: 
    # display a menu for the user to choose 
    print('1.Sum of numbers') 
    print('2.Get average of numbers') 
    print('X-quit') 

    choice = raw_input('Choose between the following options:') 

    # if choice made is to quit the application then do the same 
    if choice == 'x' or 'X': 
     continue_loop = False 
     sys.exit(0) 

    """elif choice == '1': 
     # invoke module to perform 'sum' and display it 
     numbers = get_numbers() 
     continue_loop = False 
     print 'Ready to perform sum!' 

     elif choice == '2': 
     # invoke module to perform 'average' and display it 
     numbers = get_numbers() 
     continue_loop = False 
     print 'Ready to perform average!'""" 

    else: 
     continue_loop = False  
     print 'Invalid choice!' 

if __name__ == '__main__': 
    main() 

只有當我輸入'x'或'X'作爲輸入時,我的程序纔會處理。對於其他投入,該計劃剛剛退出。我已經評論了elif部分,並且只運行了if和else子句。現在引發語法錯誤。我究竟做錯了什麼?python if - elif-else的用法和說明

+0

你的語法錯誤,從'其他地方發過來:'行正太一個空格縮進。 –

回答

3

這是關於線if choice == 'x' or 'X'

正確,應該是

if choice == 'x' or choice == 'X'

或簡單

if choice in ('X', 'x')

因爲或運營商期望雙方布爾表達式。

目前的解決辦法的解釋如下:

if (choice == 'x') or ('X')

,你可以清楚地看到,'X'不返回一個布爾值。

另一個解決方案是當然的,以檢查是否如果大寫字母等於「X」或小寫字母等於「X」,這可能看起來像:

if choice.lower() == 'x': 
    ... 
+1

''X''可以在if語句中使用 - 但由於它是一個非空字符串,它將計算爲'True'並導致語句'if choice =='x'或'X''始終爲TRUE;。 – DanielB

+0

好的觀察,當然你是對的,但我只是簡化它,告訴他在這種情況下評估一個非空字符串是沒有意義的。 – George

+0

永遠不會知道或期望雙方布爾值。感謝您更清楚地解釋它以及pythonic。 – kunaguvarun

0
if choice == 'x' or 'X': 

沒有做你認爲它正在做的事情。什麼實際得到的解析如下:

if (choice == 'x') or ('X'): 

你可能想以下幾點:

if choice == 'x' or choice == 'X': 

可以寫成

if choice in ('x', 'X'): 
+3

可以寫成('x','X') – Ant

+1

好點。這是更多Pythonic。 :) – johankj

+1

或在這種情況下,更簡單的'如果choice.lower()=='x':' – bgporter

0

至於解釋說,這是一個IndentationError。第31行的if語句縮進4個空格,而相應的else語句縮進5個空格。

+0

謝謝,因爲我複製代碼並粘貼問問題時,我不得不打算他們,我錯了我會添加一個額外的空間 – kunaguvarun

2

你的問題是在你if choice == 'x' or 'X': part.To修復它改成這樣:

if choice.lower() == 'x':