Форум сайта python.su
0
Добрый вечер, утро, ночь или день форумчане!
Решал такую вот задачу.
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)
Офлайн
857
>>> 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)
Офлайн
0
Спасибо большое!
В начале было не понятно, но потом консолька все расставила на свои места.
if not lst:
… return lst - функция возвращает пустую строку, если переменная lst пуста?
Вот что стала камнем преткновения ‘ and ’.join((', '.join(lst), lst))
', '.join(lst) - возвращает строку элементов списка lst за исключением последнего с разделителем
запятая с пробелом.
‘ and ’.join((', '.join(lst), lst)) - возвращает предыдущую строку и последний элемент списка
с разделителем пробел and пробел.
Я прав?
Очень красиво оформлено, оценил)
Офлайн
857
PimiTreeЯ там заменил пустой список на None.
return lst - функция возвращает пустую строку, если переменная lst пуста?
PimiTreeДа, по идее, она должна перебирать их (а не создавать срез), если там миллион строк. Но я думаю, что задание учебное, и там примут такую и благополучно про неё забудут.
возвращает строку элементов списка lst за исключением последнего
Отредактировано py.user.next (Окт. 11, 2015 12:31:25)
Офлайн
0
На None не обратил внимание.
Да задание учебное из книги The Python Workbook A Brief Introduction with Exercises and Solutions.
Нужно это мне, а не преподавателю - я уже не студент и за год работы мозги начали ссыхаться, а что может быть лучше для работы мозга чем логическая работа?) Вот и решаю задачник в свободное время.
Отредактировано PimiTree (Окт. 11, 2015 13:40:25)
Офлайн