Как заставить программу продолжать поиск другого имени пользователя в файле? - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь завершить процесс входа в мой код на Python в Repl.it. Он будет искать CSV-файл с именем «UDfile», чтобы подтвердить имена пользователей и пароли, чтобы затем получить доступ к созданной мной карточной игре. Вот как выглядит файл:

markd,12345
pltwo,67890
forhb,10\/3

Однако я создаю его для 2 пользователей. Вход в систему от первого лица работает нормально, пока вводимое мной имя пользователя выше имени пользователя второго. Но когда я пытаюсь ввести второе имя пользователя, правильное или нет, оно всегда говорит, что не распознает имя пользователя. Я подозреваю, что это не делает полный поиск. Как я могу провести тщательный поиск в этом CSV-файле, чтобы он позволил мне ввести пароль P2 и, следовательно, продолжить программу?

Я искал в stackoverflow что-то вроде «Как получить этокод, чтобы найти существующее имя пользователя, когда он говорит, что его там нет? "но я ничего не мог найти.

Я также пытался добавить

sys.exit

в конец

print («Имя пользователя не найдено»)

в user_findtwo (файл, пользователь), надеясь, что он тщательно найдет файл и завершит работу, только если он полностью не сможет его найти, но это немедленно завершит код после того, как программа сообщит, что она не найденаоднажды.

Наконец, я попробовал цикл while, чтобы сказать

while row[0] != usertwo:
 print("Username not found")
sys.exit()

Я надеялся, что он просто будет искать по всему текстовому файлу и говорить "Имя пользователя не найдено", пока не найдет имя пользователя второго плеера,но вместо этого просто бесконечно печатается «Имя пользователя не найдено».

import csv
import sys

def main():
  login()
  logintwo()
  show_menu()
  menu_choice = int(input("Welcome to the RYG card game! Press \"1\" and then \"Enter\" to play a game:"))
  options(menu_choice)

def login(): 
  with open("UDfile", "r") as file:
    file_reader = csv.reader(file)
    user_find(file_reader)
    file.close

def user_find(file):
  user()
  for row in file:
   if row[0] == user:
    print("Username is found:", user)
    user_found = [row[0], row[1]]
    pass_check(user_found)
    break
  else:
      print("Username not found")
      sys.exit()

def user():
  global user
  user = input("Player 1, enter your username (must be above player 2's desired name):")

def logintwo():
  with open("UDfile", "r") as file:
    file_reader = csv.reader(file)
    user_findtwo(file_reader, user)
    file.close

def user_findtwo(file, user):

  usertwo = input("Player 2 enter your name:")
  if usertwo == user:
    print("Usernames must be different. Restart the program.")
    sys.exit()
  else:
   for row in file:
      if row[0] == usertwo:
       print("Username is found:", usertwo)
       user_found = [row[0],row[1]]
       pass_checktwo(user_found)
       break
      else:
         print("Username not found")

def pass_check(user_found):
  x = True
  while x:
   user = input("Enter your password:")
   if user_found[1] == user:
    print("Password match.")
    x = False
   else:
    print("Password doesn't match.")
    sys.exit()

def pass_checktwo(user_found):
  y = True
  while y:
    usertwo = input("Player 2 enter your password:")
    if user_found[1] == usertwo:
      print("Password match.")
      y = False
    else:
      print("Password doesn't match.")
      sys.exit()

Смотрите фон для ожидаемых и фактических результатов.

1 Ответ

0 голосов
/ 08 ноября 2019

Не могли бы вы использовать этот метод для цикла по строкам? вы могли бы использовать len (csvFileArray), чтобы получить длину, сделать так, чтобы цикл был максимальным, чтобы избежать выхода за пределы индекса, и можно было бы передать ему функцию, как только он найдет то, что ему нужно (поэтому он не продолжает цикл после?)

https://stackoverflow.com/a/39629619

просто быстрая мысль

...