Найти, если вход находится в списке - PullRequest
0 голосов
/ 24 марта 2019

Попытка получить ввод от пользователя (который принимает компьютер), а затем проверяет, находится ли он в списке. После этого он начинает играть в игру. Любой совет?

if answer == "2":
    f = open("users.txt", "r")    
    x = str(input("Please enter a valid username: "))
    for line in f:
         usernab = print(line.strip())
         if (x) in (usernab):
                for x in range(0,5):
                       #Do something.

Вот вывод:

Traceback (most recent call last):
File "E:/NEA/Project/backup.py", line 20, in <module>
if (x) in (usernab):
TypeError: argument of type 'NoneType' is not iterable

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Прежде всего, посмотрите на этот ответ при чтении файла построчно. Как читать большой файл построчно в Python

Правильный, полностью Pythonic способ чтения файла следующий:

with open(...) as f:
    for line in f:
        # Do something with 'line'

Насколько я понимаю, вы пытаетесь проверить, есть ли имя пользователя, введенное пользователем, в списке и затем #Do something.

Первая проблема заключается в том, что usernab не получает никакого значения от usernab = print(line.strip()), поскольку print() ничего не возвращает. Вместо этого вы должны присвоить usernab строку и затем напечатать ее:

usernab = line.strip()
print(usernab)

Вторая проблема заключается в том, что вы пытаетесь использовать x witch - это строка для итерации в диапазоне целых чисел. Вы в основном говорите: «Для каждой строки в диапазоне от 0 до 5, сделайте что-нибудь». Вы должны использовать другую переменную.

Кроме того, if (x) in (usernab) проверит, содержит ли usernab x. В зависимости от того, что вы хотите сделать, вы можете изменить это.

Этот код компилируется под Python 3.7. Это добавит 1 к i пять раз, каждый раз, когда x будет найден в строке.

f = open("users.txt", "r")

x = str(input("Please enter a valid username: "))

i=0

for line in f:

     usernab = line.strip()
     print(usernab)

     if (x) in (usernab):
            for j in range(0,5):
                i+=1

print(i)
0 голосов
/ 24 марта 2019

Есть несколько пунктов, кроме только ответа:

a) Python input () по умолчанию возвращает строку, вам не нужно конвертировать с помощью преобразования строки.
б) Есть лучший способ прочитать файл на python, используя ключевое слово- 'with'.
c) Вы проверяете цикл после проверки условия с той же переменной - 'x'. Кажется неправильным!
г) ответить на вопрос: функция strip возвращает None, и вы пытаетесь перебрать ее, поэтому ошибка. Вместо этого вы можете напрямую заменить свой код следующим образом:

answer = "2"
if answer == "2":
    f = open("users.txt", "r")    
    x = input("Please enter a valid username: ")
    for line in f:

         if (x) in (line.strip()):
                for i in range(0,5):
                    print('Hi',x)

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