Mam program, który wyciągnie listę z pliku i wyświetli listę nazw. Powie mi również, ile jest nazw. Utknąłem na tym, jak mogę skrócić nazwy, aby dodać je razem z nazwiskami z listy. Na przykład imię Jan A Doe jest pobierane z pliku zawierającego listę nazwisk z zadania. Chcę, żeby zawierał również inicjały jako skrót. W tym przypadku chcę, aby jako akronim obok nazwy było napisane „JAD”. Oto kod, który mam do tej pory:

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()

Utknąłem na motyce, aby dodać akronim (pierwszy, środkowy, ostatni) obok nazwy. Moja lista obejmuje łącznie 14 nazwisk.

1
Shawnphi 28 marzec 2020, 02:10

2 odpowiedzi

Najlepsza odpowiedź

Jeśli każda linia jest nazwiskiem osoby w postaci John A Doe, możesz to zrobić

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

Spowoduje to podzielenie nazwy w każdej spacji, a następnie przyjmie pierwszy znak każdej „części”. .upper() po prostu konwertuje to na wielkie litery, jeśli tego chcesz.

Następnie możesz po prostu wydrukować initials obok nazwy lub cokolwiek chcesz

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

Jeśli używasz Pythona 3.6 lub nowszego, przyjrzyj się używaniu f-stringów do drukowania - sprawiają, że formatowanie wydruku jest znacznie łatwiejsze niż łączenie ciągów, jak powyżej.

0
wstk 27 marzec 2020, 23:17

Możemy podzielić ciąg z nazwą na tablicę, a następnie zastosować mapę, aby pobrać pierwszy znak z każdego elementu tablicy, a na koniec użyćredukcji, aby połączyć skrócone litery.

import functools

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

Używając tej funkcji z Twoim kodem otrzymujemy ...

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()
0
SpaceKatt 27 marzec 2020, 23:17