让我们说用户输入'hkuzasd7854hjd;键盘上的''asd'是彼此相邻的字母。有没有一种简单的方法可以创建一个循环,通过键盘上的3行键并检查用户输入的值是否包含3个连续字母?是否可以使代码返回整数值而不是对或错?。谢谢。
答案 0 :(得分:2)
实际上连续三个字母的序列很少,你可以列出它们:
BAD3 = {
"qwe", "wer", "ert", "rty", "tyu", "yui", "uio", "iop",
"asd", "sdf", "dfg", "fgh", "ghj", "hjk", "jkl",
"zxc", "xcv", "cvb", "vbn" }
def qwertz(string):
return any(bad in string for bad in BAD3)
非常原始,我知道。如果您愿意,可以制作一个准备BAD集的功能。
计算所有事件的更新函数(但例如“qwer”计算两次,“qwe”,“wer”):
def qwertz(string):
return sum(1 for bad in BAD3 if bad in string )
答案 1 :(得分:0)
这段代码在列表中添加并找到模式。列表“找到”包含4个子列表,每个子列表代表键盘上的一行。因此,“qwe”将位于索引为1的第二个子列表中。
rows = ["1234567890-=",
"qwertyuiop",
"asdfghjkl;'",
"\zxcvbnm,."]
string = "qwertyytruasddffdsgs4rewewerw";
found = [[],[],[],[]]
for row_idx,x in enumerate(rows):
for y in range(0, len(string)-3):
#Forward match
if string[y:y+3] in x:
found[row_idx].append(string[y:y+3])
#Backwards match
if (string[y:y+3])[::-1] in x:
found[row_idx].append(string[y:y+3])
print found
对于其他键盘布局,您需要为每个键盘布局提供一个单独的行列表。
希望这有点帮助。