2016-04-19 15 views
1

私はコマンドラインからargv(i、w、またはf)を取ろうとしているコードで作業しています。次に、入力を使って、整数、浮動小数点数または単語のリストを取得し、いくつかを実行したい。Python - リストの追加とソート

  1. ユーザーはコマンドラインで「f」を入力し、値が空のリストに追加される浮動小数点のリストを入力します。次に、プログラムはfloatのリストをソートし、出力結果を出力します。

単語と整数が似ています。

入力が単語のリストの場合、出力はアルファベット順の単語を出力します。入力が整数のリストである場合、出力は逆の順序でリストになります。

これはこれまでのコードですが、入力値の中には値を空のリストに追加するだけのものがあります。コードが正しく実行されない原因は何ですか?

例えば、プログラムは、プログラム名を追加することにより開始され、単語のための 'W':

$ test.py w 
>>> abc ABC def DEF 
[ABC, DEF,abc,def] # list by length, alphabetizing words 

コード

import sys, re 

script, options = sys.argv[0], sys.argv[1:] 

    a = [] 

    for line in options: 

     if re.search('f',line):  # 'f' in the command line 
      a.append(input()) 
      a.join(sorted(a)) # sort floating point ascending 
      print (a) 


     elif re.search('w', line):    
      a.append.sort(key=len, reverse=True) # print list in alphabetize order 
      print(a) 

     else: re.search('i', line) 
     a.append(input()) 
     ''.join(a)[::-1] # print list in reverse order 
     print (a) 

答えて

1

これを試してみてください:

import sys 
option, values = sys.argv[1], sys.argv[2:] 

tmp = { 
     'i': lambda v: map(int, v), 
     'w': lambda v: map(str, v), 
     'f': lambda v: map(float, v) 
     } 
print(sorted(tmp[option](values))) 

出力:

shell$ python my.py f 1.0 2.0 -1.0 
[-1.0, 1.0, 2.0] 
shell$ 

shell$ python my.py w aa bb cc 
['aa', 'bb', 'cc'] 
shell$ 

shell$ python my.py i 10 20 30 
[10, 20, 30] 
shell$ 

必要なエラー処理を追加する必要があります。例えば、

>>> float('aa') 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
ValueError: could not convert string to float: aa 
>>> 
+0

ありがとうございました!これはうまくいく。あなたの辞書の使用が最善の選択肢です! – brazjul

関連する問題