Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
isalpha和elif是怎么工作的?(python)_Python_Edx - Fatal编程技术网

isalpha和elif是怎么工作的?(python)

isalpha和elif是怎么工作的?(python),python,edx,Python,Edx,我想创建一个代码,从一个句子中打印大写单词(在“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

我想创建一个代码,从一个句子中打印大写单词(在“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
---------------------------------------------------------------------------
索引器回溯(最后一次最近调用)
在()
8如果a.isalpha()==真:
9字=字+a
--->10 elif字[0]。lower()>“g”:
11打印(word.upper())
12字=“”
索引器错误:字符串索引超出范围
我怀疑它与
.isalpha
elif


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

如果您有两个连续的非字母字符(例如逗号后跟空格),那么当
word
为空字符串时,您将点击
elif-word[0]。lower()>“g”
,因此
word[0]
处将没有字符。这就是导致异常的原因

简单地说,在尝试获取
word[0]
之前,可以通过检查
word
是否为空来避免这种情况

elif word and word[0].lower() > "g":
这至少可以避免例外情况


但我仍然有最后一个单词的问题,它没有打印最后一个单词,尽管它以大于“G”的字母开头

您仅在输入非字母字符时打印。因此,如果你传递了一个单词,但没有击中非字母字符,那么最后一个单词将不会被打印

for a in q:
    ... etc.

if word and word[0].lower() > 'g':
    print(word)
为了解决这个问题,您可以在循环结束后添加一个
print
,以防还有最后一个单词需要打印

for a in q:
    ... etc.

if word and word[0].lower() > 'g':
    print(word)

您将遇到两个问题

1) 当单词[0]为空字符串时访问它。 当您有连续的非字母表时,将给出一个错误。 2) 只有当
isalpha()
为false时,才会打印Word。 在这里,这仅仅意味着最后一个字,“心”不会被打印出来

for a in q:
    ... etc.

if word and word[0].lower() > 'g':
    print(word)
要解决(1)问题,可以在
elif-word[0]之前检查word是否为空字符串。lower()>“g”:
通过添加
if-word==“”
。如果是空字符串,我们可以跳过迭代,解决问题(1)。要跳过,可以使用
continue
语句。或者只是
word=”“

要解决(2)的问题,你可以做一个简单的技巧,在引号
q+=''
{
q=q+''
的快捷方式后添加一个空格,从而确保最后一个字符是非字母。输入引号后立即执行。或者你可以添加

if word[0].lower() > "g" :
    print (word.upper())
到最后。 现在,我建议的最终代码是

q = input ("Quote : ")
q+=" "
word = ""
for a in q :
    if a.isalpha() == True :
        word += a
    elif word =="":
        continue
    elif word[0].lower() > "g" :
        print (word.upper())
        word = ""
    else :
        word = ""

elif-ord(word[0].lower())>103
背后的想法是什么?当这个条件匹配时,为什么要打印?如果它说
elif-word[0].lower()>'g'
比在代码中没有解释的神奇数字103要清晰得多。如果你从这段代码中得到了一个异常(我运行它的时候也是这样做的),请在您的问题中包括异常的详细信息。谢谢,我已经编辑了代码。我不知道我可以这样做。异常是指我遇到的错误类型吗?Indexer:字符串索引超出范围。很抱歉,我刚刚开始编写代码。异常通常会生成堆栈跟踪,这是一条描述错误的消息和一个列表告诉您错误发生在哪里的行数。您应该在问题中包含堆栈跟踪,或者更好,使用它来找出代码中的问题所在。非常感谢。但我仍然有最后一个字的问题,它不会打印最后一个字,尽管它以大于“G”的字母开头。好的。我已经修改了我的答案。