Coding for KidsCoding for Kids
ระดับสร้างสรรค์ความท้าทายคู่มือครู
โหวตสำหรับฟีเจอร์
หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ

โมดูลสตริงและเวลา
โมดูลสตริง

จุดมุ่งหมาย

รวบรวมข้อมูลใบสมัครและส่งจดหมายตอบกลับโดยใช้โมดูล string

ตอนนี้เมื่อวัสดุสำหรับการก่อสร้างฟาร์มใหม่ได้รับการบันทึกแล้ว ถึงเวลาที่เราจะหันความสนใจไปที่พนักงานใหม่สำหรับฟาร์ม เรามีจดหมายหลายฉบับที่ต้องส่งออกสำหรับการสมัครงาน ซึ่งโดยธรรมชาติต้องใช้การเขียนจำนวนมาก แต่เราสามารถใช้โมดูล string เพื่อชดเชยในส่วนนี้ ทำให้เราสามารถสร้างแม่แบบและจัดรูปแบบข้อความเพื่อให้ง่ายต่อการจัดการข้อความจำนวนมากได้

การนำเข้าโมดูล string ครั้งนี้จะแตกต่างจากโมดูลอื่นเล็กน้อย เนื่องจากเราจะนำเข้าคลาสที่ขยายความสามารถของโมดูล และจะถูกดำเนินการในลักษณะดังนี้:

import string from string import Template from string import Formatter

สิ่งนี้ทำให้เราสามารถเข้าถึงโมดูลเองและเข้าถึงคลาสแม่แบบและการจัดรูปแบบที่มีฟังก์ชันของตัวเอง สำหรับวัตถุประสงค์ของเรา เราจะใช้ฟังก์ชันและคลาสดังต่อไปนี้:

  • string.capwords(): ฟังก์ชันนี้จะเปลี่ยนคำในสตริงให้มีการใช้ตัวพิมพ์ใหญ่ที่ถูกต้อง โดยทำให้ตัวอักษรตัวแรกของคำเป็นตัวพิมพ์ใหญ่และส่วนที่เหลือเป็นตัวพิมพ์เล็ก โดยไม่คำนึงถึงการจัดรูปแบบของสตริง
  • Template(): นี่คือคลาสสำหรับสตริง ใช้เพื่อสร้างวัตถุแม่แบบ โดยใช้ฟังก์ชัน substitute() ซึ่งช่วยให้คุณตั้งค่าสตริงและระบุจุดที่จะเปลี่ยนข้อมูลโดยใช้สัญลักษณ์ $ เพื่อสลับข้อมูล วิธีนี้ช่วยให้คุณสร้างสตริงในรูปแบบโมดูลาร์ที่สามารถนำไปใช้ได้ทุกเมื่อน
  • Formatter(): นี่คือคลาสสำหรับสตริง ใช้เพื่อจัดรูปแบบหรือประพันธ์สตริง ทำงานในลักษณะที่คล้ายกับคลาส Template() แต่มีความสามารถที่แข็งแกร่งและเหมาะสำหรับสตริงที่มีลำดับยาว ใช้ฟังก์ชัน format() ซึ่งช่วยให้คุณตั้งค่าสตริงและแทรกข้อมูลสตริงโดยใช้ {}

เริ่มต้นด้วยการเดินไปที่เครื่องหมาย X สีอ่อนและใช้ฟังก์ชัน read() ในขณะที่หันหน้าไปที่ตู้เก็บเอกสาร สิ่งนี้จะช่วยให้คุณสามารถเข้าถึงโฟลเดอร์ที่มีชื่อของผู้สมัครต่าง ๆ โฟลเดอร์เหล่านี้มีอยู่ในรูปแบบของค่าคงที่ลิสต์สาม (3) ชุด ได้แก่: folder_a , folder_b และ folder_c

