Я пытаюсь решить проблему для онлайн-судьи. Проблема состоит в том, чтобы создать программу, в которой пользователь вводит имя или любую строку, и если строка не найдена в списке или базе данных, она печатает «ОК», но если это повторение, то создайте новую запись с тем же именем пользователя вступил, но «1» конкатенат к нему. Например, если пользователь ввел abc, если повторная печать abc1, и если оно было повторено до печати abc2 и так далее.система регистрации с использованием python
Для этого я написал следующий код:
n=int(raw_input()) # number of testcases
counter=0
listaa=[] # list to save
comp=[]
for x in xrange(n):
listaa.append(raw_input())
for i in listaa:
if i not in comp:
print 'OK'
comp.append(i)
elif i in comp:
counter+=1
print "{}{}".format(i,counter)
Если я вход:
3 # number of test case
abc # user string or name or anything
abc # its repeated
def # new one
Я получаю этот странный вывод, который иллюстрирует эту проблему:
OK # first one and not repeat so print ok no problem
abc1 # it print abc1 ok no problem
abc2 # but why it print it twice
abc3 # for the third and new input it print abc3?
abc4 # and 4
OK # and finally ok that I want but the above I don't want and instead
# I want only "ok", and why it entered to elif clause if the first
# condition is true?
Я использую elif
. Из того, что я понимаю, если условие if
не соответствует действительности, оно переместилось на elif
. Это неправильно? У кого-нибудь есть решение? Я попытался использовать функцию, но когда я использую в ней return
, цикл останавливается.
Добавить печати statemen в начале для цикла ниже «для г в listaaa», распечатайте я и listaa и комп, то, возможно, вы будете работать что вы делаете неправильно. Также FYI ваш 'elif i in comp' может быть заменен на 'else', потому что тест i в comp 'является инверсией' i not in comp 'в выражении if. – barny