2017-05-26 10 views
0

私は食料品リストを作成する簡単なプログラムを作っています。今、私は空白の入力が私のリストに追加されている問題を抱えています:私は空白の有無にかかわらず入力を押すと、空白の入力を項目として追加します。これを防ぐ簡単な方法はありますか?シンプルなプログラムを作る、空白にする方法/空白の入力はカウントしない/追加する

フォールトトレランスとして、このような何か:

#Enter your item or command: 
#Shopping items cannot be blank. 
#Enter your item or command: 
#Shopping list items cannot be blank. 

現在のコード:それは空の文字列(スペースを削除して)ではない場合

List = [] 

def Menu(): 
    print('Here is a list of options:', '\n P : Print the List', 
      '\n C : Empty the List', '\n E : Exit', 
      '\n R : Print this command list') 
def add(item): 
    List.append(item) 
    print("{0} has been added to the list".format(item)) 

# Having trouble here: I need to make it check against empty spaces and 
# not add to the list 
def listInput(): 
    item = input('Enter an item or command: ') 
    print('You have {0} items on your list.'.format(len(List))) 
    return item 

def print(): 
    print('Your shopping list:') 
    for i in List: 
     print(" * {0}".format(i)) 

def clear(): 
    del List[:] 
    print('All items removed from list.') 
    print('You have 0 items on your list.') 

def start(): 
    print('Welcome to the your Shopping List Program') 

def end(): 
    print('Thank you for using your Shopping List Program.') 


def main(): 
    start() 
    Menu() 
    item = listInput() 
    while item != 'E': 
     if item == 'P': 
      Print() 

     elif item == 'R': 
      Menu() 

     elif item == 'C': 
      clear() 

     else: 
      add(item) 
     item = listInput() 
    end() 

main() 
+0

私はPythonに慣れていませんが、これをPython 2.7.10で実行しようとすると、構文エラーが発生します - あなたは 'print'という関数を宣言することができますか?それとも、OPのエラーですか? –

答えて

0

のみあなたがする必要がありますこれを行うには、項目を追加elseを削除してください:

elif item.strip() != '': 
    add(item) 
1

空でない入力を待つガードを入れてください。

def listInput(): 
    item = "" 
    while item.strip() == "": 
     item = input('Enter an item or command: ') 
    print('You have {0} items on your list.'.format(len(List))) 
    return item 
+0

'.strip()'の使用はまったく何ですか? – TheGirrafish

+0

'item.strip()'ではない方が良い – C8H10N4O2

+0

@ TheGirrafish:stripは行の空白を許します。 – Prune

0

は、1つのオプションである、あなたの文字列をトリミングするには、次のコードを使用します:

def listInput(): 
    item = input('Enter an item or command: ') 
    while not len(item): 
     item = input('Shopping items cannot be blank. Enter your item or command: ') 
    print('You have {0} items on your list.'.format(len(List))) 
    return item 
+0

空文字列が偽とみなされるため、 'len(item)'では 'len()'は不要です。もう少し頑強にするには、item.strip()ではなくwhileを追加することをお勧めします。とにかく余分な空白を削除したい場合、これはもっと良いかもしれません: 'item = input( 'item or command:'を入力してください)' 'while not item:' –

1

ここで他の回答がの良い仕事をここで簡単なバージョンがありますより直接的にあなたの質問に答えることができますが、私はちょっとした書き直しを勧めます。ここで

は、あなたの現在のmain()の定義である:ここでは

def main(): 
    start() 
    Menu() 
    item = listInput() 
    while item != 'E': 
     if item == 'P': 
      Print() 

     elif item == 'R': 
      Menu() 

     elif item == 'C': 
      clear() 

     else: 
      add(item) 
     item = listInput() 
    end() 

は、私はあなたがそれを書き換える推薦する方法です:

def main(): 
    start() 
    Menu() 

    item = None 
    while item != 'E': 

     print('You have {0} items on your list.'.format(len(List))) 
     item = listInput() 

     if item == 'P': 
      Print() 

     elif item == 'R': 
      Menu() 

     elif item == 'C': 
      clear() 

     elif item == 'E': 
      end() 

     elif item is not None: 
      add(item) 

     else: # item is None -- this last else and print are optional 
      print('Shopping items cannot be blank.') 

それはそれは(コメントを追加するんものになど、かなり自明でなければなりません明確にする必要がある場合)、コードを読むときに起こっていることに従うことが容易であり、item = listInput()を2回持つような冗長な行を排除することが重要です。

もちろんこの意志は、同様listInput()のわずかな書き換えを必要とするが、それはまた私達にあなたの問題を解決するためのもう少しエレガントな方法を可能にする:

def listInput(): 
    item = input('Enter an item or command: ').strip() 
    if not item: 
     item = None 
    return item 

再度、ご質問がある場合は私に知らせてください、私はコードがそれ自体のことを話し、かなり自明であると思うので!

関連する問題