1. المقدمة
عند البرمجة بلغة بايثون، تُعدّ تحويلات أنواع البيانات تقنية أساسية. على وجه الخصوص، القدرة على التحويل بين السلاسل النصية والأرقام ضرورية لإدخال/إخراج البيانات وإجراء الحسابات. على سبيل المثال، غالبًا ما تحتاج إلى تحويل سلسلة نصية يُدخلها المستخدم في نموذج إلى رقم للمعالجة، أو تنسيق نتيجة عددية كسلسلة نصية للعرض.
ومع ذلك، فإن خلط البيانات من أنواع مختلفة قد يسبب أخطاء، لذا يجب على المبتدئين توخي الحذر. تُقدِّم هذه المقالة طريقة تحويل “السلاسل إلى أرقام” و“الأرقام إلى سلاسل” في بايثون، مع أمثلة عملية وتغطية مفصلة لمعالجة الأخطاء والحالات الخاصة. نأمل أن تساعدك على تطوير مهارات تتراوح من الأساسيات إلى البرمجة المتقدمة في بايثون.
القسم التالي سيشرح طرق التحويل الأساسية في بايثون بالتفصيل.
2. التحويل الأساسي للأنواع في بايثون
في بايثون، عندما تختلف أنواع البيانات، غالبًا ما تكون العمليات المباشرة محدودة، ويصبح من الضروري تحويل البيانات بين الأنواع المختلفة. فهم كيفية تحويل السلاسل إلى أرقام، أو العكس، يتيح لك كتابة شفرة أكثر مرونة وخالية من الأخطاء. يشرح هذا القسم التحويل الأساسي في بايثون باستخدام الدالتين int() و float().
التحويل إلى عدد صحيح
عند إدخال رقم كسلسلة نصية، تحتاج إلى تحويل تلك السلسلة إلى عدد صحيح أو عدد عشري قبل إجراء الحسابات العددية في بايثون. على سبيل المثال، لتحويل السلسلة “42” إلى عدد صحيح 42، تستخدم الدالة int() كما يلي.
str_number = "42"
int_number = int(str_number)
print(int_number) # Output: 42
وبالتالي، يتيح استخدام الدالة int() تحويل السلسلة إلى عدد صحيح. عندما ينجح التحويل، يمكن استخدام القيمة كعدد. لاحظ أن محاولة تحويل سلسلة تحتوي على نقطة عشرية، مثل "42.0"، إلى نوع عدد صحيح سيؤدي إلى حدوث خطأ. الأعداد الصحيحة صالحة فقط للأرقام الكاملة؛ إذا احتوت السلسلة على نقطة عشرية، يجب استخدام float().
التحويل إلى عدد عشري (Floating‑Point)
العدد العشري هو نوع يمكنه الاحتفاظ بالجزء الكسري للقيمة. في بايثون، يمكنك تحويل سلسلة إلى عدد عشري باستخدام الدالة float(). على سبيل المثال، لتحويل السلسلة “3.14” إلى عدد عشري، استخدم الشيفرة التالية.
str_float = "3.14"
float_number = float(str_float)
print(float_number) # Output: 3.14
وبالتالي، يتيح استخدام الدالة float() التحويل من سلسلة إلى عدد عشري. بالإضافة إلى ذلك، يمكن تحويل السلاسل بصيغة علمية باستخدام float()، وتُدعم الصيغ مثل "1.23e-4" أيضًا.
str_exp = "1.23e-4"
float_exp = float(str_exp)
print(float_exp) # Output: 0.000123
التحويل من عدد إلى سلسلة
على العكس، هناك العديد من الحالات التي تحتاج فيها إلى تحويل عدد إلى سلسلة نصية. على سبيل المثال، عندما تريد ربط عدد بسلاسل أخرى للعرض. في هذه الحالات، تستخدم الدالة str().
num = 42
str_num = str(num)
print("Result of converting a number to a string: " + str_num) # Output: Result of converting a number to a string: 42
وبالتالي، تقوم الدالة str() بالتحويل من عدد إلى سلسلة، مما يتيح التعامل مع سلاسل تحتوي على أرقام.
بعد أن تتقن التحويل الأساسي للأنواع، يمكنك الانتقال إلى مواضيع متقدمة مثل التحويل بين أنظمة عددية أخرى ومعالجة السلاسل ذات العرض الكامل.

