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