2016-07-08 16 views
2

Ich habe ein System mit QPushButtons, die wie eine Digicode Türen arbeiten soll. Jeder Button hat eine ID (Integer). Wenn die letzten Tasten, die Sie gedrückt haben, einem bestimmten Passwort entsprechen, passieren Dinge (wie die Tür geöffnet wird).Implementieren einer Warteschlange für ein digicode-ähnliches System

Ich denke über eine Warteschlange zu implementieren, mit einem Zeiger auf den letzten hinzugefügten Wert. Aber wie kann ich testen, ob das Passwort korrekt ist? Hier

ist der Code, den ich noch haben:

class MyQueue(): 
    def __init__(self, size, defaultValue=None): 
     self.size = size 
     self.content = [defaultValue]*size 
     self.end = self.size-1 
    def addItem(self, value): 
     self.end = (self.end+1)%self.size 
     self.content[self.end] = value 
    def checkCorrect(self, password): 
     pass #??? 

ich die Warteschlange füllen kann, size ist die Anzahl der Elemente, die gespeichert werden. Aber ich kann nicht überprüfen, ob das Passwort korrekt ist.

Antwort

2

Der Schlüssel ist, das Passwort rückwärts zu lesen, beginnend mit dem letzten Wert. Überprüfen Sie jedes Zeichen/jede Nummer im Passwort, wenn es korrekt ist. Wenn du das Passwort bis zum Ende lesen kannst, bist du gut. Hier ist, was ich mit gehen würde:

def checkCorrect(self, password): 
     pw = list(reversed(password)) 
     i = 0 
     j = self.end 
     if len(pw) > self.size: 
      return False 
     while True: 
      if pw[i] <> self.content[j]: 
       return False 
      else: 
       i += 1 
       j = (j-1)%self.size 
       if i == len(pw): 
        return True