Coding for KidsCoding for Kids
Poziomy KreatywneWyzwaniaPrzewodnik dla Nauczycieli
Głosuj na funkcje
Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom

Moduły łańcuchów znaków i czasu
Moduł łańcucha znaków

Cel

Skompiluj dane aplikacyjne i wyślij listy odpowiedzi, używając modułu string.

Teraz, gdy materiały do budowy nowej farmy zostały uwzględnione, nadszedł czas, aby zwrócić uwagę na nowych pracowników farmy. Mamy kilka listów, które trzeba wysłać w sprawie aplikacji o pracę, co naturalnie wymagałoby dużo pisania, jednak możemy użyć modułu string, aby temu zaradzić – umożliwi nam to tworzenie szablonów i formatowanie tekstu, co ułatwi operacje na dużych blokach tekstowych.

Importowanie modułu string tym razem przebiega nieco inaczej niż w przypadku innych modułów, ponieważ zaimportujemy klasy rozszerzające moduł, a całość zostanie wykonana w następujący sposób:

import string from string import Template from string import Formatter

Daje nam to dostęp do samego modułu, a także do klas szablonów i formatowania, które zawierają własne funkcje. Do naszych celów użyjemy następujących funkcji i klas:

  • string.capwords(): Funkcja ta zamienia słowa w łańcuchu na tak sformatowane, że pierwsza litera każdego słowa jest wielka, a pozostałe małe, niezależnie od oryginalnego formatu łańcucha.
  • Template(): Jest to klasa łańcuchów znaków, wykorzystywana do tworzenia obiektu szablonu. Używa funkcji substitute(), która pozwala ustawić łańcuch znaków i zaznaczyć miejsce za pomocą znaku $, gdzie można podmienić dane. Pozwala to na tworzenie modularnych łańcuchów, których możemy używać w dowolnym momencie.
  • Formatter(): Jest to klasa łańcuchów znaków, używana do formatowania lub składania łańcuchów. Działa w podobny sposób jak klasa Template(), ale jest bardziej zaawansowana i lepiej sprawdza się przy większych sekwencjach tekstowych. Używa funkcji format(), która pozwala ustawić łańcuch znaków i wstawić do niego dane przy użyciu {}.

Zacznij od przejścia do znacznika X oświetlonego światłem i użycia funkcji read() stojąc naprzeciwko szafki na dokumenty, co umożliwi dostęp do folderów o nazwach różnych aplikantów. Foldery te występują jako trzy stałe listy nazwane: folder_a, folder_b oraz folder_c.

Przejdź do ciemnego znacznika X na zielonym dywanie i stan przed biurkiem. Utwórz trzy listy o nazwach: names_a, names_b oraz names_c. Użyj wyrażeń-listowych z funkcją string.capwords(), aby sformatować imiona z prawidłową kapitalizacją. Sparuj listy ze stałymi, które używają tych samych liter w swojej nazwie, na przykład dla names_a użyj string.capwords() z folder_a, w ten sposób: names_a = [string.capwords(x) for x in folder_a]. Użyj tego samego wzoru, aby wypełnić names_b oraz names_c.

Utwórz listę o nazwie all_names i scałkuj trzy listy imion, tak jak to: all_names = names_a + names_b + names_c. Połączone listy zostaną w ten sposób zestawione do jednej, większej listy. Następnie użyj funkcji Pythona join(), która połączy wszystkie elementy listy w jeden łańcuch znaków. Możesz również określić, co ma się pojawiać pomiędzy poszczególnymi elementami listy, deklarując to w cudzysłowie, na przykład: all_names = ", ".join(all_templates). Użyj wstępnie napisanej funkcji write() z listą all_names, aby zapisać wszystkie imiona w poprawnej formie kapitalizacji.

Następnie przejdź do złotego znacznika X i stan przed biurkiem, tutaj utworzymy szablony. Mamy dwa wstępnie zdefiniowane obiekty szablonów o nazwach red_templates i blue_templates:

red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")

