【问题标题】:python: my code doesn't loop into the for loop to read the csvpython:我的代码没有循环到for循环来读取csv
【发布时间】:2021-01-28 10:02:05
【问题描述】:

我正在尝试创建一个代码,其中两个预先存在的用户可以登录到一个帐户,并且它是从一个 csv 文件获得授权的 - 然后这些玩家可以玩骰子游戏。我已经完成了游戏,但是我的代码没有读取包含读取 csv 信息的循环。我尝试了许多不同的方法,包括仅读取行、拆分行以及许多其他操作。我的代码不返回任何错误,而只是运行代码,而不对用户进行身份验证。我需要代码来搜索用户名,如果存在,请检查右边框中的密码是否与代码中给出的密码匹配,打印用户已登录。如果用户和密码不匹配,让用户再输入两次密码,如果密码仍然不匹配打印他们将无法登录。

任何帮助将不胜感激,谢谢。

import csv #importing my csv with my authenticated users in
import random #importing random to use to generate a random number



def login1(): #creating a function so i can do the login cycle again
    loggedin1 = False #making user1 not logged in
    global username
    username = input("Please enter your username:")# ask the users username    
    password = input("Please enter your password:")#ask user for password
    with open("game.csv","r+")as csvfile: # opening my csvfile
        datareader = csv.reader(csvfile, delimiter=',') #reading my csv file
        for row in datareader:
            user = line.split(",")
            user = user[0]
            print(user) # to test if it is running this 
            if username == user:
                print("User name exists")
                for row in datareader:
                    passw = line.split(",")
                    passw = passw[0]
                    if password == passw:
                        print("hello",username,"you are logged in")
                    else:
                        password =input("Password is wrong, please try again")            
            elif userexists == False:
                print("no username found, please enter the username again")
                login1()
    return(username)
login()

【问题讨论】:

  • 请将您的代码精简到重现您的问题所需的绝对最低限度。您的输入文件的小样本也可能会有所帮助,
  • 嗨,谢谢,我现在已经删除了我的代码,很抱歉我是新手。我的 csv 目前在第一个框中只有一个单词,因为我正试图在添加更多用户之前让它工作
  • 因为您已经在使用 csv 阅读器,所以不需要 line.split(",")line 在哪里定义?)...读者应该为您这样做。你可以用print(row) 替换这一行,看看你会得到什么。还有:你有没有调用过login1() 函数?
  • 谢谢你,我已经删除了那行并按照你说的替换了它,但它仍然不打印'row',有什么想法吗?是的,对不起,当我剥离我的代码时,我一定是不小心删除了它

标签: python


【解决方案1】:

始终以列表或字典的形式保存您的数据,因为它们更易于操作且是可变的。 data=[username,password] or {'username':username,'password':password}

读取 csv 文件:

def login():
    f=open('data.csv','r')
    reader=csv.reader(f)
    u=input('Username: ')
    p=input('Password: ')
    for row in reader:
        try:
            if row[0]==u and row[1]==p:
                print('SUCCESS')
                break
        except EOFError:
            print('FAILED')
            break

每当用户登录失败时再次调用该函数。

【讨论】:

  • 嗨,谢谢你,我已经尝试过你的建议来阅读我的 csv 文件。它不返回任何错误,但不验证用户身份,并打印成功或失败。这与我使用原始代码时遇到的问题相同。关于它为什么不运行 for 循环的任何想法?
  • 您只需要稍微编辑基本代码即可获得任何错误:“找不到用户”、“密码错误”。如果需要任何帮助,请让我知道
  • 嗨,我大致需要做什么才能得到“未找到用户”和其他错误?
【解决方案2】:

根据您的要求:

def login():
    f=open('data.csv','r')
    reader=csv.reader(f)
    u=input('Username: ')
    p=input('Password: ')
    for row in reader:
        try:
            if row[0]==u:
                if row[1]==p:
                    print('SUCCESS')
                    break
                else:
                    print('INCORRECT PASSWORD')
        except EOFError:
            print('USER NOT FOUND')
            break

【讨论】:

  • 嗨,恐怕这仍然无法按我的意愿运行 - 如果登录成功与否,它仍然不会打印。任何想法为什么?
猜你喜欢
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 2021-10-06
  • 1970-01-01
相关资源
最近更新 更多