في البداية، يجدر بك التعامل مع الخطأ الحالي في الشيفرة، حيث يتم استخدام نفس المتغير no3
لتحويل كل من no1
و no2
إلى أنواع البيانات الصحيحة، وهذا يؤدي إلى فقدان قيمة no1
واحتوائها على القيمة المحولة لـ no2
، وعلى هذا يصبح الرقم الأول no1
يحمل نفس قيمة no2
. لحل هذه المشكلة، يجب تعيين القيمة المحولة إلى no2
إلى متغير آخر، سنقوم بتسميته مثلًا no4
. يصبح الشيفرة كالتالي:
pythondef int_mult(no1, no2):
try:
no3 = int(no1)
no4 = int(no2) # تعيين القيمة المحولة إلى no2 إلى متغير آخر
except ValueError:
return print("Error: Invalid Argument Type")
no1 = int(round(no1))
no2 = int(round(no2))
return no1 * no2
print(int_mult(4.49, "apple"))
تم حل المشكلة الأولى، ولكن هناك نقاط أخرى يمكن تحسينها في الشيفرة. على سبيل المثال، يمكنك إزالة جزء الاستثناء واستخدام التحقق من نوع البيانات بشكل أفضل باستخدام isinstance
. كما يمكن تحسين الشيفرة لتكون أكثر قوة وإيلاء اهتمام أكبر للتفاصيل.
pythondef int_mult(no1, no2):
if not (isinstance(no1, (int, float)) and isinstance(no2, (int, float))):
return print("Error: Invalid Argument Type")
no1 = int(round(no1))
no2 = int(round(no2))
return no1 * no2
print(int_mult(4.49, "apple"))
هذه النسخة من الشيفرة تقوم بفحص نوع البيانات باستخدام isinstance
، وإذا لم يكن نوع البيانات صالحًا (عدا الأنواع int
و float
)، سيتم طباعة رسالة خطأ.
المزيد من المعلومات
بالتأكيد، دعنا نتناول بعض التحسينات الإضافية في الشيفرة لجعلها أكثر دقة وإتقانًا. فيما يلي إصدار محسن للشيفرة:
pythondef multiply_rounded_values(value1, value2):
"""
This function multiplies two values after rounding them to the nearest integer.
:param value1: The first value (int or float).
:param value2: The second value (int or float).
:return: The product of the rounded values.
"""
if not (isinstance(value1, (int, float)) and isinstance(value2, (int, float))):
raise ValueError("Error: Invalid Argument Type. Both values must be integers or floats.")
rounded_value1 = round(value1)
rounded_value2 = round(value2)
return rounded_value1 * rounded_value2
try:
result = multiply_rounded_values(4.49, "apple")
print(f"The result is: {result}")
except ValueError as e:
print(e)
تم تحسين الشيفرة لاستخدام اسماء متغيرات أكثر وضوحًا مثل value1
و value2
بدلاً من no1
و no2
. كما تم إضافة تعليقات توضيحية للدالة لجعل الشيفرة أكثر قراءةً وفهمًا. أيضًا، تم استخدام raise ValueError
بدلاً من print
لرمي استثناء عندما يكون نوع البيانات غير صالح، وهذا يجعل من السهل التحكم في التدفق عند وجود خطأ.
إضافةً إلى ذلك، يمكنك استخدام الدالة format
لطباعة النتيجة بشكل أكثر أناقة، مما يضيف للكود جوًا إضافيًا من الاحترافية.