python - .isalpha 和 elif 是如何工作的?(Python)
问题描述
我想创建一个从句子中以大写字母(“G”之后)打印单词的代码
# [] create words after "G"
# sample quote "Wheresoever you go, go with all your heart" ~ Confucius (551 BC - 479 BC)
# Sample output:
WHERESOEVER
YOU
WITH
YOUR
HEART
这是我的代码
q = input ("Quote : ")
word = ""
for a in q :
if a.isalpha() == True :
word = word + a
elif word[0].lower() > "g" :
print (word.upper())
word = ""
else :
word = ""
它运行良好,直到句子的最后一个单词,尽管第一个字母在“G”之后,但它无法打印单词。此外,当它找到标点符号时,它卡住了,并说
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-45-29b3e8e00230> in <module>()
8 if a.isalpha() == True :
9 word = word + a
---> 10 elif word[0].lower() > "g" :
11 print (word.upper())
12 word = ""
IndexError: string index out of range
我怀疑它是否.isalpha
与elif
我需要知道如何解决它以及我在哪里犯了错误
解决方案
如果你连续有两个不是字母的字符(比如逗号后跟一个空格),那么你会打elif word[0].lower() > "g"
whenword
是空字符串,所以 . 处不会有字符word[0]
。这就是导致异常的原因。
word
简单地说,您可以通过在尝试获取之前检查 is not empty 来避免这种情况word[0]
。
elif word and word[0].lower() > "g":
那至少应该避免异常。
但是我仍然有最后一个单词的问题,虽然它以大于“G”的字母开头,但它不打印最后一个单词
仅当您遇到非字母字符时才打印。因此,如果您传递一个单词,然后没有击中非字母字符,则不会打印最后一个单词。
为了解决这个问题,您可以print
在循环结束后添加一个,以防仍有最后一个单词要打印。
for a in q:
... etc.
if word and word[0].lower() > 'g':
print(word)
推荐阅读
- html - 如何将字体大小增加到“is-size-1”之外?
- ruby-on-rails - 定制设计注册
- c# - 聚合根集合的更新 - 不符合 DDD。有效的替代品?
- r - 如何从 R 合并文件中删除第一列自动生成的计数?
- dns - oracle apex 指向缺少通用主题资源的域
- javascript - 如何将 excel 转换为 json 并在 cypress 中以编程方式写入 json 文件?
- java - Intellij Structural Search and Replace 修改结果
- android - mapbox android setStyle回调未调用
- android - Android 如何增加 Layout editor 提示显示时间
- c++ - 从构造函数抛出异常时如何克服内存泄漏?