title: Checking a string for adjacent characters on the keyboard
body: <p>I'm trying to check consecutive characters in a string to see if they are adjacent on the keyboard. It's part of a program that I am writing to assess password strength.</p>
  
  <p>I have this code that initializes the keyboard as an array:</p>
  
  <pre><code>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 = ["~", "!", "@", "#", "$", "%", "^", "&amp;", "*", "(", ")", "_", "+", ""]
  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", "&lt;", "&gt;", "?", "", "", ""]
  Rows = [KeyboardRow1, KeyboardRow2, KeyboardRow3, KeyboardRow4, \
          KeyboardRow1S, KeyboardRow2S, KeyboardRow3S, KeyboardRow4S]
  </code></pre>
  
  <p>Then I have this function that turns each character of an entered password into coordinates inside the keyboard array:</p>
  
  <pre><code>def ConvertToCoordinates(Password):
  
      Coordinates = []
      for c in Password:
          for i, r in enumerate(Rows):
              try:
                  Coordinates.append((i % 4, r.index(c)))
              except:
                  pass
      return Coordinates
  </code></pre>
  
  <p>Finally, this is the function that checks for adjacency - where I need help:</p>
  
  <pre><code>def CheckForAdjacency(Coordinates):
  
      Adjacent = 0
      for pairs in combinations(Coordinates, 2):
          if (abs(pairs[0][0] - pairs[1][0]) == 1) \
             and (abs(pairs[0][1] - pairs[1][1]) == 1):
              Adjacent += 1
      return Adjacent
  </code></pre>
  
  <p>The above function checks each character in a string in relation to each other, as opposed to only characters that are next to each other in the string.</p>
  
  <p>For example, I would want qwerty to return 5 adjacent characters and qetwr to return 0. If qwerty is the password, the function does indeed return 5. However, if qetwr is the password it also returns 5; it checks all the characters instead of characters next to each other.</p>
  
  <p>How can I make it check just characters next to each other in the string? I know that the problem comes from the use of "for pairs in combinations" , I think that checks for all possible configurations and pairings. </p>