2016-04-19 3 views
1

Я работаю над кодом, в котором я пытаюсь взять argv (i, w или f) из командной строки. Затем, используя ввод, я хочу взять список целых чисел, float или слов и выполнить несколько вещей.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

Смежные вопросы