Python-код для проверки возможности ввода входной строки одной строкой клавиатуры (например, Potter, Flash) - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь написать код Python, чтобы проверить, можно ли набрать данное слово, используя только одну строку клавиатуры (например, POTTER, EQUITY). Выведите «Да», если буквы слова взяты из одной строки, и «Нет» в противном случае.

Вот мой код (не выводится желаемый результат)

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)

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Используя наборы, это можно сделать эффективно.

Набор символов на входе должен быть подмножеством некоторой строки.

def writable_in_one_line(word):
    rows = (
         set('qwertyuiop'),
         set('asdfghjkl'),
         set('zxcvbnm'))

    chars = set(word.lower())

    return any(chars <= row for row in rows)

Пример

word = input('Word: ')

print('Yes' if writable_in_one_line(word) else 'No')

выход

Word: POTTER
Yes

Если, как вы упомянули, вам не разрешено использовать set в вашем классе. Тогда есть менее производительное решение, использующее только строки.

def writable_in_one_line(word):
    rows = (
         'qwertyuiop',
         'asdfghjkl',
         'zxcvbnm')

    chars = word.lower()

    return any(all(c in row for c in chars) for row in rows)
0 голосов
/ 02 сентября 2018

Я добавил немного обработки для прописных букв, цифр и специальных символов:

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"

вернуть Да, если они все в одной строке

keyboard_test("EQUITY")

Yes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...