Найти - Пользователи
Полная версия: Помогите, пожалуйста!!! Замена первой буквы слова на большую. Почему не всегда работает?
Начало » Python для новичков » Помогите, пожалуйста!!! Замена первой буквы слова на большую. Почему не всегда работает?
1 2
py.user.next
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
>>>
old_monty
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”. А в моем решении этот текст прошел нормально.
AnnaKV
py.user.next
Спасибо большое!
AnnaKV
old_monty

Спасибо за Ваши комментарии.
shaptmos
А вы не могли бы сказать в чем ошибка в моей программе? Все проверочные варианты работают, кроме одного слова:
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)
AnnaKV
shaptmos
Спасибо Вам огромное, за то, что нашли время найти мою ошибку. А потом еще и написать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB