Элемент из списка не будет правильно преобразован в строку - PullRequest
0 голосов
/ 20 декабря 2018

Я работал над кодом входа и регистрации, который не подключен к облаку.Чтобы войти, вы должны ввести имя пользователя и пароль, и он вернет вас с простым;«Привет»

Я пытался преобразовать элемент в строку, но я не смог найти ничего другого в Интернете, чтобы помочь мне.Возможно, программа, которую я использую, не отображает вывод правильно.

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 голосов
/ 20 декабря 2018

Вы уже используете обычную конкатенацию строк для добавления точки.Почему бы просто не сделать это с именем?Вам также не нужно str впереди, так как список уже является списком строк, и поэтому рассматриваемый элемент уже является строкой.

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

>>>Would you like to login or signup? login
>>>Enter <username,password>: jdoe,tractor5
>>>Hello John.
0 голосов
/ 21 декабря 2018

Похоже, вы смешиваете python 2 и 3. raw_input id python 2, а в Python 3 это только ввод.Кроме того, вы должны использовать тормоз, чтобы вырваться из петли в соответствующих местах.У вас есть бесконечный цикл.В последнее время код печатает «Привет Джон» для меня, как и положено.Однако вам не нужно преобразовывать элемент списка в строку, это уже строка (поэтому возвращает одно и то же значение с преобразованием или без него.

Я думаю, что причина, по которой он вам дает ('Hello', 'Джон ') в качестве выходных данных, потому что он печатает скобки сами (но это не имеет логического смысла, потому что они не включены в строку. В любом случае, обратите внимание, что оператор печати python 2 выглядит следующим образом: print "это должно быть напечатано". Тамне содержит скобок. Используйте версию Python, которую вы используете, и что ваш код соответствует версии.

Еще одно примечание, если вы не используете базу данных, возможно, используйте словарь Python вместо списка PythonОн не только быстрее и эффективнее использует память, но и облегчает работу с ним. Это может быть что-то вроде {username: ("name", "password")}, комбинация словаря и кортежа или более явный {username:{name: "name", password: "password"}}, который сохраняет данные пользователя в словаре внутри dectionary содержащий всех пользователей.

0 голосов
/ 20 декабря 2018

Вы должны разбить свою строку на ',' и проверить пароль имени пользователя по словарю вроде {имя пользователя: пароль}, или использовать базу данных или что-то еще.Проверка строки, как вы делаете сейчас, является своего рода ограничением и громоздкостью.

Но чтобы просто исправить вывод, вы можете изменить свой отпечаток на этот

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

, используя строку.format () также выполняет все преобразования и тому подобное, чтобы вы могли передавать числа или что угодно, а не только имя.Подробнее Здесь

и вы получите ожидаемый результат.

output =

Хотите войти или зарегистрироваться?логин
Введите: jdoe, трактор5
Привет Джон.

...