найти переход от верхнего регистра к нижнему в предложении и отделить текст (печать) - PullRequest
0 голосов
/ 09 мая 2020
• 1000 , СОЦИАЛИСТ, СЕКУЛЯР, ДЕМОКРАТИЯ C РЕСПУБЛИ C и обеспечить всех своих граждан

Результат:
МЫ, НАРОД ИНДИИ,
торжественно приняли решение превратить Индию в
СУВЕРЕННЫЙ, СОЦИАЛИСТИЧЕСКИЙ, СЕКУЛЯРНЫЙ, ДЕМОКРАТИЧЕСКИЙ C REPUBLI C
и для обеспечения всех своих граждан

У меня есть это:

i=0
s='WE, THE PEOPLE OF INDIA, having solemnly resolved, to constitute India into a SOVEREIGN, SOCIALIST, SECULAR, DEMOCRATIC REPUBLIC and to secure to all its citizens'
t= ''
while i < len(s):
    if not(s[i].isalpha())==True:
       i += 1
       continue
    if s[i].isupper()==s[i+1].islower():
        i += 1
        t = t+','
        print(s[i])
        break
    t=t+s[i]
    #print(t)
    i += 1
print(t)
print(i)

но это мой результат:

WETHEPEOPLEOFINDIAhavin,

Не понимаю, почему он не заканчивается на 'h'.

Помогите, пожалуйста! .

1 Ответ

1 голос
/ 09 мая 2020

Если вы пытаетесь сгруппировать слова по верхнему или (частично) нижнему регистру, itertools.groupby может быть более простым способом:

>>> print('\n'.join(
...     ' '.join(w) for _, w in itertools.groupby(
...         s.split(' '),
...         lambda w: any(c.islower() for c in w)
...     )
... ))
WE, THE PEOPLE OF INDIA,
having solemnly resolved, to constitute India into a
SOVEREIGN, SOCIALIST, SECULAR, DEMOCRATIC REPUBLIC
and to secure to all its citizens

Ваш код останавливается на "g " потому что "g".isupper() и " ".islower() оба являются False, что удовлетворяет проверке равенства, которая нарушает ваш l oop. Это не заканчивается на " h", потому что " ".isupper() - это False, а "h".islower() - True.

Чтобы ваш код работал так, как вы хотите, пропуска неалфавитных c символов в l oop недостаточно, потому что они все еще существуют в s. Разделение строки и работа с результирующим списком (как я сделал в моем коде выше) значительно упрощает задачу, равно как и категоризация слов как полных единиц (что делает groupby с функцией any), а не пытаясь обнаружить границы между ними.

...