2017-09-24 27 views
0

假設用戶輸入'hkuzasd7854hjd;鍵盤上的'asd'是彼此相鄰的字母。有沒有簡單的方法,我可以做一個循環,通過鍵盤上的3行按鍵,並檢查用戶輸入的值是否包含3個連續的字母?是否有可能使代碼返回一個整數值而不是對或錯?。謝謝。我如何檢查輸入的3個字母是否是連續的qwer鍵盤順序?

+1

到目前爲止已經取得了哪些嘗試?循環很簡單。定義您自己的密鑰列表也是 –

+0

返回的整數值的含義是什麼? – VPfB

回答

2

實際上有這麼幾個連續的3個字母的順序,你可以列出他們:

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) 

非常原始的,我知道。如果你願意,你可以製作一個準備壞套的功能。


更新功能計數所有出現(但如 「QWER」 被計算了兩次, 「QWE」, 「WER」):

def qwertz(string): 
    return sum(1 for bad in BAD3 if bad in string) 
+0

謝謝你這是非常有用的,我可能會最終使用這個,但你怎麼能做一個功能,準備壞3套? – Xotsu

+0

@ Xotsu查看@WonWillWill的代碼,循環內的'string [y:y + 3]'表達式包含您正在查找的數據。 – VPfB

+0

是否有可能使代碼返回值而不是真或假?所以每次字符串都在BAD3中。這段代碼有什麼不好,因爲我只是假設它代表3個值。 – Xotsu

0

這段代碼在列表中添加並找到了模式。列表「found」包含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 

指數上找到的第二子列表至於其他的鍵盤佈局,你將需要排爲他們要支持每一個單獨的列表。

希望這有點幫助。

+0

沒有必要使用正則表達式來執行簡單的子字符串檢查。只需使用'if x [y:y + 3] in string'。你的代碼中還有一堆不必要的東西,比如'if'條件下的括號和一些行結尾的分號。 Python不是C或Java,你不需要那種噪音!我還建議使用'enumerate'而不是手動增加'row_idx'。 – Blckknght

+0

對不起,我不是一個Python程序員我非常習慣於C/C++,但感謝您指出我會解決它。 –

相關問題