Вытащить список из файла и сократить имена - PullRequest
1 голос
/ 28 марта 2020

У меня есть программа, которая извлекает список из файла и выводит список имен. Это также скажет мне, сколько имен. Я застрял на том, как я могу сократить имена, чтобы добавить вместе с именами из списка. Например, имя John A Doe извлекается из файла со списком имен из задания. Я хочу, чтобы это также перечисляло инициалы как сокращение. Для этого экземпляра я хочу сказать «JAD» как аббревиатуру рядом с именем. Вот код, который у меня есть до сих пор:

def main():
      outfile = open("workersList.txt", 'r')

      workers = 0.0

      for line in outfile:
           workers = workers + 1
           print(line.rstrip("\n))

      print()
      print("Total number of workers is:",workers)

      outfile.close()

main()

Я застрял на мотыге, чтобы добавить акроним (Первый, Средний, Последний) рядом с именем. Мой список включает в себя 14 имен.

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Если каждая строка представляет собой имя человека в форме John A Doe, вы можете сделать

initials = "".join([namepart[0].upper() for namepart in line.split()])

. Это разделит имя на каждый пробел, а затем примет первый символ каждой «части». .upper() просто преобразует его в верхний регистр, если это то, что вы хотите.

Тогда вы можете просто напечатать initials рядом с именем или как вам нравится

print(initials + " " + line.rstrip("\n"))

Если вы Python 3.6 или выше, обратите внимание на использование f-строки для печати - они значительно упрощают форматирование печати, чем объединение строк, как указано выше.

0 голосов
/ 28 марта 2020

Мы можем разбить строку имени на массив, затем применить карту, чтобы получить первый символ из каждого элемента массива, и, наконец, использовать Reduce для объединения сокращенных букв.

import functools

def abbreviate_name(name):
    return str(functools.reduce(lambda a, b: a + b, map(lambda x: x[0], name.split())))

Использование этой функции с вашим кодом мы получаем ...

import functools

def abbreviate_name(name):
    return str(functools.reduce(lambda a, b: a + b, map(lambda x: x[0], name.split())))

def main():
      outfile = open("workersList.txt", 'r')

      workers = 0.0

      for line in outfile:
           workers = workers + 1
           print(abbreviate_name(line.rstrip("\n")))

      print()
      print("Total number of workers is:",workers)

      outfile.close()

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