Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 16, 2009 22:30:10

tyua
От:
Зарегистрирован: 2009-02-16
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

пытаюсь учить python

Начал учить сей язык, вот по заданию из стратьи http://habrahabr.ru/blogs/python/29980/
- Написать программу поиска самого длинного слова в строке, разделенной пробелами.
я чють усложнил задание, хочу что б в строке находилось не одно слово, а все самые длинные.
вот что получилось у меня:

# -*- coding: UTF-8 -*-
s = raw_input("Введите строку:")

st = s.split(" ")
#print st
a = 0
b = len(st[0])
max_word = []
for i in st:
if a <= len(i):
max_word.append(i)
if a > b:
for x in max_word:
max_word.pop(0)
if a < len(x):
break
b = a
a = len(i)
for j in max_word:
print j
Думаю что это можно сделать проще, подскажите как.
ЗЫ прошу сильно не ругать, с программированием я вобще почти никогда не сталкивался.



Отредактировано (Фев. 16, 2009 23:07:00)

Офлайн

#2 Фев. 16, 2009 22:42:01

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

пытаюсь учить python

Ваш код понимаю с трудом в три ночи. Вот мой вариант:

>>> text = 'a b cc ddd ee fff'
>>> chunks = sorted(text.split(' '), lambda a, b: cmp(len(a), len(b)))
>>> [x for x in chunks if len(x) == len(chunks[-1])]
['ddd', 'fff']
Вот ещё придумал:
>>> text = 'a b cc ddd ee fff'
>>> chunks = text.split(' ')
>>> [x for x in chunks if len(x) == len(max(chunks))]
['ddd', 'fff']

Отредактировано (Фев. 16, 2009 22:45:00)

Офлайн

#3 Фев. 16, 2009 22:57:07

tyua
От:
Зарегистрирован: 2009-02-16
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

пытаюсь учить python

спасибо lorien, теперь я понимаючто я просто не знаю многие стандартные функции, и что-то не совсем понимаю как работают цыклы которые вы использовали :(



Офлайн

#4 Фев. 16, 2009 23:07:13

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

пытаюсь учить python

Да, в python есть такая фишка, что в стандартной библиотеке заложена куча вещей, причём некоторые их комбинации дают прикольный эффект :-)

UPD: Наверное, это верно, для любого языка. Пойду ка спать лучше.

Отредактировано (Фев. 16, 2009 23:07:42)

Офлайн

#5 Фев. 17, 2009 07:34:48

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

пытаюсь учить python

второй вариант неправильно работает.
s = “a bb ccc dd eee sf”
max(s.split(“ ”)) == “sf”

надо так:

s = "a bb ccc dd eee sf"
d = s.split(" ")
[x for x in d if len(x)==max(map(len, d))]



Офлайн

#6 Фев. 17, 2009 11:41:41

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

пытаюсь учить python

Угу, ещё была мысль, что что-то я неправильно делаю, но тестовые данные подвели :-)

Офлайн

#7 Фев. 17, 2009 17:08:12

tyua
От:
Зарегистрирован: 2009-02-16
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

пытаюсь учить python

продолжил я выполнять задания из той же статьи..
Написать программу декодирования телефонного номера для АОН.
По запросу АОНа АТС посылает телефонный номер, используя следующие правила:
- Если цифра повторяется менее 2 раз, то это помеха и она должна быть отброшена
- Каждая значащая цифра повторяется минимум 2 раза
- Если в номере идут несколько цифр подряд, то для обозначения «такая же цифра как предыдущая» используется идущий 2 или более подряд раз знак #

Например, входящая строка 4434###552222311333661 соответствует номеру 4452136
Кстати, регулярные выражения использовать в этих заданиях - нельзя :)

вот что получилось у меня:

# -*- coding: UTF-8 -*-
s = raw_input("Введите строку:")
aon = ''
for x in [i for i in range(len(s)) if s[i] == s[i+1:i+2] and s[i] != s[i-1:i]]:
if s[x] == '#':
aon = aon[len(aon)-1:len(aon)] + aon
continue
aon = aon +s[x]
print aon
хочу услышать что скажут по этому поводу профи, спасибо.



Офлайн

#8 Фев. 17, 2009 17:12:27

cleg
От:
Зарегистрирован: 2006-11-09
Сообщения: 153
Репутация: +  0  -
Профиль   Отправить e-mail  

пытаюсь учить python

все классно, но как автор той статьи хочу отметить что предполагается выполнить задание без list comprehensions.
так что решение tyua - вполне приемлемо для того урока. и в целом - очень неплохо не считая мелочей.

ЗЫ если что - моя аська 244540



Отредактировано (Фев. 17, 2009 17:13:45)

Офлайн

#9 Фев. 17, 2009 17:26:58

tyua
От:
Зарегистрирован: 2009-02-16
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

пытаюсь учить python

спасибо за статью и похвалу cleg :) буду дальше читать ваши статьи, особенно интересны задания..
и если никто не против то решения заданий буду выкладывать тут, может кто подскажет что не так или как это сделать лучше.



Офлайн

#10 Фев. 17, 2009 17:28:14

corlovito
От:
Зарегистрирован: 2009-02-17
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

пытаюсь учить python

Помогите плиз не могу запустить следующий код, что не так(я не программист я только учусь)

>>> age =56
… if age < 65
… print (“Вам еще рано на пенсию”)

и ошибок не выдает и надпись “Вам еще рано на пенсию” не появляется помогите сделать первые шаги в изучении программирования



Отредактировано (Фев. 17, 2009 17:30:13)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version