Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 30, 2015 18:00:22

Xryst
Зарегистрирован: 2015-01-30
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Как решить данною задачу без if??

Условие задачи:
Входные данные: 3 числа x, y и z. x, y – неотрицательные целые числа, z равняется 0 или 1. x не равняется 0. Передаются как аргументы командной строки.

Выходные даны: строка “Everybody sing a song: <текст песенки>”., где <текст песенки> формируется из у куплетов, разделенных пробелами. Все куплеты одинаковы и состоят из x ‘la’ через дефис. Если z равняется единице, в конце ставится восклицательный знак, иначе точка. При отсутствии куплетов пробел перед точкой/восклицательным знак не ставится.

Пример:

Входные данные: 2 3 1
Результат: Everybody sing a song: la - la la - la la - la!
Входные данные: 1 0 0
Результат: Everybody sing a song:.

Вот что мне пришло в голову:

import sys
import math
x=int(sys.argv[1]) 
y=int(sys.argv[2]) 
z=int(sys.argv[3]) 
A='Everybody sing a song:' 
B=x>y*(((y-y+1)*(' ')+((x-x+1)*('la')))+ (z*(('-')+((x-x+1)*('la')))) ) 
C=(('.')*(1-z)) 
D=('!'*z)
F=A+B+C+D 
print F

Мой ответ: Everybody sing a song: la - la la - la la - la la - la la - la la - la la - la la - la la - la!
А верный такой ответ: Everybody sing a song: la - la - la - la - la - la - la - la - la - la!

Что я не так делаю с формулой??

Отредактировано Xryst (Янв. 30, 2015 18:07:31)

Офлайн

#2 Янв. 30, 2015 18:09:57

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как решить данною задачу без if??

ссылка



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Янв. 30, 2015 18:15:23

Xryst
Зарегистрирован: 2015-01-30
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Как решить данною задачу без if??

terabayt
ссылка
А можешь сказать, что такое .join? и без if не как??

Отредактировано Xryst (Янв. 30, 2015 18:21:00)

Офлайн

#4 Янв. 30, 2015 19:22:38

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как решить данною задачу без if??

Xryst
и без if не как??
вот, немного переделал:
txt = ((' ' + ('la-' * x)[:-1]) * y).rstrip() + ['!', '.'][z != 1]
print 'Everybody sing a song' + txt
Xryst
А можешь сказать, что такое .join?
>>> a = ['q','w','e']
>>> '-'.join(a)
'q-w-e'
P.S. а гугл недостойный ваших вопросов?
P.S.S. что за фамильярность?!



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Янв. 30, 2015 21:16:45

Xryst
Зарегистрирован: 2015-01-30
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Как решить данною задачу без if??

terabayt
join
Спасибо, большое! извините, если что не так)

Офлайн

#6 Янв. 30, 2015 23:20:10

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как решить данною задачу без if??

Xryst
извините, если что не так)
все норм, прост вопрос типа “что такое join” решается гуглом
и на форумах, как и в обществе, принято обращаться на вы



————————————————
-*- Simple is better than complex -*-

Офлайн

#7 Янв. 30, 2015 23:35:48

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

Как решить данною задачу без if??

Xryst
z равняется 0 или 1
Xryst
Если z равняется единице, в конце ставится восклицательный знак, иначе точка.
'.!'[z]

Пара вариантов:
>>> def f(x, y, z):
...     return ' '.join([' - '.join(['la'] * x)] * y) + '.!'[z]
... 
>>> f(2, 3, 1)
'la - la la - la la - la!'
>>> f(1, 0, 0)
'.'
>>> 
>>> 
>>> def f(x, y, z):
...     c = 'la' * (x > 0) + ' - la' * (x - 1)
...     return c * (y > 0) + (' ' + c) * (y - 1) + '.!'[z]
... 
>>> f(2, 3, 1)
'la - la la - la la - la!'
>>> f(1, 0, 0)
'.'
>>>



Отредактировано py.user.next (Янв. 30, 2015 23:53:21)

Офлайн

#8 Янв. 30, 2015 23:53:40

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как решить данною задачу без if??

Xryst
z равняется 0 или 1
что-то я упустил этот момент
я вот по этому делал
Xryst
Если z равняется единице, в конце ставится восклицательный знак, иначе точка.
а вот то что я впихнул это в список а не в строку эт уже последствя рабочей недели
универсальность ))



————————————————
-*- Simple is better than complex -*-

Офлайн

#9 Янв. 31, 2015 00:04:29

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как решить данною задачу без if??

py.user.next
Пара вариантов:
инетересно посмотреть Ваше решение
Xryst
При отсутствии куплетов пробел перед точкой/восклицательным знак не ставится.
второго варианта
>>> def f(x, y, z):
...     c = 'la' * (x > 0) + ' - la' * (x - 1)
...     return c * (y > 0) + (' ' + c) * (y - 1) + '.!'[z]
Xryst
x не равняется 0
c = 'la' + ' - la' * (x - 1)



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Янв. 31, 2015 00:09:19)

Офлайн

#10 Янв. 31, 2015 23:27:32

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

Как решить данною задачу без if??

terabayt
второго варианта
А где там ставится пробел?
При y = 0 (отсутствие куплетов) перед проверкой z там получаются пустые строки.

terabayt
x не равняется 0
Это не заметил, так как на x в начале условие уже наложено.
Эту часть можно убрать тогда.
* (x > 0)



Отредактировано py.user.next (Янв. 31, 2015 23:30:45)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version