所以我正在制作基本的猪拉丁语翻译
word = raw_input("type a word, any word")
first = word[0]
rest = word[1:len(word)]
ay = "ay"
if word.isalpha() and len(word) > 0:
print (rest + first + ay)
elif len(word) == 0:
print "invalid entry"
else:
print "invalid entry"
如果我输入一个空字符串,编译器将返回:
IndexError:字符串索引超出范围
如何使它在输入空字符串时代码将返回“无效条目”?
答案 0 :(得分:4)
如果检查
,只需将您的逻辑移到第一个内部word = raw_input("type a word, any word")
if word.isalpha() and len(word) > 0:
first = word[0]
rest = word[1:len(word)]
ay = "ay"
print (rest + first + ay)
elif len(word) == 0:
print "invalid entry"
else:
print "invalid entry"
答案 1 :(得分:1)
你只需要检查if word
作为空字符串评估为False
并使用单个else语句,你的第二个elif是不必要的,因为该单词将至少有一个字符并且不是alpha :
word = raw_input("type a word, any word")
if word.isalpha() and word:
first = word[0] # will only try to index if word is not an empty string or not alpha
rest = word[1:len(word)]
ay = "ay"
print (rest + first + ay)
else:
print "invalid entry"
In [11]: bool("")
Out[11]: False
In [12]: bool("foo")
Out[12]: True
您也可以使用ternary conditional operator
word = raw_input("type a word, any word")
print word[1:] + word[0] + "ay" if word.isalpha() and word else "invalid entry"
答案 2 :(得分:0)
因为你的错误肯定会指向第二行
first = word[0]
您正在调用字符串中的第一个字符,因为索引从0开始
所以你要求和索引不存在...
如果你要求-1(列表中的倒数第二个字符),你也会得到更多的索引错误。
所以当你意识到索引范围时你应该只询问索引值,所以在另一个答案中说明了if语句中的代码行2-3块检查索引值这使得代码仍然通过保证值保持动态稳定如果您希望将后者用作错误消息的一部分,则设置“ay”;我也删除了重复的elif语句,假设你不知道它是否因为它有数字或因为它的len而失败。
请注意,如果字符串中包含连字符“ - ”或类似的字符,isalpha将返回false!
word = raw_input("type a word, any word")
ay = "ay"
if word.isalpha() and len(word) > 0:
first = word[0]
rest = word[1:len(word)]
print (rest + first + ay)
else:
print "invalid entry"
答案 3 :(得分:0)
word[1:len(word)]
替换为word[1:]
。