Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 11, 2015 01:05:57

PimiTree
Зарегистрирован: 2015-10-05
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение задач

Добрый вечер, утро, ночь или день форумчане!
Решал такую вот задачу.
Exercise 113: Formatting a List
(Solved—43 Lines)
When writing out a list of items in English, one normally separates the items with
commas. In addition, theword “and” is normally included before the last item, unless
the list only contains one item. Consider the following four lists:
apples
apples and oranges
apples, oranges and bananas
apples, oranges, bananas and lemons
Write a function that takes a list of strings as its only parameter. Your function
should return a string that contains all of the items in the list formatted in the manner
described previously as its only result. While the examples shown previously only
include lists containing four elements or less, your function should behave correctly
for lists of any length. Include a main program that reads several items from the user,
formats them by calling your function, and then displays the result returned by the
function.

Решение вот такое
def itemlist(a):
—a = a.split(' ‘)
—print(len(a))
—x = ’'
—if len(a) == 1:
——-x += a
—elif len(a) == 2:
——-x += a + ‘ and ’ + a
—elif len(a) == 3:
——-x += a + ‘, ’ + a + ‘ and ’ + a
—elif len(a) > 3:
——-for i in range(len(a)-2):
———–x += a + ‘, ’
——-x += a + ‘ and ’ + a
—return x

a = input('Введите через пробел список итемов \n')
print(itemlist(a))

Подскажите пожалуйста как решить её с использованием возможностей .format, если это вообще возможно и будет более лаконично (http://pythonworld.ru/osnovy/formatirovanie-strok-metod-format.html) или более оптимизированными вариантами.
Спасибо большое!

Отредактировано PimiTree (Окт. 11, 2015 01:08:46)

Офлайн

#2 Окт. 11, 2015 02:53:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Решение задач

>>> def f(lst):
...     if not lst:
...         return None
...     elif len(lst) == 1:
...         return lst[0]
...     else:
...         return ' and '.join((', '.join(lst[:-1]), lst[-1]))
... 
>>> f([])
>>> f(['a'])
'a'
>>> f(['a', 'b'])
'a and b'
>>> f(['a', 'b', 'c'])
'a, b and c'
>>> f(['a', 'b', 'c', 'd'])
'a, b, c and d'
>>>



Отредактировано py.user.next (Окт. 11, 2015 12:26:50)

Офлайн

#3 Окт. 11, 2015 12:15:10

PimiTree
Зарегистрирован: 2015-10-05
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение задач

Спасибо большое!
В начале было не понятно, но потом консолька все расставила на свои места.
if not lst:
… return lst - функция возвращает пустую строку, если переменная lst пуста?

Вот что стала камнем преткновения ‘ and ’.join((', '.join(lst), lst))
', '.join(lst) - возвращает строку элементов списка lst за исключением последнего с разделителем
запятая с пробелом.
‘ and ’.join((', '.join(lst), lst)) - возвращает предыдущую строку и последний элемент списка
с разделителем пробел and пробел.

Я прав?

Очень красиво оформлено, оценил)

Офлайн

#4 Окт. 11, 2015 12:29:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Решение задач

PimiTree
return lst - функция возвращает пустую строку, если переменная lst пуста?
Я там заменил пустой список на None.

PimiTree
возвращает строку элементов списка lst за исключением последнего
Да, по идее, она должна перебирать их (а не создавать срез), если там миллион строк. Но я думаю, что задание учебное, и там примут такую и благополучно про неё забудут.



Отредактировано py.user.next (Окт. 11, 2015 12:31:25)

Офлайн

#5 Окт. 11, 2015 13:39:01

PimiTree
Зарегистрирован: 2015-10-05
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение задач

На None не обратил внимание.

Да задание учебное из книги The Python Workbook A Brief Introduction with Exercises and Solutions.
Нужно это мне, а не преподавателю - я уже не студент и за год работы мозги начали ссыхаться, а что может быть лучше для работы мозга чем логическая работа?) Вот и решаю задачник в свободное время.

Отредактировано PimiTree (Окт. 11, 2015 13:40:25)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version