Python中自定义循环input()时如何解决字符串索引越界问题?
解决Python循环输入中的索引越界问题
嗨,咱们来搞定这两个索引越界的小问题,本质上都是因为没先检查字符串长度就直接访问索引导致的,我给你两种靠谱的处理思路:
第一个问题:空输入导致line[0]越界
你原来的代码在用户输入空字符串时,line[0]会直接报错——毕竟空字符串根本没有第0个字符嘛。这里有两种简单的修复方式:
方式1:先检查字符串非空再判断索引
先确认输入的字符串不是空的,再去判断第一个字符是不是#:
while True: line = input("> ") # 先判断line不为空,再检查第一个字符 if line and line[0] == "#": continue if line == "done": break print(line) print('Done!')
这里line作为布尔值判断时,空字符串会被视为False,所以只有非空的情况下才会去执行后面的索引判断。
方式2:用startswith()方法更简洁
Python的字符串内置了startswith()方法,它会自动处理空字符串的情况(空字符串调用这个方法会返回False),代码更简洁易读:
while True: line = input("> ") if line.startswith("#"): continue if line == "done": break print(line) print('Done!')
第二个问题:判断line[1]时的索引越界
当你想判断输入是否是" #"(空格加#)时,直接访问line[1]会在输入空字符串、或者只有1个字符的字符串时报错。同样,我们有两种处理方式:
方式1:先检查字符串长度足够再判断索引
先确保字符串长度至少为2,再去访问第二个字符:
while True: line = input("> ") # 先判断长度≥2,再检查第二个字符是# if len(line) >= 2 and line[1] == "#": continue if line == "done": break print(line) print('Done!')
这样就避免了长度不足时访问索引的问题。
方式2:还是用startswith()更省心
直接用startswith(" #")来判断字符串是否以空格加#开头,它会自动处理所有长度不够的情况:
while True: line = input("> ") if line.startswith(" #"): continue if line == "done": break print(line) print('Done!')
这种方式代码更直观,别人一看就知道你要判断的是开头的空格加#,而且不用手动处理长度判断,减少出错概率。
总的来说,处理字符串开头匹配的场景,优先用startswith()这类内置方法,既简洁又能避免边界错误;如果必须访问索引,一定要先检查字符串的长度是否足够哦!
内容的提问来源于stack exchange,提问作者Faez
相关产品推荐
相关产品推荐

