Python实现字母转字母表位置的脚本运行无输出该如何解决
代码问题排查及修复方案
存在的问题
- 遍历逻辑错误:while循环内固定取字符串最后一个字符
text[index_1 - 1],循环全程没有移动取值的下标,根本没有遍历输入的所有字符 isdigit方法未调用:你写的character.isdigit是方法对象本身,布尔值永远为True,所有字符都会直接走pass分支,永远不会进入字母判断逻辑,最终alphabet_pos是空列表- 成员判断逻辑写法错误:
character in alphabet_low is True属于Python的链式比较,实际等价于(character in alphabet_low) and (alphabet_low is True),永远返回False,就算走到判断分支也不会把索引加入列表 - 结果拼接逻辑错误:遍历
alphabet_pos时,char本身就是你存入的字母位置数值,你却用它当下标去取alphabet_pos[char],很容易触发索引越界;同时你每次都是直接给result赋值而非追加字符串,最后只会保留最后一个值 - 冗余问题:大小写字母表每次循环都重复定义,完全没必要,也可以直接将字符转成统一大小写后只用一个字母表判断,简化代码
修复后的代码
def alphabet_position(text): # 字母表只定义一次即可 alphabet_low = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] alphabet_pos = [] # 直接用for循环遍历更简洁,不需要手写while计数 for character in text: # 跳过数字和非字母字符 if not character.isalpha(): continue # 统一转小写判断,不用分大小写两个逻辑 lower_char = character.lower() # 索引从0开始,所以要+1才是字母表对应位置 pos = alphabet_low.index(lower_char) + 1 alphabet_pos.append(str(pos)) # 直接用join拼接空格分隔的结果 result = ' '.join(alphabet_pos) print(result) alphabet_position("hello")
运行上述代码输入hello会输出8 5 12 12 15,符合预期。
内容的提问来源于stack exchange,提问作者Stenly
相关产品推荐
相关产品推荐

