Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 25, 2016 16:28:18

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

Помогите, пожалуйста!!! Замена первой буквы слова на большую. Почему не всегда работает?

AnnaKV
тобы каждое слово начиналось с большой буквы. При этом используйте вашу функцию capitalize().
>>> def capitalize(s):
...     return s[0].upper() + s[1:]
... 
>>> s = 'abc def ghi'
>>> 
>>> out = ' '.join(map(capitalize, s.split()))
>>> print(out)
Abc Def Ghi
>>>

>>> import string
>>> 
>>> def capitalize(s):
...     lower = string.ascii_lowercase
...     upper = string.ascii_uppercase
...     i = lower.find(s[0])
...     if i >= 0:
...         return upper[i] + s[1:]
...     else:
...         return s
... 
>>> s = 'abc def ghi'
>>> 
>>> out = ' '.join(map(capitalize, s.split()))
>>> print(out)
Abc Def Ghi
>>>



Отредактировано py.user.next (Янв. 25, 2016 16:36:24)

Офлайн

#2 Янв. 25, 2016 19:03:18

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Помогите, пожалуйста!!! Замена первой буквы слова на большую. Почему не всегда работает?

AnnaKV
Я так понимаю, в Вашем решении используется двумерный массив, а мы его еще не учили. Эту задачу наверно требовалось решать более простыми способами.
Если это и можно назвать двумерным массивом, то с большой натяжкой. Разве что каким-нибудь “вырожденным случаем” 2-мерного массива.
У меня слишком сложный способ? Да что вы говорите. Для обработки настоящего 2-мерного массива потребовалось бы 2 цикла for. Один для обхода строк, другой для обхода столбцов, причем один из циклов был бы вложен в другой. У меня всего 1 цикл - для обхода элементов списка, который был получен разбиением исходной строки s при помощи стандартной функции split(). Ну, а с каждым словом можно тоже работать как со списком, в данном случае, читать его первый элемент (первую букву). Вот и получились выражения вроде
s[i][0],
которые, действительно, внешне похожи на обращение к элементу 2-мерного массива.
AnnaKV
А вы не могли бы сказать в чем ошибка в моей программе? Все проверочные варианты работают, кроме одного слова:
de noche todos los gatos son pardos
выдает
De Noche Todos Los GatoS son Pardos
В вашей программе почти совсем не разбирался. Извините, у меня мало времени. Возможно, индексы начала слов определены неточно, и ваша программа приняла конец предыдущего слова за начало следующего. В результате получилось “GatoS son”. А в моем решении этот текст прошел нормально.

Отредактировано old_monty (Янв. 25, 2016 19:09:38)

Офлайн

#3 Янв. 26, 2016 15:17:18

AnnaKV
Зарегистрирован: 2016-01-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста!!! Замена первой буквы слова на большую. Почему не всегда работает?

py.user.next
Спасибо большое!

Офлайн

#4 Янв. 26, 2016 18:37:53

AnnaKV
Зарегистрирован: 2016-01-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста!!! Замена первой буквы слова на большую. Почему не всегда работает?

old_monty

Спасибо за Ваши комментарии.

Отредактировано AnnaKV (Янв. 26, 2016 18:38:09)

Офлайн

#5 Янв. 27, 2016 00:50:54

shaptmos
Зарегистрирован: 2015-12-12
Сообщения: 27
Репутация: +  4  -
Профиль   Отправить e-mail  

Помогите, пожалуйста!!! Замена первой буквы слова на большую. Почему не всегда работает?

А вы не могли бы сказать в чем ошибка в моей программе? Все проверочные варианты работают, кроме одного слова:
de noche todos los gatos son pardos
выдает
De Noche Todos Los GatoS son Pardos

    i=0
    index=0
    while i<=len(s)-1:
        index=s.find(" ",i)
        if index==-1:
            return s
        else:
            kod1=ord(s[index+1])
            kod2=kod1-32
            s=s[:i]+ s[i:].replace(chr(kod1),chr(kod2),1)
            i=index+1

ну давайте прямо на той строке, что не получается и рассмотрим отчего так:
i == 0
index == 0
начался цикл
index == 2
а i все еще равно 0, то есть выделенная вами строка имеет вид:
s = s[:0] + s[0:].replace...
и только затем значение i == 3
то есть подстрока в которой будет происходить замена будет начинаться в каждой итерации не с нужного вам слова, а с предыдущего.

s=str(input())
def capitalize(s):
    IamLazy = s.title()
print(IamLazy)

Отредактировано shaptmos (Янв. 27, 2016 00:52:16)

Офлайн

#6 Янв. 27, 2016 14:38:15

AnnaKV
Зарегистрирован: 2016-01-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста!!! Замена первой буквы слова на большую. Почему не всегда работает?

shaptmos
Спасибо Вам огромное, за то, что нашли время найти мою ошибку. А потом еще и написать.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version