使用索引分割字符串出错,求turtle多行文本实现正确代码
修复Turtle字符串分段绘制的索引错误
问题根源
你代码里的question.index(i)是错误核心——这个方法返回的是字符首次出现的索引,而非当前循环中字符的实际位置。比如测试字符串里的重复数字(如'1'),不管循环到第几个'1',index()都会返回它第一次出现的位置(0),导致后续字符的归类逻辑完全失效。
解决方案
有两种可靠的实现方式,推荐第二种(字符串切片),简洁高效:
方法1:用enumerate获取真实索引
遍历字符串时同时拿到索引和字符,确保判断的是当前字符的实际位置:
prilin = '' seglin = '' question = q[0] # 假设q是存储目标字符串的列表 for idx, char in enumerate(question): if idx >= 30: # 索引从0开始,第30位及以后的字符归入第二行 seglin += char else: prilin += char # Turtle绘制逻辑不变 t.write(prilin, False, 'left', ('Arial', 12, 'normal')) t.rt(180) t.fd(25) t.write(seglin, False, 'left', ('Arial', 12, 'normal'))
方法2:直接用字符串切片(推荐)
Python字符串支持切片操作,一行代码就能完成分段,无需循环:
question = q[0] # 取前30个字符(索引0-29) prilin = question[:30] # 取第30位及以后的所有字符(索引30到结尾) seglin = question[30:] # Turtle绘制逻辑不变 t.write(prilin, False, 'left', ('Arial', 12, 'normal')) t.rt(180) t.fd(25) t.write(seglin, False, 'left', ('Arial', 12, 'normal'))
说明
切片操作question[:30]遵循Python左闭右开规则,正好截取前30个字符;question[30:]自动截取从第30位到字符串末尾的所有内容,完全符合需求,代码更简洁且性能更高。
内容的提问来源于stack exchange,提问作者noobgrammer
相关产品推荐
相关产品推荐

