بداية من لم يشكر الناس لم يشكر الله، لذا أحب اتوجه بخالص شكري وتقديري واحترامي لشخصكم المتواضع الكريم والخلوق أستاذنا إبراهيم عادل…
صدقًا مهما حاولت اصيغ من عبارات الشكر والعرفان على ما تبذلونه من مجهودات عظيمة في سبيل التيسير على الطلاب الساعين في الحصول على العلم، ومساعدتهم في تلقي تلك العلوم بطرق ممتعة وشيقة؛ نتيجة لأسلوب الشرح الرائع والسلس الذي نجح في الجمع بين البساطة غير المخلة بالمضون، والأسلوب الممتع والشيق في ايصال المعلومات، والذي يدفع الإنسان إلى الإستمرار في التعلم وعدم النفور منه، وهو ما لا يقدر عليه الكثيرون، فلن اجد ما يوفيكم حقكم…
جزاكم الله الفردوس الأعلى من الجنة، وجعل صالح علمكم وعملكم في ميزان حسناتكم اللهم آمين
أما سؤالي فهو
أنا لا ازال في المستوى الأول ببايثون انتهيت من الوحدة الخامسة، وعلى مشارف البدأ في السادسة، فبالنسبة لمشروع (نقل الأرنب)، و مشروع (حجرة ورقة مقص) في الوحدة الخامسة، أنا كتبت الأكواد بطريقة مختلفة تمامًا عن حضرتك، ولكن النتيجة النهائية بتبقي صحيحة، لكن التخوف اللي عندي إنه فيما بعد طريقة كتابتي للأكواد ماتبقاش الأفضل أو الأصح في حالة لو المشروع بقى أكبر…
مرفق لحضرتك صورة الأكواد…
اتمني سماع رأيكم في الموضوع، وتفضلوا بقبول فائق الإحترام
أهلا استاذة فاطمة
في البرمجة عادة ما يكون هناك اكثر من طريقة لحل نفس المشكلة, وطالما ان النتيجة الى حضرتك طلعتيها هي النتيجة المطلوبة, فإذن الكود (( بشكل مجمل )) صحيح. ولكن هناك اشياء يجب مراعاتها حتى يكون الكود نظيفا. تحدثت عن ذلك في الحلقات ولكن دعيني اجملهم لك هناك مرة أخرى.
ال Documentation او التوثيق. وزي ما حضرتك شفتي في الحلقات او هتشوفي, دايما بنحاول نعمل كده خصوصا في المشاريع الكبيرة علشان لو معانا اشخاص غيرنا في التيم بيشتغلو على نفس المشروع, يبقى كلنا على نفس الصفحة وعارفين كل سطر بيعمل ايه من غير عناء
إعادة الإستخدام: هتلاقينا دايما بنقسم الكود الى وظائف صغيرة كل وظيفة مسئولة عن حاجة معينة.
التسمية الواضحة للمتغيرات. وطبعا ده بديهي.
دول الـ ٣ حاجات الى غطيناهم في المنهج لحد دلوقتي ومن غيرهم حتى لو الكود بيطلع نفس النتيجة النهائية, قد لا يكون انظف كود يمكن كتابته
أولاً، دعني أثني عليك على إنجازك في كتابة الأكواد وتحقيق النتائج المطلوبة. من الطبيعي أن يكون هناك عدة طرق لتحقيق نفس الهدف في البرمجة، ومع ذلك، هناك بعض المبادئ التي يمكن أن تساعدك على كتابة أكواد أفضل وأكثر فعالية خصوصاً في المشاريع الكبيرة. دعنا نلقي نظرة على الأكواد الخاصة بك ونرى ما يمكن تحسينه.
1. مشروع “نقل الأرنب”
ملاحظات:
تجنب تكرار الأكواد: لاحظت أن هناك تكرار في الشروط (if-elif) مع اختلافات طفيفة. يمكن تبسيط هذه العمليات باستخدام دوال لتجنب التكرار.
استخدم هياكل بيانات مناسبة: بدلاً من القوائم الثلاثة، يمكنك استخدام هيكل بيانات واحد يحتوي على كل المعلومات المطلوبة.
كود محسن لمشروع “نقل الأرنب”:
class RabbitGame:
def __init__(self):
self.places = [
['*', ' ', ' '],
[' ', '*', ' '],
[' ', ' ', '*']
]
def display_places(self):
for place in self.places:
print(place)
def move_rabbit(self, from_place, to_place):
if self.places[from_place[0]][from_place[1]] == '*':
self.places[from_place[0]][from_place[1]] = ' '
self.places[to_place[0]][to_place[1]] = '*'
else:
print("\nInvalid Move!!\n")
def start_game(self):
print("Welcome to place the rabbit!\n")
self.display_places()
choose = input("\nWhere should the rabbit go? (Please choose a row and a column): ")
from_place = (int(choose[0]) - 1, int(choose[1]) - 1)
to_place = (int(choose[2]) - 1, int(choose[3]) - 1)
self.move_rabbit(from_place, to_place)
print("\nSuccess...\n")
self.display_places()
game = RabbitGame()
game.start_game()
2. مشروع “حجرة ورقة مقص”
ملاحظات:
استخدم القواميس أو المجموعات لتبسيط عملية التحقق من الفائز.
تجنب استخدام شروط (if-elif) طويلة ومعقدة.
كود محسن لمشروع “حجرة ورقة مقص”:
import random
class RockPaperScissors:
def __init__(self):
self.game_elements = ['rock', 'paper', 'scissors']
def get_computer_choice(self):
return random.choice(self.game_elements)
def determine_winner(self, player, computer):
rules = {
'rock': 'scissors',
'scissors': 'paper',
'paper': 'rock'
}
if player == computer:
return "It's a tie!"
elif rules[player] == computer:
return "You win!"
else:
return "You lose!"
def start_game(self):
print("Welcome to the Rock, Paper, Scissors game!")
help_option = input("\nPress 'Enter' to continue or type (Help) for the rules: ").lower()
if help_option == "help":
print("\n*************** RULES ***************")
print("1) You choose and the computer chooses")
print("2) Rock smashes Scissors -> Rock wins")
print("3) Scissors cut Paper -> Scissors wins")
print("4) Paper covers Rock -> Paper wins\n")
player_choice = input("\nEnter your choice (rock, paper, scissors): ").lower()
if player_choice not in self.game_elements:
print("\nInvalid Choice!!")
return
computer_choice = self.get_computer_choice()
print(f"\nYou chose: {player_choice}")
print(f"Computer chose: {computer_choice}")
result = self.determine_winner(player_choice, computer_choice)
print(result)
game = RockPaperScissors()
game.start_game()
النقاط الأساسية لتحسين الأكواد:
تجنب تكرار الأكواد: حاول استخدام دوال أو هياكل بيانات لتجنب التكرار.
استخدام هياكل بيانات مناسبة: استخدام القواميس والمجموعات يمكن أن يبسط عملية التحقق من الشروط.
القراءة والتنظيم: حافظ على كودك منظمًا ومقروءًا، فهذا يسهل عليك وعلى الآخرين فهمه وتعديله لاحقًا.
آمل أن تكون هذه النصائح مفيدة، وإذا كان لديك أي أسئلة أخرى، فلا تتردد في طرحها. بالتوفيق!
كلامك صحيح وما كان قصدي الا المساعدة لكن بامكانها تستفيد بالذي تفهمه والذي ترى غريب وغير مفهوم تأجله الى المستوى والثاني وشكرا على الملاحظة اخي ابراهيم
هو حضرتك مشكور جدًا والله على تخوفك إني أكون اتلخبط أو حصل عندي التباس في المعلومات…
بس أنا تمام فهمت من كلام أستاذ البراء إن فيه حاجات لسه هتعلمها فيما بعد وهتساعدني على تنظيم الأكواد بشكل أفضل…
فهو يشكر وحضرتك كمان تشكر، جزاكم الله خيرًا يا رب
استخدام ChatGPT (أو أي مساعد ذكي آخر) في حل المشاريع يمكن أن يكون سلاحًا ذو حدين. هنا بعض النقاط التي قد تساعدك في تحديد كيفية الاستفادة منه بشكل أفضل:
إيجابيات استخدام ChatGPT في حل المشاريع:
تسريع عملية التعلم:
يمكن أن يساعدك ChatGPT في فهم المفاهيم بشكل أسرع من خلال تقديم تفسيرات واضحة وحلول نموذجية.
إذا واجهتك مشكلة أو خطأ برمجي، يمكن أن يساعدك في تحديد السبب وحل المشكلة، مما يوفر عليك الوقت والجهد.
مساعدتك على فهم المفاهيم المعقدة:
يمكن أن يكون المساعد الذكي أداة جيدة لفهم المفاهيم الصعبة أو الخوارزميات المعقدة من خلال الشرح التدريجي.
تحسين مهاراتك في البحث:
استخدام ChatGPT لتوجيه أسئلتك بشكل صحيح يمكن أن يعزز قدرتك على البحث عن حلول وفهم كيفية طرح الأسئلة التقنية.
إلهام الأفكار:
إذا كنت بحاجة إلى أفكار جديدة أو تحسين تصميم مشروعك، يمكن أن يقدم لك ChatGPT اقتراحات وتحسينات.
سلبيات استخدام ChatGPT في حل المشاريع:
الاعتماد المفرط:
الاعتماد الكبير على ChatGPT لحل المشكلات يمكن أن يؤدي إلى عدم تطوير مهاراتك الخاصة في التحليل وحل المشكلات.
قد يتسبب في تكوين عادة التوجه إلى المساعد الذكي بدلاً من محاولة حل المشكلة بنفسك.
فقدان تجربة التعلم:
التعلم من خلال التجربة والخطأ جزء مهم من تطوير المهارات البرمجية. إذا استخدمت ChatGPT لحل كل شيء، فقد تفوت على نفسك فرصة التعلم العميق من خلال مواجهة التحديات بنفسك.
المعلومات غير الدقيقة:
بالرغم من أن ChatGPT يوفر الكثير من المعلومات المفيدة، قد تكون هناك حالات يقدم فيها معلومات غير دقيقة أو غير كاملة. لذا يجب أن تتأكد دائمًا من التحقق من صحة الحلول المقدمة.
كيف تستفيد بشكل مثالي؟
استخدم ChatGPT كأداة مساعدة وليس كمعلم رئيسي:
حاول أن تحل المشكلة بنفسك أولاً. إذا كنت عالقًا، استخدم ChatGPT للمساعدة في تحديد الأخطاء أو لفهم مفهوم معين.
راجع الشرح وتحقق من الحلول:
بعد الحصول على المساعدة، حاول مراجعة الشرح والتحقق من الحل بنفسك لضمان فهمك العميق للمشكلة والحل.
تعلم من كل حل:
حاول أن تفهم كيف وصل ChatGPT إلى الحل وتعلم من ذلك. الهدف هو أن تكون قادرًا على حل مشاكل مماثلة في المستقبل بدون مساعدة.
تطبيق ما تتعلمه:
بعد استخدام ChatGPT، حاول إعادة كتابة الحل بنفسك أو تطبيق ما تعلمته في مشروع جديد للتأكد من أنك قد استوعبت المعلومات.
الخلاصة:
استخدام ChatGPT يمكن أن يكون مفيدًا جدًا إذا استخدمته بحكمة. يجب أن يكون هدفك الأساسي هو التعلم وتطوير مهاراتك الشخصية، وليس الاعتماد الكلي على المساعد الذكي لحل جميع مشاكلك.