python-3.x - 用于检查输入字符串是否可以用单行键盘编写的 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)
解决方案
我添加了一些对大写、数字和特殊字符的处理:
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
推荐阅读
- vbscript - 如何制作给出错误 800A03EC“文件已移动或删除”的 VBS 文件并忽略该错误?
- python - Python:做 MNLogit,输出只显示目标变量的 7 个类中的 6 个
- python - plot_confusion_matrix() 缺少 1 个必需的位置参数:'y_true'
- ios - Flutter 气泡聊天,在气泡外显示时间戳和刻度
- html - 如何在 HTML 中链接来自不同文件夹的文件?
- java - updateApp 小部件不适用于 remoteView
- javascript - 根据两周拆分日期范围(直到月中)
- kivy - Kivy 编译器网站,将发送已编译的 apk
- firebase - 从 google auth token 创建 firebase auth
- python - 数据框转移python熊猫