Форум сайта python.su
Начал учить сей язык, вот по заданию из стратьи 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)
Офлайн
Ваш код понимаю с трудом в три ночи. Вот мой вариант:
>>> 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)
Офлайн
спасибо lorien, теперь я понимаючто я просто не знаю многие стандартные функции, и что-то не совсем понимаю как работают цыклы которые вы использовали :(
Офлайн
Да, в python есть такая фишка, что в стандартной библиотеке заложена куча вещей, причём некоторые их комбинации дают прикольный эффект :-)
UPD: Наверное, это верно, для любого языка. Пойду ка спать лучше.
Отредактировано (Фев. 16, 2009 23:07:42)
Офлайн
второй вариант неправильно работает.
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))]
Офлайн
Угу, ещё была мысль, что что-то я неправильно делаю, но тестовые данные подвели :-)
Офлайн
продолжил я выполнять задания из той же статьи..
Написать программу декодирования телефонного номера для АОН.
По запросу АОНа АТС посылает телефонный номер, используя следующие правила:
- Если цифра повторяется менее 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
Офлайн
все классно, но как автор той статьи хочу отметить что предполагается выполнить задание без list comprehensions.
так что решение tyua - вполне приемлемо для того урока. и в целом - очень неплохо не считая мелочей.
ЗЫ если что - моя аська 244540
Отредактировано (Фев. 17, 2009 17:13:45)
Офлайн
спасибо за статью и похвалу cleg :) буду дальше читать ваши статьи, особенно интересны задания..
и если никто не против то решения заданий буду выкладывать тут, может кто подскажет что не так или как это сделать лучше.
Офлайн
Помогите плиз не могу запустить следующий код, что не так(я не программист я только учусь)
>>> age =56
… if age < 65
… print (“Вам еще рано на пенсию”)
…
и ошибок не выдает и надпись “Вам еще рано на пенсию” не появляется помогите сделать первые шаги в изучении программирования
Отредактировано (Фев. 17, 2009 17:30:13)
Офлайн