列表中的元素无法正确转换为字符串

时间:2018-12-20 17:22:51

标签: python python-2.x

我一直在研究未连接到云的登录和注册代码。要登录,您必须输入用户名和密码,它将以简单的方式返回给您。 “你好,”

我曾尝试将元素转换为字符串,但找不到任何其他在线帮助我的东西。可能是我使用的程序无法正确显示输出。

inorup=""
newuser=""
users=["jdoe,tractor5","carrey1,1997","admin,56f67dk2997m"]
firstnuser=["John","Carrey","Frederick"]

while inorup != "login" or inorup != "signup":
    inorup=raw_input("Would you like to login or signup? ")
    if inorup=="login":
        userpass=raw_input("Enter <username,password>: ")
        if userpass in users:
            userpassfnamepos=int(users.index(userpass))-3
            print("Hello",str(firstnuser[userpassfnamepos])+".")

#Returning:
Would you like to login or signup? login
Enter <username,password>: jdoe,tractor5
('Hello', 'John')

#Expected Return:
Would you like to login or signup? login
Enter <username,password>: jdoe,tractor5
Hello John.

3 个答案:

答案 0 :(得分:1)

您应该在','上分割字符串,并对照{username:password}之类的字典检查用户名密码,或者使用数据库或其他工具。像现在一样检查字符串是一种限制和笨拙。

但是要固定输出,您可以将打印内容更改为此

print("Hello {}.".format(firstnuser[userpassfnamepos]))

使用string.format()还可进行所有转换,因此您可以传递数字或任何您想要的内容,而不仅仅是名称。更多信息Here

,您将获得预期的输出。

输出=

  

您要登录还是注册?登录
  输入:   jdoe,tractor5
  约翰,你好。

答案 1 :(得分:0)

您已经在使用普通的字符串连接来添加句点。为什么不只使用名称呢?您也不需要前面的str,因为该列表已经是一个字符串列表,因此所涉及的元素已经是一个字符串。

print("Hello" + " " + firstnuser[userpassfnamepos] + ".")

>>>Would you like to login or signup? login
>>>Enter <username,password>: jdoe,tractor5
>>>Hello John.

答案 2 :(得分:0)

好像您正在混合使用python 2和3。raw_input id python 2,在Python 3中它只是输入。同样,您应该在适当的地方使用制动器使回路脱离。您有一个无限循环。最近,代码正按预期为我打印“ Hello John”。但是,您不必将list元素转换为string,它已经是一个字符串(因此,无论是否进行转换,都返回相同的值。

我认为它为您('Hello','John')提供输出的原因是因为它自己打印了括号(但这在逻辑上是不合理的,因为它们不包含在字符串中。无论如何,请注意python 2 print语句如下:print“ this is be print”。不带括号。使用您正在使用的python版本,并且您的代码与版本匹配。

还有一点要注意,如果您不使用数据库,则可以使用python字典而不是python列表。它不仅速度更快,内存效率更高,而且使用起来也更容易。它可以是类似{username:(“ name”,“ password”)}的字典和元组的组合,也可以是更明确的{username:{name:“ name”,password:“ password”}}},这样可以保存在包含所有用户的词典中的字典中将sigle的用户数据。