هل تعمل مع أحرف Unicode؟ ستحتاج إلى دالتي ord()
وchr()
في بايثون. اكتشف ما تفعله كل منهما ولماذا يجب عليك استخدامها من خلال قراءة هذه المقالة.
في هذه المقالة، سنتناول عدة أمثلة لتحويل حرف إلى كود Unicode الخاص به باستخدام دالة ord()
في بايثون. وسنراجع أيضًا دالة Unicode
وchr()
لذا فلنبدأ!
أساسيات يونيكود
في الأساس، تعمل أجهزة الكمبيوتر بالأرقام. وتحت الغطاء، يتم ترميز الأحرف والكلمات على الشاشة كقائمة من الأعداد الصحيحة.
قبل ظهور Unicode، كانت هناك مئات من تقنيات ترميز الأحرف المميزة لتخصيص هذه الأرقام. كانت هذه الترميزات المبكرة للأحرف مقيدة الحجم ولم تكن قادرة على استيعاب جميع لغات العالم. تم إنشاء Unicode Consortium لحل هذه المشكلة. يعين Unicode لكل حرف رقمًا فريدًا، مما يسمح للمبرمج بإنشاء سلاسل بأحرف مختلفة تأتي من لغات مختلفة، بما في ذلك الرموز التعبيرية وغيرها من الأحرف الخاصة.
السلاسل (أو قيم النص) هي نوع بيانات أساسي في البرمجة، ومن المرجح أن تواجه العديد من المشكلات التي يمكن حلها باستخدام السلاسل وUnicode. لذلك، نوصيك بالاطلاع على دورتنا التفاعلية حول العمل مع السلاسل في بايثون. إذا كنت مبتدئًا تمامًا، فستساعدك دورة أساسيات Python على البدء في استخدام Python.
ماذا تفعل الدالة ()ord؟
في بايثون، تقوم دالة ord()
بإرجاع رمز Unicode لحرف ما. تأخذ هذه الدالة نصًا بطول الوحدة كوسيطة وتعيد المعادل Unicode للمعلمة المحددة. عندما تكون وسيطة عبارة عن كائن Unicode، تقوم دالة ord()
بإرجاع عدد صحيح يتوافق مع نقطة رمز Unicode للحرف (أو قيمة البايت عندما تكون الحجة عبارة عن سلسلة مكونة من 8 بتات).
المزيد عن Unicode
يجب أن تكون برامج الكمبيوتر اليوم قادرة على التعامل مع مجموعة واسعة من الأحرف. وبسبب عولمة التطبيقات، قد يلزم عرض نفس الرسالة بلغات مختلفة؛ على سبيل المثال، قد يحتاج التطبيق إلى إخراج رسالة بالروسية والإنجليزية والفرنسية واليابانية. يمكن استخدام أي من هذه اللغات لإنشاء محتوى ويب يحتوي على العديد من الأحرف والرموز التعبيرية والرموز الأخرى المختلفة. يمثل نوع string
في بايثون الأحرف باستخدام معيار Unicode، مما يسمح لبرامج Python بالتفاعل والتعامل مع كل هذه الأحرف.
تحاول معايير Unicode سرد كافة الأحرف المستخدمة في اللغات البشرية؛ فهي تخصص لكل حرف رقمًا رمزيًا فريدًا. يتم تعديل مواصفات Unicode وتحديثها بانتظام لاستيعاب اللغات والرموز الجديدة.
الحرف هو أصغر مكون نصي: “A” و”B” و”C” وما إلى ذلك كلها أحرف مختلفة. تختلف الأحرف في Unicode وفقًا للغة أو السياق المعني. على سبيل المثال، يبدو الحرف الخاص بالرقم الروماني واحد (𐌠) مثل الحرف الكبير “I”، لكن هذين حرفين مختلفين تمامًا لهما معنيان مختلفان تمامًا.
يحدد معيار Unicode كيفية استخدام نقاط الترميز لتمثيل الأحرف. قيمة نقطة الترميز هي عدد صحيح بين 0 و0x10FFFF (حوالي 1.1 مليون قيمة؛ العدد الفعلي المعين حاليًا أقل من ذلك). على سبيل المثال، تشير نقطة الترميز U+265E إلى الحرف ♞ بقيمة 0x265e في المعيار (9822 في النظام العشري). وبالمثل، يحتوي الحرف “\” على نقطة الترميز U+005C، بقيمة 0x05c في المعيار (92 في النظام العشري).
لقد أصبح Unicode معيارًا في العديد من لغات البرمجة اليوم، حيث تستخدمه العديد من اللغات (بما في ذلك بايثون) لتمثيل السلاسل. علاوة على ذلك، يستخدمه جميع مزودي البرامج ومطوري البرامج الحديثين كطريقة أكيدة للتعامل مع أي سلسلة إدخال.
كيفية استخدام دالة ()ord في بايثون
تُستخدم دالة ord()
في بايثون لتحويل حرف Unicode واحد إلى ما يعادله من أحرف عددية صحيحة. تقبل الدالة أي حرف سلسلة مفرد وتعيد عددًا صحيحًا. تحتوي هذه الطريقة على بناء الجملة التالي:
ord(x)
هنا يمثل x أي حرف Unicode.
الآن، دعونا نلقي نظرة على مثالنا الأول باستخدام هذه الطريقة:
# Converting Unicode to Int Using ord()
character = 'd'
print(ord(character))
Output: 100
تُستخدم دالة print()
لإخراج قيمة حرف Unicode الخاص بنا. إذا بدت العملية غير مألوفة، فيمكنك معرفة المزيد عنها في هذه المقالة حول دالة الطباعة في بايثون. تجدر الإشارة إلى أن علامات الاقتباس المفردة والمزدوجة ستعمل؛ يمكن أن تكون ‘d’
و“d”
الوسيطة لدالة ord()
.
# Converting Unicode to Int Using ord()
character = “d”
print(ord(character))
Output: 100
دعونا أيضًا نلقي نظرة على مثال لدالة ord()
مع حرف غير موجود في الأبجدية اللاتينية – على سبيل المثال، علامة الدولار:
# Converting Unicode to Int Using ord()
character = '$'
print(ord(character))
Output: 36
إذا كان طول السلسلة أكبر من 1، فسيتم ظهور الخطأ TypeError:
# Converting Unicode to Int Using ord()
character = 'data'
print(ord(character))
Output: TypeError: ord() expected a character, but string of length 4 found
يمكننا أن نرى أن استخدام ord()
بأكثر من حرف واحد يتسبب في حدوث TypeError
. يحدث هذا لأن الدالة تقبل حرفًا واحدًا فقط كمدخل. لحل هذا TypeError
يجب علينا تكرار كل حرف في السلسلة. نظرًا لأن سلاسل بايثون عبارة عن كائنات قابلة للتكرار، فيمكننا بسهولة تكرار قيم السلسلة هذه:
string = 'data'
for letter in string:
print(ord(letter))
Output:
100
97
116
97
من المهم ملاحظة أن أول 128 نقطة Unicode هي نفس قيم ASCII. وهذا يعني في الأساس أن الأحرف وقيم ASCII المقابلة لها ستكون مكافئة لنفس قيمة Unicode.
على سبيل المثال:
character = ‘9’
print("ASCII value of 9 =", ord(character))
Output: ASCII value of 9 = 57
قيمة ASCII للحرف "9"
هي 57؛ وكما ترى، هذا يعادل أيضًا قيمة نقطة Unicode الخاصة به.
دالة chr()
تحول دالة chr()
تمثيلًا صحيحًا إلى حرف سلسلة Unicode المكافئ له. بعبارة أخرى، إنها عكس دالة ord()
. تأخذ هذه الدالة أي رقم بين 0 و1,114,111 لتمثيل جميع أحرف Unicode.
بناء جملة دالة chr()
في بايثون هو كما يلي:
chr(i)
حيث i
هو عدد صحيح، يمثل نقطة رمز Unicode لحرف.
مثال:
result = chr(102)
print(result)
Output: f
إذا تم تمرير قيمة خارج النطاق المذكور أعلاه إلى الدالة، فستثير الدالة خطأ ValueError. دعنا نرى كيف يبدو ذلك:
result = chr(1114115)
print(result)
Output: ValueError: chr() arg not in range(0x110000)
تأخذ هذه الدالة أيضًا قيمة واحدة فقط؛ لتحويل العديد من الأعداد الصحيحة، سيتعين علينا تكرار جميع القيم:
integers = [100, 97, 116, 97, 103, 121]
for integer in integers:
print(chr(integer))
# Output:
d
a
t
a
يمكننا المضي قدمًا وتحويل هذه القائمة من الأرقام إلى سلسلة نصية بلغة بايثون. وهذا يطابق نصنا "data"
، الذي حولناه إلى Unicode في المثال السابق. يمكننا استخدام التابع .join()
للقيام بذلك:
integers = [100, 97, 116, 97, 103, 121]
result = list() # Initializing an empty list
for integer in integers:
result.append(chr(integer)) # adding characters to a result array
Final = ‘’.join(result)
print(result)
Output: data
ما وراء ()chr و()ord في برمجة بايثون
لقد كان معيار Unicode ثوريًا في صناعة البرمجة. حيث يتم تعيين قيمة عددية لكل حرف، من الحروف إلى الرموز إلى الرموز التعبيرية. بالإضافة إلى ذلك، سهّل المعيار على أجهزة الكمبيوتر فهم الرموز، خاصة مع إضافة المزيد من الأحرف إلى الإنترنت.
لقد تعلمنا الكثير عن دالة ord()
في بايثون في هذا البرنامج التعليمي. كل حرف له قيمة Unicode فريدة، ويمكن استخدام دالة ord()
للتحقق من القيم العددية أو الأحرف الخاصة. كما تعلمنا عن دالة chr()
، وهي عكس دالة ord(). ورأينا العديد من الأمثلة للمساعدة في ترسيخ كلا المفهومين.
الآن كل ما عليك فعله هو التدرب على استخدام chr()
وord()
في بايثون. نوصيك بشدة بإلقاء نظرة على دورة Python’s Practice: Word Games من LearnPython، وبدء رحلتك لتصبح خبيرًا في Python.
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.