isalpha和elif是怎么工作的?(python)
我想创建一个代码,从一个句子中打印大写单词(在“G”之后)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
# [] 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”的字母开头。好的。我已经修改了我的答案。