Проверьте, является ли переменная точно такой же в строке файла-Tkinter - PullRequest
1 голос
/ 20 сентября 2019

Я пытался проверить, совпадает ли строка из записи с возможной строкой в ​​строке файла file.txt, который я создал.Как у меня сейчас, проблема в том, что он не ищет нужную строку, вместо этого, если я набираю "", он совпадает, потому что внутри txt есть пробелы, и если я набираю, например, "qw", он заполняет найти строкуqwpero.Вход в систему должен быть успешным, только когда он находит, например, строку «qepero».Вот часть моего кода, которая важна.Любая помощь будет принята с благодарностью.

def checkconnect():
   password_verify = passwordvar.get()

   with open('file.txt') as f:
       for line in f:
        if password_verify in line:
              global dwm
              global ip_1
              global ip_2
              ip_1 = line.split()[0]
              ip_2 = line.split()[1]
              dwm = line.split()[2]
              loginscreen()
       else:
               global fail_label
               fail_label = tk.Label(frame,text="Λάθος κωδικός-Προσπάθησε ξανά!",bg='#80c1ff')
               fail_label.pack()

И файл выглядит так:

2 3 101 4s3GSs
4 5 102 wqpkdw 
6 7 103 q21kow 
8 9 104 wqmc12  
10 11 105 qwdqwq 

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Проблема в этой строке if password_verify in line:.если password_verify - пустая строка или пробел, или любой другой символ в строке, это будет верно.Пароль должен быть последней записью в строке?как 4s3GSs?Тогда почему бы не проверить это явно?

def checkconnect():
    password_verify = passwordvar.get()

    with open('file.txt') as f:
        for line in f:
            my_list = line.split()
            global dwm
            global ip_1
            global ip_2
            ip_1 = my_list[0]
            ip_2 = my_list[1]
            dwm = my_list[2]
            if password_verify == dwm:
                loginscreen()
            else:
                global fail_label
                fail_label = tk.Label(frame, text="Λάθος κωδικός-Προσπάθησε ξανά!", bg='#80c1ff')
                fail_label.pack()
0 голосов
/ 20 сентября 2019

Надеюсь, я правильно понял ваш вопрос.

Итак, вы пытаетесь получить ТОЛЬКО совпадающие строки.так что если строка "foo", то она не должна совпадать с "fo"?

, если вы говорите:

line = "foo"
print("fo" in line)  # True
print("fo" == line)  # False
print("foo" in line)  # True
print("foo" == line)  # True

Таким образом, оператор in ищет, существует ли строка IN в строке.Когда оператор == проверяет, являются ли обе строки одинаковыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...