เดินไปที่เครื่องหมาย X สีเข้มบนพรมสีเขียวและหันหน้าไปที่โต๊ะ สร้างลิสต์สาม (3) ชุดที่เรียกว่า: names_a , names_b และ names_c ใช้ list comprehensions กับฟังก์ชัน string.capwords() เพื่อจัดรูปแบบการใช้ตัวพิมพ์ใหญ่ที่ถูกต้องสำหรับชื่อ จับคู่ลิสต์กับค่าคงที่ที่มีตัวอักษรเดียวกันในชื่อ เช่น สำหรับ names_a ให้ใช้ string.capwords() กับ folder_a ดังนี้: names_a = [string.capwords(x) for x in folder_a] ใช้สูตรเดียวกันเพื่อเติมข้อมูลให้กับ names_b และ names_c

สร้างลิสต์ที่ชื่อ all_names และรวมลิสต์ชื่อทั้งสาม (3) เข้าด้วยกัน ดังนี้: all_names = names_a + names_b + names_c สิ่งนี้จะรวมลิสต์ทั้งหมดเข้าด้วยกันเป็นลิสต์ที่ใหญ่ขึ้น จากนั้นใช้ฟังก์ชัน join() ของ Python เพื่อรวมรายการในลิสต์ทั้งหมดเป็นสตริง คุณยังสามารถระบุสิ่งที่จะวางระหว่างแต่ละรายการในลิสต์ได้โดยระบุไว้ในเครื่องหมายคำพูด เช่นนี้: all_names = ", ".join(all_templates) ใช้ฟังก์ชัน write() ที่เขียนไว้ล่วงหน้ากับลิสต์ all_names เพื่อบันทึกชื่อทั้งหมดในรูปแบบการใช้ตัวพิมพ์ใหญ่ที่ถูกต้อง

ต่อไป ให้เดินไปที่เครื่องหมาย X สีทองและหันหน้าไปที่โต๊ะ ที่นี่เราจะตั้งค่าแม่แบบ เราจะมีวัตถุแม่แบบที่เขียนไว้ล่วงหน้า 2 ชุด ได้แก่ red_templates และ blue_templates:

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

แม่แบบแต่ละอันมีข้อความเฉพาะตัว แต่ทั้งสองอันมีสิ่งที่เหมือนกันคือตัวแทน placeholder ที่มีป้าย $name สัญลักษณ์ $ ใช้เพื่อระบุ placeholder ที่สามารถแทนที่ด้วยสตริงที่คุณเลือก ในกรณีนี้อย่างที่ชื่อบอกไว้ว่าเป็นชื่อ หากไม่มีการแทนที่ค่าใด ๆ แม่แบบก็จะใช้ placeholder ในสตริงนั้นเอง เพื่อเสริมสิ่งนี้ ให้สร้างลิสต์ที่ชื่อ all_templates

สร้างลูป for ที่มีสี่ (4) รอบ ด้วยวิธีนี้เราจะเปลี่ยนชื่อในลิสต์ชื่อทั้งสาม (3) ด้วยแม่แบบที่มีชื่อรวมอยู่ด้วย ตัวอย่างเช่น เราจะใช้ red_template กับลิสต์ names_a ใช้ฟังก์ชัน substitute() ของคลาส Template() เพื่อแทนที่ placeholder $name ในแม่แบบด้วยชื่อในลิสต์

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

ทำเช่นเดียวกันกับ names_b และ names_c สำหรับ names_b ให้ใช้ red_template เช่นเดียวกัน และสำหรับ names_c ให้ใช้ blue_template

เมื่อทุกลิสต์ชื่อได้รับการเติมข้อมูลด้วยแม่แบบใหม่แล้ว ก็ถึงเวลาตรวจสอบ ให้สร้างลิสต์ใหม่ที่ชื่อ all_templates และรวมลิสต์ชื่อทั้งหมดเข้าด้วยกัน ดังนี้: all_templates = names_a + names_b + names_c ใช้ฟังก์ชัน join() แบบเดิมเพื่อรวบรวมชื่อที่มีแม่แบบทั้งหมดให้อยู่ในรูปแบบที่อ่านได้ ดังนี้: all_templates = "\n".join(all_templates) ใช้ฟังก์ชัน write() ที่เขียนไว้ล่วงหน้ากับ all_templates เพื่อระบุหัวข้อทั้งหมดสำหรับชื่อที่แตกต่างกัน