3. مثال تطبيقي: التحويل بين قواعد متعددة والأعداد ذات العرض الكامل
الآن بعد أن فهمت التحويلات الأساسية في بايثون، سنناقش حالات أكثر تقدمًا. يشرح هذا القسم كيفية التحويل إلى قواعد مختلفة مثل الثنائي والسداسي عشري، وكيفية التعامل مع الأعداد التي تشمل أحرفًا ذات عرض كامل.
التحويل بين الثنائي، الثماني، والسداسي عشري
دالة int() في بايثون يمكنها تحويل ليس فقط السلاسل العشرية بل أيضًا السلاسل الثنائية، الثمانية، والسداسية عشرية. في هذه الحالة، تحدد القاعدة (الأساس) كوسيط ثانٍ لدالة int(). على سبيل المثال، لتحويل السلاسل الثنائية أو السداسية عشرية إلى أعداد صحيحة، يمكنك كتابة ما يلي.
binary_str = "1010" # binary string
octal_str = "12" # octal string
hex_str = "a" # hexadecimal string
int_binary = int(binary_str, 2)
int_octal = int(octal_str, 8)
int_hex = int(hex_str, 16)
print(int_binary) # Output: 10
print(int_octal) # Output: 10
print(int_hex) # Output: 10
وبالتالي، يمكن أيضًا تحويل السلاسل الثنائية، الثمانية، والسداسية عشرية إلى أعداد صحيحة باستخدام int() مع القاعدة المناسبة. هذه الميزة مفيدة بشكل خاص عند التعامل مع بيانات تشمل أنظمة عددية متعددة.
معالجة الأرقام ذات العرض الكامل والرموز الخاصة
إذا كان النص المدخل من المستخدم يحتوي على أرقام ذات عرض كامل أو رموز خاصة، فإن محاولة تحويله مباشرة في بايثون قد تُسبب أخطاء. خاصةً عندما يتضمن الإدخال الياباني أرقامًا ذات عرض كامل، غالبًا ما لا يستطيع بايثون التعامل معها بشكل صحيح، لذا يُنصح باستخدام طريقة replace() لتحويل الأحرف ذات العرض الكامل إلى عرض نصف.
فيما يلي مثال يحول سلسلة ذات عرض كامل إلى نصف قبل تحويلها إلى رقم.
str_num_fullwidth = "12345"
str_num_halfwidth = str_num_fullwidth.translate(str.maketrans('0123456789', '0123456789'))
print(int(str_num_halfwidth)) # Output: 12345
باستخدام هذا النهج يمكن تحويل السلاسل الرقمية ذات العرض الكامل إلى أرقام. إذا كان من الضروري أيضًا تحويل الفاصلة العشرية ذات العرض الكامل، يمكنك إجراء تحويل إضافي كما يلي.
str_float_fullwidth = "123.456"
str_float_halfwidth = str_float_fullwidth.translate(str.maketrans('0123456789.', '0123456789.'))
print(float(str_float_halfwidth)) # Output: 123.456
تحويل الأرقام الكانجي
في بايثون، يمكنك استخدام وحدة Unicode لتحويل بعض الأرقام الكانجي إلى أعداد. باستخدام unicodedata.numeric()، يمكن تحويل سلاسل مثل “一” أو “百” إلى أعداد ذات نقطة عائمة.
import unicodedata
kanji_num = '五'
converted_num = unicodedata.numeric(kanji_num)
print(converted_num) # Output: 5.0
ومع ذلك، لا تدعم الأرقام الكانجي التي تتكون من عدة أحرف (مثل “十五”), لذا بالنسبة للمعالجة الأكثر تعقيدًا يجب النظر في مكتبات إضافية أو معالجة باستخدام تعبيرات نمطية مخصصة.
وبالتالي، توفر بايثون مجموعة متنوعة من طرق التحويل حتى للسلاسل الرقمية. سيتناول القسم التالي كيفية تحديد ما إذا كان تحويل قيمة الإدخال وكيفية التعامل مع الأخطاء.
4. معالجة الأخطاء والتحقق من صحة الإدخال
في معالجة البيانات، قد تواجه حالات لا يمكن فيها تحويل بيانات الإدخال من المستخدم أو البيانات المستلمة من مصادر خارجية إلى أعداد بشكل صحيح. لذلك، من المهم تحديد ما إذا كان يمكن تحويل البيانات إلى نوع رقمي مسبقًا، ومعالجة الأخطاء بشكل مناسب عند فشل التحويل. يشرح هذا القسم طرق التحقق من صحة الإدخال ومعالجة الأخطاء.
اكتشاف الأرقام باستخدام isdigit() والتعبيرات النمطية
إحدى الطرق لتحديد ما إذا كان يمكن تحويل سلسلة إلى عدد مسبقًا هي استخدام طريقة isdigit() في بايثون أو التعبيرات النمطية. تُعيد isdigit() القيمة True عندما تتكون السلسلة بالكامل من أرقام، ولكنها تُعيد False إذا احتوت على نقطة عشرية أو إشارة سالب. لذلك، تكون مفيدة عندما تريد التحقق من الأعداد الصحيحة فقط.
def is_integer(input_str):
return input_str.isdigit()
# Example usage
print(is_integer("123")) # Output: True
print(is_integer("3.14")) # Output: False
print(is_integer("-123")) # Output: False
من ناحية أخرى، بالنسبة لاكتشاف الأرقام التي تشمل الأعداد ذات الفاصلة العشرية والقيم السالبة، تكون التعبيرات النمطية ملائمة. في المثال أدناه، تُضبط الأعداد التي تبدأ بـ “+” أو “-” والقيم التي تحتوي على نقطة عشرية لتُعيد True.
import re
def is_numeric(input_str):
return bool(re.match(r'^[+-]?d+(.d+)?$', input_str))
# Example usage
print(is_numeric("123")) # Output: True
print(is_numeric("-123.45")) # Output: True
print(is_numeric("3.14.15")) # Output: False
print(is_numeric("abc")) # Output: False
باستخدام التعبيرات النمطية بهذه الطريقة، يمكنك تحديد ما إذا كانت القيمة رقمية بشكل أكثر مرونة، وهو أمر مفيد عند معالجة بيانات الإدخال المعقدة.
معالجة الأخطاء: استخدام معالجة الاستثناءات
في بايثون، تحويل سلسلة إلى رقم ببيانات غير مناسبة يثير خطأ (ValueError). لالتقاط هذا الخطأ ومتابعة المعالجة، من الشائع استخدام كتلة try-except لمعالجة الاستثناءات.
في المثال أدناه، إذا حدث خطأ أثناء محاولة تحويل سلسلة إلى عدد صحيح، يتم عرض رسالة خطأ مناسبة.
def convert_to_int(input_str):
try:
return int(input_str)
except ValueError:
print(f"Error: '{input_str}' cannot be converted to an integer.")
return None
# Example usage
print(convert_to_int("123")) # Output: 123
print(convert_to_int("abc")) # Output: Error: 'abc' cannot be converted to an integer.
بإضافة معالجة الاستثناءات، يمكن للبرنامج الاستمرار في التشغيل بسلاسة حتى عند حدوث أخطاء، دون التوقف. كما يوفر رد فعل واضح للمستخدم، مما يسهل معالجة أخطاء الإدخال.
عند تنفيذ التحقق من صحة بيانات الإدخال ومعالجة الأخطاء بشكل صحيح، تتحسن موثوقية الكود. في القسم التالي، سنستعرض كيفية تحويل عناصر القائمة دفعة واحدة.

