首页 > 解决方案 > 用于检查输入字符串是否可以用单行键盘编写的 Python 代码(例如:potter、flash)

问题描述

我正在尝试编写一个 Python 代码来检查给定的单词是否可以仅使用键盘的一行输入(例如 POTTER、EQUITY)。如果单词的字母来自单行,则打印“Yes”,否则打印“No”。

这是我的代码(没有得到想要的输出)

row1='qwertyuiop'
row2='asdfghjkl'
row3='zxcvbnm'
i=0
j=0
status='no'
st=input('enter a string : ')
if st[0] in row1:
    while(i<len(st)):
        while(j<len(row1)):
            if(st[i]==row1[j]):
                status='yes'
                i+=1
                j=0

            elif(j==(len(st)-1)):
                 status='no'
                 break
            else:
                j+=1
    j=0
    i=0

elif st[0] in row2:
     while(i<len(st)):
        while(j<len(row2)):
            if(st[i]==row2[j]):
                status='yes'
                i+=1
                j=0

            elif(j==(len(st)-1)):
                 status='no'
                 break
            else:
                j+=1
    j=0
    i=0
else: 
    while(i<len(st)):
        while(j<len(row3)):
            if(st[i]==row3[j]):
                status='yes'
                i+=1
                j=0

            elif(j==(len(st)-1)):
                 status='no'
                 break
            else:
                j+=1    
print(status)

标签: python-3.xif-statementwhile-loop

解决方案


我添加了一些对大写、数字和特殊字符的处理:

def keyboard_test(string, ignore_unk = True):
    string = string.lower()
    rows = ['qwertyuiop','asdfghjkl','zxcvbnm']
    # rows = ['!@#$%^&*()_+1234567890-=','qwertyuiop[]\\{}|','asdfghjkl;:"'+"'",'zxcvbnm,<.>/?']
    key_dict = {}
    for index, row in enumerate(rows):
        for i in row:
            if i in string:
                key_dict[i] = index

    string_char_rows = [key_dict[i] if i in key_dict else "Unk" for i in string]
    if ignore_unk:
        string_char_rows = [i for i in string_char_rows if i != "Unk"]

    # return len(set(string_char_rows)) <= 1 # returns True/False, likely more useful

    if len(set(string_char_rows)) <= 1:
        return "Yes"
    return "No"

如果它们都在一行中,则返回 Yes

keyboard_test("EQUITY")

Yes

推荐阅读