首页 > 解决方案 > .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

我怀疑它是否.isalphaelif

我需要知道如何解决它以及我在哪里犯了错误

标签: pythonedx

解决方案


如果你连续有两个不是字母的字符(比如逗号后跟一个空格),那么你会打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)

推荐阅读