5. كيفية تحويل عناصر القائمة دفعة واحدة
عند معالجة البيانات، قد تحتاج إلى تحويل عناصر القائمة التي تكون بصيغة سلسلة إلى أرقام دفعة واحدة. على سبيل المثال، تُخزن ملفات CSV والبيانات المستخرجة من مصادر خارجية غالبًا كسلاسل. يقدم هذا القسم طريقة للتحويل الجماعي باستخدام تعبيرات القوائم في بايثون.
التحويل الجماعي باستخدام تعبيرات القوائم
في بايثون، بالإضافة إلى معالجة كل عنصر من القائمة باستخدام حلقة، يمكنك استخدام تعبيرات القوائم لإجراء تحويل البيانات بشكل مختصر وفعّال. تُطبق تعبيرات القوائم عملية محددة على كل عنصر من القائمة وتولد قائمة جديدة.
على سبيل المثال، لتحويل قائمة تحتوي على سلاسل رقمية إلى قائمة من الأعداد الصحيحة، استخدم الشيفرة التالية.
str_list = ["10", "20", "30", "40", "50"]
int_list = [int(i) for i in str_list]
print(int_list) # Output: [10, 20, 30, 40, 50]
في هذا المثال، يُحوِّل [int(i) for i in str_list] في تعبير القائمة كل عنصر في str_list إلى عدد صحيح باستخدام الدالة int()، مما ينتج قائمة جديدة int_list. يتيح هذا النهج معالجة بيانات على نطاق واسع باستخدام شيفرة مختصرة، مما يحسن قابلية قراءة الكود وأدائه.
تحويل القائمة الجماعي مع معالجة الأخطاء
إذا احتوت القائمة على بيانات لا يمكن تحويلها (مثل السلاسل أو الأحرف الخاصة)، يحدث خطأ. في هذه الحالة، يمكنك دمج شروط أو معالجة استثناءات في تعبير القائمة لتجنب أخطاء التحويل. أدناه مثال يحول فقط العناصر التي يمكن تحويلها إلى أعداد صحيحة.
str_list = ["10", "20", "abc", "30", "40"]
int_list = []
for i in str_list:
try:
int_list.append(int(i))
except ValueError:
print(f"Warning: '{i}' could not be converted to an integer.")
print(int_list) # Output: [10, 20, 30, 40]
في هذا الشيفرة، تُستخدم كتلة try-except لتحويل السلاسل إلى أعداد صحيحة، وإذا فشل التحويل يتم عرض رسالة خطأ. بإضافة العناصر القابلة للتحويل فقط إلى int_list باستخدام طريقة append()، تستمر المعالجة حتى إذا حدثت أخطاء، وتحصل على نتائج التحويل.
تحويل القائمة الجماعي هو تقنية مفيدة جدًا لمعالجة كميات كبيرة من البيانات. في القسم التالي، سنلخص المقال بالكامل وننظم ما تعلمناه.
6. الملخص
في هذه المقالة، شرحنا كيفية التحويل بين السلاسل النصية والأعداد في بايثون، بدءًا من الأساسيات وحتى المواضيع المتقدمة. فهم أهمية تحويل الأنواع في معالجة البيانات وكيفية القيام بذلك بكفاءة يوسع نطاق العمليات التي يمكنك تنفيذها في برمجة بايثون. أدناه ملخص موجز لكل قسم.
ملخص المقال
- المقدمة
- شرحنا الحالات التي يكون فيها تحويل بين السلاسل النصية والأعداد ضروريًا، وأظهرنا لماذا يعتبر تحويل الأنواع مهمًا للحسابات العددية وعرض البيانات.
- تحويل الأنواع الأساسي في بايثون
- تعلمنا طرق التحويل الأساسية، باستخدام
int()وfloat()ودالةstr()لتغيير أنواع البيانات بين السلاسل النصية والأعداد.
- أمثلة متقدمة: تحويل القواعد المختلفة والأعداد ذات العرض الكامل
- قدمنا كيفية تحويل الأعداد الثنائية، الثمانية، والسادس عشر إلى أعداد صحيحة، وكيفية تحويل الأحرف ذات العرض الكامل إلى عرض نصف للمعالجة العددية. كما شرحنا كيفية تحويل الأرقام الكانجي إلى أعداد باستخدام
unicodedata.numeric().
- معالجة الأخطاء والتحقق من صحة الإدخال
- بالنظر إلى أن الأخطاء قد تحدث أثناء تحويل الأعداد، أظهرنا كيفية التحقق المسبق مما إذا كانت القيمة عددية باستخدام
isdigit()والتعابير النمطية، وكيفية معالجة الأخطاء باستخدام معالجة الاستثناءات عبرtry-except.
- كيفية تحويل عناصر القائمة دفعة واحدة
- تعلمنا كيفية إجراء تحويل دفعي باستخدام تعبيرات القوائم (list comprehensions)، وكيفية التعامل مع الأخطاء التي قد تظهر، واكتسبنا مهارات لمعالجة كميات كبيرة من البيانات بكفاءة.
تطبيقات مستقبلية
تحويل الأنواع في بايثون يشارك في كل تقريبًا عملية معالجة بيانات وكل عملية برمجة أساسية. من خلال تطبيق تحويل الأنواع الصحيح ومعالجة الأخطاء بشكل مستمر في التطوير الواقعي، يمكنك تقليل الأخطاء وكتابة شفرة ذات جودة أعلى. علاوة على ذلك، بناءً على طرق التحويل الأساسية التي تعلمتها هنا وإتقان تقنيات تحويل البيانات المتقدمة سيمكنك من التعامل مع معالجة البيانات المعقدة بكفاءة.
نأمل أن تكون هذه المقالة قد زودتك بفهم شامل للمعرفة والتقنيات اللازمة لتحويل الأنواع في بايثون. طبّق ما تعلمته في مشاريع البرمجة المستقبلية الخاصة بك.




