quote="Wheresoever you go, go with all your heart"
word=""
for character in quote:
if character.lower().isalpha()==True:
word+=character.lower()
else:
if word[0]>="h":
print(word.upper())
word=""
else:
word = ""
我只打印了前两个单词,然后:
回溯(最近一次调用(: 文件 "C:/Users/dubir/PycharmProjects/Läraprogrammering/Dubirka2.py",第 153 行,在 如果单词[0]>="h": 索引错误: 字符串索引超出范围
进程已完成,退出代码为 1
您的代码有两个主要问题:
- 如果最后一个字符是字母字符,那么它永远不会被打印出来,因为在那个单词之后,您将永远不会进入
else
大小写; word
可能仍然有长度0
,因为可以有两个非 alpha 的行。例如', '
.
您可以使用以下命令修复代码本身:
word=""
for character in quote:
if character.isalpha():
word += character.lower()
else:
ifword andword[0] >= "h":
print(word.upper())
word=""
if word and word[0] >= "h":
print(word.upper())
但这仍然不是很声明性的。更好的方法可能是:
import re
rgx = re.compile(r'[A-Za-z]+')
for word in rgx.split(quote):
if word and word[0] >= 'h':
print(word.upper())
我们可以通过使用切片运算符使其更加优雅,从而减少检查次数:
import re
rgx = re.compile(r'[A-Za-z]+')
for word in rgx.split(quote):
if word[:1] >= 'h':
print(word.upper())