找出句子中从大写到小写的变化,并将文本分开(打印)

2024-06-06 15:17:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我需要在大写到小写的句子之间分隔一个文本并打印出来

示例:
我们印度人民郑重决心将印度建设成为一个主权、社会主义、世俗、民主的共和国,并保障其所有公民的安全

结果:
我们,印度人民,
郑重决定将印度组成一个 主权、社会主义、世俗、民主共和国
确保所有公民的安全

我有这个:

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”处

请帮帮我


Tags: theto文本示例ifpeople公民民主
1条回答
网友
1楼 · 发布于 2024-06-06 15:17:18

如果您试图根据单词是大写还是(部分)小写来分组,那么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,这满足中断循环的相等性检查。它不会在" h"处停止,因为" ".isupper()False,而"h".islower()True

为了让代码按照您希望的方式工作,跳过循环中的非字母字符是不够的,因为它们仍然存在于s。拆分字符串并对结果列表进行操作(正如我在上面的代码中所做的那样)使它变得更容易,将单词分类为完整单元(这是groupby使用any函数所做的),而不是试图检测它们之间的边界

相关问题 更多 >