Python函数调试:如何筛选可由单排键盘按键组成的单词
解决键盘单排单词筛选问题
你的代码核心问题是判断逻辑完全错误:你当前是检查整个单词是否是某一行字符串的子串(比如word in first_row),这就只有当单词是那一行里连续的字符(比如"qwe")或者整行时才会被匹配,完全不符合“单词所有字母都来自同一行”的需求。另外你的代码存在缩进错误,函数内部的代码必须缩进,否则会触发语法报错。
下面是修正后的代码,附带详细说明:
def find_row(word_list): # 把每行字符转成集合,成员检查效率更高 first_row = set('qwertyuiop') second_row = set('asdfghjkl') third_row = set('zxcvbnm') new_list = [] for word in word_list: # 统一转小写,兼容大小写输入(比如"Hello"也能正确处理) lower_word = word.lower() # 先确定单词第一个字母所属的行 if lower_word[0] in first_row: target_row = first_row elif lower_word[0] in second_row: target_row = second_row elif lower_word[0] in third_row: target_row = third_row else: # 处理包含非字母的情况 print(f"Word '{word}' can't be made with one row") continue # 检查单词的所有字母是否都在目标行里 if all(char in target_row for char in lower_word): new_list.append(word) else: print(f"Word '{word}' can't be made with one row") return new_list
关键改动说明:
- 用集合存储行字符:集合的
in操作比字符串更快,适合频繁的成员检查。 - 统一转小写:避免因为单词大小写(比如"Apple"和"apple")导致的判断错误。
- 正确的判断逻辑:先通过单词的第一个字母确定目标行,再用
all()函数检查单词的每一个字母是否都属于该行,这才符合“仅用单排按键组成”的要求。 - 修复缩进错误:函数内部的代码必须缩进,否则Python解释器会报错。
测试示例:输入["Hello", "Alaska", "Dad", "Peace"],会返回["Alaska", "Dad"],这两个单词的所有字母都来自第二行(asdfghjkl)。
内容的提问来源于stack exchange,提问作者Gavin Raccoon
相关产品推荐
相关产品推荐