ต่อไป ให้เดินไปที่เครื่องหมาย X สีเข้มบนพรมสีแดงและหันหน้าไปที่โต๊ะ ที่นี่เราจะจัดรูปแบบและเขียนชุดจดหมายแรก เริ่มต้นด้วยการสร้างวัตถุ formatter สอง (2) อันที่ชื่อ red_1 และ red_2 โดยใช้การระบุคลาส ดังนี้: red_1 = Formatter() , red_2 = Formatter() สำหรับการประพันธ์จดหมาย ให้สร้างลิสต์ที่ชื่อ red_letters

เช่นเดียวกับก่อนหน้า เราจะสร้างลูป for ที่มีสี่ (4) รอบ เราจะมีสตริงที่เขียนไว้ล่วงหน้า 2 ชุดที่จะถูกจัดรูปแบบด้วยฟังก์ชัน format() และจะเพิ่มตัวแปรชื่อเข้าไปในนั้น สตริงที่จัดรูปแบบแล้วเหล่านี้จะถูกเพิ่มลงในลิสต์ red_letters เพื่อสร้างลิสต์จดหมายที่ครอบคลุมที่จะถูกส่งออก ตัวอย่างเช่น วัตถุ format red_1 จะถูกจัดรูปแบบด้วยลิสต์ names_a และเพิ่มเข้าไปในลิสต์ 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]))

ทำเช่นเดียวกันกับวัตถุ red_2 โดยใช้สตริงที่เขียนไว้ล่วงหน้าและเพิ่ม names_b ลงในลูป เมื่อทุกอย่างถูกตั้งค่าแล้ว ให้ใช้ฟังก์ชัน join() กับ red_letters เพื่อรวบรวมข้อมูลให้เป็นไฟล์เดียว ดังนี้: red_letters = "\n".join(red_letters) ใช้ฟังก์ชัน write() กับ red_letters เพื่อบันทึกจดหมายที่จัดรูปแบบทั้งหมดที่ถูกส่งออก

สุดท้าย ให้เดินไปที่เครื่องหมาย X สีเข้มบนพรมสีน้ำเงินและหันหน้าไปที่โต๊ะ ที่นี่เราจะจัดรูปแบบและประพันธ์จดหมายชุดสุดท้าย เช่นเดียวกับก่อนหน้า ให้สร้างวัตถุ formatter สอง (2) อันที่ชื่อ blue_1 และ blue_2 โดยใช้การระบุคลาส ดังนี้: blue_1 = Formatter() , blue_2 = Formatter() สร้างลิสต์ blue_letters เพื่อจัดรูปแบบและประพันธ์จดหมายทั้งหมด

อีกครั้งสร้างลูป for ที่มีสี่ (4) รอบ และใช้สตริงที่เขียนไว้ล่วงหน้าเพื่อจัดรูปแบบลิสต์ชื่อและเพิ่มเข้าไปในลิสต์ blue_letters โดยใช้ฟังก์ชัน format() ในกรณีนี้ จับคู่วัตถุ format blue_1 กับลิสต์ names_c และวัตถุ format blue_2 กับลิสต์ names_b ทั้งหมดนี้ทำในลักษณะเดียวกับบนพรมสีแดง แต่ใช้ค่าที่แตกต่างกัน แสดงให้เห็นถึงความหลากหลายของการใช้รูปแบบและแม่แบบ เมื่อเสร็จสิ้นแล้วให้ใช้ฟังก์ชัน write() กับ blue_letters เพื่อบันทึกจดหมายชุดสุดท้ายและเสร็จสิ้นระดับ

หนังสือโค้ด