Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python maketrans() และ translate() ฟังก์ชั่น


Python String maketrans()

เมธอด maketrans() ส่งคืนตารางการแมปสำหรับการแปลที่ใช้งานได้สำหรับเมธอด translate() นี่เป็นวิธีการแบบคงที่ที่สร้างการจับคู่อักขระแบบหนึ่งต่อหนึ่งกับการแปล/การแทนที่ เมธอดนี้จะสร้างการแสดง Unicode ของอักขระแต่ละตัวสำหรับการแปล

ไวยากรณ์ของเมธอด maketrans() คือ −

string.maketrans(x[, y[, z]])
y and z are optional arguments.

พารามิเตอร์สตริง maketrans()

เมธอด maketrans() มี 3 พารามิเตอร์

x - ในกรณีนี้ หากมีเพียงหนึ่งอาร์กิวเมนต์ จะต้องเป็นพจนานุกรมและพจนานุกรมควรมีการแมปแบบ 1 ต่อ 1 จากสตริงอักขระตัวเดียวไปยังการแปล หรือหมายเลข Unicode (97 สำหรับ 'a') ไปยังการแปล .

y - ในกรณีนี้ หากส่งผ่านอาร์กิวเมนต์ 2 รายการ ต้องเป็นสตริงสองสตริงที่มีความยาวเท่ากัน และอักขระแต่ละตัวในสตริงแรกจะแทนที่ดัชนีที่เกี่ยวข้องในสตริงที่สอง

z - ในกรณีนี้หากส่งผ่านสามอาร์กิวเมนต์ อักขระแต่ละตัวในอาร์กิวเมนต์ที่สามจะถูกจับคู่กับไม่มี

คืนค่าจากสตริง maketrans()

เมธอดนี้ส่งคืนตารางการแปลที่มีการแมปแบบ 1 ต่อ 1 ของลำดับ Unicode ไปยังการแปล/แทนที่

ตัวอย่าง1

ตารางการแปลโดยใช้พจนานุกรมที่มี maketrans()

โค้ดตัวอย่าง

dict= {"a": "123", "b": "456", "c": "789"}
my_string = "abc"
print(my_string.maketrans(dict))
# example dictionary
dict = {97: "123", 98: "456", 99: "789"}
my_string = "abc"
print(my_string.maketrans(dict))

ผลลัพธ์

{97: '123', 98: '456', 99: '789'}
{97: '123', 98: '456', 99: '789'}

คำอธิบาย − ในตัวอย่างนี้ dict คือพจนานุกรมและประกอบด้วยการแมปอักขระ a,b และ c ถึง 123, 456 และ 789 ตามลำดับ maketrans() สร้างการแมปของลำดับ Unicode ของอักขระกับการแปลที่เกี่ยวข้อง ดังนั้น ผลลัพธ์คือ 97 ('a') ถูกจับคู่กับ '123', 98 'b' ถึง 456 และ 99 'c' ถึง 789

ตัวอย่าง2

ตารางการแปลโดยใช้สองสตริงที่มี maketrans()

ตัวอย่าง

my_string1 = "abc"
my_string2 = "def"
string = "abc"
print(string.maketrans(my_string1, my_string2))
# Example dictionary
my_string1 = "abc"
my_string2 = "defghi"
string = "abc"
print(string.maketrans(my_string1, my_string2))

ผลลัพธ์

{97: 100, 98: 101, 99: 102}
ValueError: the first two maketrans arguments must have equal length

คำอธิบาย − ในตัวอย่างนี้ มีการกำหนดสตริงสองสตริงที่มีความยาวเท่ากัน "abc" และ "def" และการแปลที่เกี่ยวข้องจะถูกสร้างขึ้นและพิมพ์เฉพาะการแปลครั้งแรกเท่านั้น ให้คุณจับคู่ 1 ต่อ 1 กับลำดับ Unicode ของอักขระแต่ละตัวใน my_string1 กับอักขระที่ทำดัชนีเดียวกันบน my_string2

แต่ในกรณีนี้ 97 ('a') ถูกจับคู่กับ 100 ('d'), 98 ('b') ถึง 101 ('e') และ 99 ('c') ถึง 102 ('f') และพยายาม ในการสร้างตารางการแปลสำหรับสตริงที่มีความยาวไม่เท่ากัน จะทำให้เกิดข้อยกเว้น ValueError ซึ่งบ่งชี้ว่าสตริงนั้นต้องมีความยาวเท่ากัน

แปล() . เรารู้ว่าตารางการแปลจะจับคู่อักขระกับอักขระอื่นๆ เราใช้เมธอด translate() ใน Python สำหรับการแทนที่อักขระจำนวนมากในสตริง ขั้นแรก เราสร้างพจนานุกรมการแปลด้วย maketrans() และส่งต่อสิ่งนี้เพื่อแปล

โปรแกรม Python ที่ใช้ maketrans แปล

#Python program that uses maketrans, translate
dict = str.maketrans("abc", "def")
print(dict)
# Translate this value.
value = "aabbcc"
result = value.translate(dict)
print(result)

ผลลัพธ์

{97: 100, 98: 101, 99: 102}
ddeeff

โปรแกรม Python ที่ละเว้น ลบอักขระ

# Create translation table.
table = str.maketrans("78", "12", "9")
# Translate this string.
input = "123456789"
result = input.translate(table)
# Write results.
print(input)
print(result)

ผลลัพธ์

123456789
12345612

โปรแกรม Python ที่ใช้การแปล rot13

#Create translation table.
trans = str.maketrans("abcdefghijklmnopqrstuvwxyz","nopqrstuvwxyzabcdefghijklm")
# Apply rot13 translation.
print("gandalf".translate(trans))
print("gandalf".translate(trans).translate(trans))

ผลลัพธ์

tnaqnys
gandalf