لرسم قلب بالنجوم في Python نمر على شبكة إحداثيات ونقرر عند كل نقطة هل نطبع نجمة أم مسافة. نجمع نقاط كل صف في نص واحد ثم نفصل الصفوف بسطر جديد. استخدام الحرف n وحده بدل محرف نهاية السطر يطبع الرسم في سطر طويل، لذلك نستخدم “\n” صراحة.
الكود الكامل باستخدام Python 3
def heart_rows():
rows = []
for y in range(15, -16, -1):
row = []
for x in range(-30, 31):
a, b = x * 0.05, y * 0.1
inside = (a * a + b * b - 1) ** 3 - a * a * b ** 3 <= 0
row.append("*" if inside else " ")
rows.append("".join(row))
return rows
if __name__ == "__main__":
print("\n".join(heart_rows()))فهم الحلقات والإحداثيات
تتحرك الحلقة الخارجية بين الصفوف من أعلى إلى أسفل، وتبني الحلقة الداخلية الأعمدة من اليسار إلى اليمين. نستخدم مقياسين مختلفين للمحورين لأن خلية الحرف في الطرفية ليست مربعة عادة. حجم الناتج هنا 31 صفًا و61 عمودًا قبل نهاية السطر، وقد يتغير شكله بحسب الخط المستخدم.
لماذا نجمع الصف أولًا؟
تسمح join ببناء الصف كاملًا ثم طباعته كجزء من الرسم، بدل كتابة print لكل نقطة على سطر جديد. المسافات جزء من الصورة النصية فلا تحذفها عند النسخ. استخدم خطًا ثابت العرض؛ الخطوط النسبية تجعل الأعمدة غير متساوية حتى لو كان الحساب صحيحًا.
تغيير الشكل دون كسر الناتج
يمكن استبدال النجمة بحرف واحد آخر، لكن الرموز التعبيرية قد تشغل أكثر من خلية وتشوّه الرسم. إذا عدلت نطاق الإحداثيات أو المقياس فاختبر أن بعض الخلايا نجوم وبعضها مسافات. هذا تمرين على الحلقات والنصوص، وليس ملف صورة، ويمكن ربطه بتمرين هرم الأرقام.






