You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:12:37