Każdy z tych szablonów zawiera unikalną wiadomość, mają jednak jedną wspólną cechę, a mianowicie placeholder oznaczony jako $name. Symbol $ służy do zaznaczenia miejsca, które może zostać zastąpione wybranym ciągiem znaków, w tym przypadku – imieniem, zgodnie z tytułem. Jeśli nie podmieni się żadnej wartości, szablon pozostawi placeholder w ciągu znaków. Aby uzupełnić tę operację, utwórz listę o nazwie all_templates.

Utwórz pętlę for z czterema iteracjami, dzięki czemu zamienimy imiona w trzech listach na szablony z wstawionymi imionami. Na przykład, zastosujemy red_template do listy names_a. Użyj funkcji substitute() z klasy Template(), aby zamienić placeholder $name w szablonie na imiona z listy.

for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])

Postępuj podobnie z listami names_b oraz names_c: dla names_b użyj red_template, a dla names_c użyj blue_template.

Gdy wszystkie listy imion zostaną uzupełnione o nowe szablony, nadszedł czas na ich przegląd. Utwórz nową listę o nazwie all_templates i połącz w niej wszystkie listy imion, w ten sposób: all_templates = names_a + names_b + names_c. Następnie, użyj funkcji join() tak jak wcześniej, aby połączyć wszystkie szablonizowane imiona w czytelną formę, w ten sposób: all_templates = "\n".join(all_templates). Użyj wstępnie napisanej funkcji write() z all_templates, aby zapisać wszystkie nagłówki dla różnych imion.

Kolejnym krokiem jest przejście do ciemnego znacznika X na czerwonym dywanie i stan przed biurkiem, gdzie będziemy formatować i zapisywać pierwszy zestaw listów. Zacznij od utworzenia dwóch obiektów formatera o nazwach red_1 i red_2 z oznaczeniem klasy, tak jak to: red_1 = Formatter() oraz red_2 = Formatter(). Do sporządzenia listów utwórz listę o nazwie red_letters.

Podobnie jak wcześniej, stworzymy pętlę for z czterema iteracjami, podczas których wykorzystamy dwa zestawy wstępnie przygotowanych łańcuchów znaków, które będą formatowane za pomocą funkcji format() oraz do których wstawiane będą zmienne z imionami. Te sformatowane łańcuchy zostaną dodane do listy red_letters, tworząc kompleksową listę listów, które zostaną wysłane. Na przykład, obiekt formatera red_1 zostanie sformatowany z wykorzystaniem listy names_a i dodany do listy red_letters.

for x in range(4): red_letters.append(red_1.format( "{} Orientation will begin next week, please report to the office..." , names_a[x]))

Postępuj analogicznie z obiektem formatera red_2, używając jego wstępnie zdefiniowanego łańcucha znaków i dodając listę names_b do pętli. Gdy wszystko zostanie ustawione, użyj funkcji join() z listą red_letters, aby połączyć dane w jeden plik, tak jak to: red_letters = "\n".join(red_letters). Następnie użyj funkcji write() z red_letters, aby zapisać wszystkie sformatowane listy, które mają zostać wysłane.

Na koniec przejdź do ciemnego znacznika X na niebieskim dywanie i stan przed biurkiem, gdzie będziemy formatować i komponować ostatni zestaw listów. Podobnie jak wcześniej, utwórz dwa obiekty formatera o nazwach blue_1 oraz blue_2 z oznaczeniem klasy, tak jak to: blue_1 = Formatter() oraz blue_2 = Formatter(). Utwórz listę blue_letters, aby sformatować i stworzyć wszystkie listy.

Ponownie utwórz pętlę for z czterema iteracjami i użyj wstępnie zdefiniowanych łańcuchów znaków do formatowania list imion oraz dodawania ich do listy blue_letters za pomocą funkcji format(). W tym przypadku sparuj obiekt blue_1 z listą names_c oraz obiekt blue_2 z listą names_b. Wszystko to zostanie wykonane w taki sam sposób, jak przy czerwonym dywanie, lecz z użyciem innych wartości, ukazując wszechstronność stosowania formatów i szablonów. Po zakończeniu użyj funkcji write() z blue_letters, aby zapisać ostatnie listy i ukończyć poziom.

Księga Kodów