Создание имен пользователей в Python

avatar
dumb_guy
8 апреля 2018 в 04:29
792
2
2

У меня есть текстовый файл studentlist.txt, который выглядит следующим образом:

studentlist.txt

Sam Vimes  
Sam Flynn  
Sam Gamgee  
Sam Carter  
Sam Velo  
Sam Victory  
Sam Vega

У меня есть следующая программа на Python:

usernames = []

for line in open('studentlist.txt'):
  count = 1
  name = line.lower().split()
  surname = name[-1]
  username = ''.join(name[0:-1])
  username_w_surname = username + surname[0]
  username_w_surname_integer = username_w_surname + str(count)

  if username not in usernames:
    usernames.append(username)
  elif username_w_surname not in usernames:
    usernames.append(username_w_surname)
  else:
    count = count + 1
    usernames.append(username_w_surname_integer)
for entry in usernames:
  print (entry)

Какие выходы:

sam
samf
samg
samc
samv
samv1
samv1  

, когда он должен был вывести следующее:

sam
samf
samg
samc
samv
samv1
samv2

Выводит samv1 вместо samv2

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

Источник
Jacques Kvam
8 апреля 2018 в 04:33
0

При каких условиях следует увеличивать счет? При каких условиях следует сбросить счетчик?

Sruthi V
8 апреля 2018 в 04:43
2

Поместите строку count=1 вне цикла for (т.е. перед ним) Ваш код сбрасывает счетчик на 1 для каждой строки. Размещение count=1 вне цикла for фактически позволит увеличить счетчик

dumb_guy
8 апреля 2018 в 13:15
0

@SruthiV, это сработало отлично, большое спасибо.

Ответы (2)

avatar
Roushan
8 апреля 2018 в 04:58
4
usernames = []
count = 1 #put countoutside
for line in open('studentlist.txt'):

  name = line.lower().split()
  surname = name[-1]
  username = ''.join(name[0:-1])
  username_w_surname = username + surname[0]
  username_w_surname_integer = username_w_surname + str(count)

  if username not in usernames:
    usernames.append(username)
  elif username_w_surname not in usernames:
    usernames.append(username_w_surname)
  else:
    count = count + 1
    usernames.append(username_w_surname_integer)
for entry in usernames:
  print (entry)


sam
samf
samg
samc
samv
samv1
samv2
dumb_guy
8 апреля 2018 в 13:14
0

О, это прекрасно, это имеет смысл, большое спасибо.

avatar
Eric Jones
8 апреля 2018 в 05:21
2
usernames = []
count = 1

for line in open('studentlist.txt'):
    name = line.lower().split()
    if not name[0] in usernames:
        usernames.append(name[0])
    elif not name[0] + name[-1][0] in usernames:
        usernames.append(name[0] + name[-1][0])
    else:
        usernames.append(name[0] + name[-1][0] + str(count))
        count += 1

for entry in usernames:
    print(entry)