【问题标题】:Representing keyboard as 3D array将键盘表示为 3D 数组
【发布时间】:2015-12-27 20:52:07
【问题描述】:

希望你能帮忙!

以下是相关代码:

此代码将键盘初始化为 3d 数组:

KeyboardRow1 = ["`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="]
KeyboardRow2 = ["", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", ""]
KeyboardRow3 = ["", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", ""] 
KeyboardRow4 = ["", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/"]
KeyboardRow1S = ["~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+"]
KeyboardRow2S = ["", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "|"]
KeyboardRow3S = ["","A", "S", "D", "F", "G", "H", "J", "K", "L", ":", ""] 
KeyboardRow4S = ["", "Z", "X", "C", "V", "B", "N", "M", "<", ">", "?", ""]
Array2R = [KeyboardRow1, KeyboardRow2, KeyboardRow3, KeyboardRow4]
Array2S = [KeyboardRow1S, KeyboardRow2S, KeyboardRow3S, KeyboardRow4S]
Array3 = [Array2R, Array2S]

此代码要求用户输入一个字符串:

Password = getpass.getpass("Enter a password: ")

此代码查找密码的每个字符在数组中的位置,并将其在数组中的坐标值附加到 KeyboardPositions

i = 0
j = 0
k = 0
z = 0
KeyboardPositions = []

for z in range(0,PasswordLength):

    for i in range(0,1):

        if Password[z] == str(Array3[i][j][k]):
            KeyboardPositions.append((i,j,k))

        for j in range(0,2):

            if Password[z] == str(Array3[i][j][k]):
                KeyboardPositions.append((i,j,k))

            for k in range (0,12):

                if Password[z] == str(Array3[i][j][k]):
                    KeyboardPositions.append((i,j,k))

当我运行代码时,它在键盘的前两行运行良好。如果密码为 qwerty,则数组的内容(如预期)为 [(0,1,1),(0,1,2),(0,1,3),(0,1,4),( 0,1,5),(0,1,6)]。三个坐标中的第一个是是否保持shift,第二个是行,第三个是列。

如果我输入 asdfg、zxcvb 或 ASD 之类的内容,它将不起作用。 KeyboardPositions 将为空。第三排或第四排的任何东西以及任何需要轮班的东西都不起作用。

【问题讨论】:

  • 重复的if Password[z] == str(Array3[i][j][k]): KeyboardPositions.append((i,j,k))是做什么的?
  • Password[z] 检查密码中的每个字符,z 从索引 0 循环到密码长度。该部分检查字符是否在数组中,如果是:它将坐标(i,j,k)存储在 KeyboardPositions 中。它应该循环遍历 i , j 和 k 来搜索我猜的整个数组
  • 但它做同样的事情 3 次,在每个循环中重复。
  • 当它在第一个循环中执行时,只有 i 循环了 - j 和 k 仍然为 0。当它在第二个循环中执行时,i 和 j 都循环了 - k 仍然为 0。当它在最后一个循环中执行时,它们都已循环。这样,它检查 i、j 和 k 的所有排列。至少这就是我打算让它工作的方式......
  • 如果你只把它放在内部循环中一次,它仍然会做你想做的事。

标签: python arrays data-structures keyboard


【解决方案1】:

问题在于您的 range 参数。其中有几个错误。请记住,range(0, n)0n-1,不包括n 本身。所以range(0,1) 只包括0。对于range(0,2),我假设您想从0 迭代到3,包括range(0,4),或者只是range(4)

【讨论】:

  • 刚刚开始工作!非常感谢事实证明,最后一行的字符比其他行少,并且执行 range(12) 将其推到了边界之外。
猜你喜欢
  • 2016-10-20
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2015-12-01
  • 2021-05-07
  • 1970-01-01
相关资源
最近更新 更多