1 Востаннє редагувалося vitek_z (09.11.2016 15:59:48)

Тема: Список як аргумент командного рядка.

Вітаю всіх!

Є завдання:

Вхідні дані: довільна, відмінна від нуля, кількість значень - аргументів командного рядка. Значеннями-аргументами можуть бути числа або рядки, які складаються з цифр та літер латинського алфавіту без пробілів.

Результат роботи: рядок, що складається з отриманих значень в зворотньому порядку, записаних через пробіл. Пробіл в кінці рядка відсутній.

Наприклад
Вхідні дані: 1
Приклад виклику: python lab4_3.py 1
Результат: 1
Вхідні дані: qwe asd zxc 123
Приклад виклику: python lab4_3.py qwe asd zxc 123
Результат: 123 zxc asd qwe

Написав такий код:

import sys

print sys.argv

if len(sys.argv)==2:
    s = sys.argv[1]
else: 
    s=sys.argv[1:]

print s
print type(s)

if type(s) == str:
    s_list = s.split(' ')
    a = s_list[::-1]
    print " ".join(a)
elif type(s) == list:
    a = s[::-1]
    print " ".join(a)

Якщо аргументом є рядок, то все працює. Проблема виникає, коли аргументом є список.

Підкажіть, будь ласка, як правильно переробляти список?

2

Re: Список як аргумент командного рядка.

1. Тег code поставте.
2. Яка саме проблема у вас виникає, ви так і не написали.

3 Востаннє редагувалося ADR (07.11.2016 02:23:03)

Re: Список як аргумент командного рядка.

import sys
print(' '.join(reversed(sys.argv[1:])))
import sys
print(' '.join(sys.argv[1::-1]))

ps: користуйтесь дегаром, коли щось не працює

4

Re: Список як аргумент командного рядка.

vitek_z написав:

Якщо аргументом є рядок, то все працює. Проблема виникає, коли аргументом є список.

Підкажіть, будь ласка, як правильно переробляти список?

Що значить "аргументом є список"? Типу "(1,3,4,5)"?

Якщо програма передбачає, що аргументи можуть бути списками - треба задекларувати десь правила подання списків (синтаксис). А на базовому рівні згідно такого синтаксису потім можна перевіряти аргументи на відповідність синтаксису і у разі співпадіння парсити.

I belong to the Dead Generation.

5

Re: Список як аргумент командного рядка.

koala написав:

2. Яка саме проблема у вас виникає, ви так і не написали.

При виконанні: python py_test.py "hello word"
Отримуємо: word hello

Що є правильним.


При виконанні: python py_test.py [hello, word]
Отримуємо: word] [hello,

Що є НЕ правильним.

При виконанні: python py_test.py "[hello, word]"
Отримуємо: word] [hello,

Що є НЕ правильним.

6

Re: Список як аргумент командного рядка.

Bartash написав:
vitek_z написав:

Якщо аргументом є рядок, то все працює. Проблема виникає, коли аргументом є список.

Підкажіть, будь ласка, як правильно переробляти список?

Що значить "аргументом є список"? Типу "(1,3,4,5)"?

Якщо програма передбачає, що аргументи можуть бути списками - треба задекларувати десь правила подання списків (синтаксис). А на базовому рівні згідно такого синтаксису потім можна перевіряти аргументи на відповідність синтаксису і у разі співпадіння парсити.

Списки типу [1,2,3]

Нажаль в умові не визначені правила подання списків "Вхідні дані: довільна, відмінна від нуля, кількість значень - аргументів командного рядка. Значеннями-аргументами можуть бути числа або рядки, які складаються з цифр та літер латинського алфавіту без пробілів."

Але при перевірці мого коду в аргументах з'являється список вище вказаного формату і відповідно результат перевірки не правильний.

7

Re: Список як аргумент командного рядка.

ADR написав:
import sys
print(' '.join(reversed(sys.argv[1:])))
import sys
print(' '.join(sys.argv[1::-1]))

ps: користуйтесь дегаром, коли щось не працює

Нажаль в резутаті  [] не відокремлюють від елементів списку і виводяться як складові першого і останнього елементів списку.

8

Re: Список як аргумент командного рядка.

Читаємо уважно умову:

vitek_z написав:

Значеннями-аргументами можуть бути числа або рядки, які складаються з цифр та літер латинського алфавіту без пробілів

Рядок '[hello, word]' містить, крім цифр та літер латинського алфавіту, ще символи '[', ']', ',', і, таким чином, не є коректним аргументом для вашої програми. Правильне рішення - додавайте перевірку, що кожне слово дійсно відповідає умові; для навчальної задачі прийнятна страусяча тактика - ігнорувати невідповідність вхідних даних, мовляв, самі ввели помилкову інформацію - самі винні в неправильному результаті, яким би він не був.

9

Re: Список як аргумент командного рядка.

koala написав:

Читаємо уважно умову:

vitek_z написав:

Значеннями-аргументами можуть бути числа або рядки, які складаються з цифр та літер латинського алфавіту без пробілів

Рядок '[hello, word]' містить, крім цифр та літер латинського алфавіту, ще символи '[', ']', ',', і, таким чином, не є коректним аргументом для вашої програми. Правильне рішення - додавайте перевірку, що кожне слово дійсно відповідає умові; для навчальної задачі прийнятна страусяча тактика - ігнорувати невідповідність вхідних даних, мовляв, самі ввели помилкову інформацію - самі винні в неправильному результаті, яким би він не був.

В завданні є підказка:

"""
Приклад виклику: python lab4_3.py qwe asd zxc 123
Результат: 123 zxc asd qwe
"""

А це один із результатів перевірки:

"""
Неправильно обрахований результат. Для набору вхідних параметрів ['force', 'the', 'Feel'] очікуваний результат: Feel the force. Ваш результат: 'force'
"""

10 Востаннє редагувалося koala (09.11.2016 17:24:51)

Re: Список як аргумент командного рядка.

Кажу ж - читаємо уважно:

vitek_z написав:

Приклад виклику: python lab4_3.py qwe asd zxc 123
Результат: 123 zxc asd qwe

Добре, а що у нас тут?

vitek_z написав:

Для набору вхідних параметрів ['force', 'the', 'Feel']

Тут - не приклад виклику. Тут - набір вхідних параметрів. А як написати виклик програми, щоб набір вхідних параметрів був саме такий? Правильно:

python lab4_3.py force the Feel

11

Re: Список як аргумент командного рядка.

Дякую всім! Тема закрита. Нарешті сьогодні мій код спрацював. Отримав максимум балів. Після фіксації моєї оцінки став доступний варіант від викладача. Все дуже просто: він використовував .reverse() і цикл for для перебору елементів.