Используя наборы, это можно сделать эффективно.
Набор символов на входе должен быть подмножеством некоторой строки.
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)