#python #command-line-arguments
#python #аргументы командной строки
Вопрос:
У меня есть следующий скрипт на python, который хочет ввести первый аргумент в виде строки, отменить его, а затем распечатать
import sys
input = sys.argv[1:]
input_reversed = input[::-1]
print("The input_reversed is: " input_reversed)
Запуск его с помощью вызова like python test.py abcdef
выдает следующую ошибку, в которой говорится:
Traceback (most recent call last):
File "test.py", line 5, in <module>
print("The input_reversed is: " input_reversed)
TypeError: cannot concatenate 'str' and 'list' objects
В чем я не прав? sys.argv[1:]
не возвращает строку?
Я просто хочу вызвать python test.py abcdef
и получить вывод, fedcba
который является обратным abcdef
.
Комментарии:
1.
['one', 'two', 'three'][1:]
это['two', 'three']
— это список строк, а не строка.2. Я просто хочу вызвать
python test.py abcdef
и получить вывод в видеfedcba
3. Ах! Это не то, что делает ваш код; он меняет порядок аргументов, он не меняет текст отдельных аргументов. (Поэтому, если вы передаете только один аргумент, этот список вообще не может быть изменен, поэтому он остается прежним).
4. Предполагая только один аргумент и
len
> 1, вы можете использоватьsys.argv[1][::-1]
и сохранять его как переменную.5.
sys.argv[1]
получает первый аргумент в строке, и это то, что я хотел сделать здесь. Большое спасибо!
Ответ №1:
Если вы хотите, чтобы содержимое каждого аргумента было отменено, в дополнение к изменению порядка самих аргументов, объедините все ваши аргументы вместе в строку, а затем измените эту строку:
print("The reversed input is: " ' '.join(sys.argv[1:])[::-1])
Обратите внимание на порядок операций здесь. Это может быть написано с большим количеством промежуточных шагов, таких как:
args_list = sys.argv[1:]
args_string = ' '.join(args_list)
reversed_args_string = args_string[::-1]
print("The reversed input is: " reversed_args_string)
Ответ №2:
Нет, он возвращает список. Вы можете объединить список вместе, используя join()
. Попробуйте это:
print("The input_reversed is: " ', '.join(input_reversed))
Комментарии:
1. Выполнение
join
приводит к тому, что вывод не отменяется, а остается неизменным? Это интересно. Не могли бы вы, пожалуйста, проверить вывод этого соединения? Происходит обратное.2. А?
', '.join(['one', 'two', 'three'][::-1])
'three, two, one'
правильно — выполняется обратное.3. Он просто объединит элементы списка вместе, используя любой определенный вами разделитель. Вывод будет в том же порядке, что и список, который вы передаете функции. Итак, если вы используете ‘,
.join(['a','b','c'])
вы получите результат"a, b, c"