في هذا البرنامج الذي تم تقديمه، يبدو أن هناك مشكلة في هيكلة الشيفرة وفي السياق البرمجي الخاص به. دعونا نقوم بتحليل الشيفرة لنحدد المشكلة ونقدم بعض التوجيهات لتصحيحها.
أولًا، يظهر أن هناك مشكلة في هيكل البرنامج حيث يبدو أن بعض الدوال تم تضمينها داخل دالة أخرى، مما يتسبب في عدم استدعائها بشكل صحيح. على سبيل المثال، دالة “scores” تبدو وكأنها جزء من دالة “result”، ولكنها ليست موضحة بشكل صحيح.
ثانيًا، يوجد خطأ في كتابة دالة “raw_input”، حيث يجب أن تكون “input” في Python 3، ولكن بما أنك تستخدم Python 2.7، فيجب أن تكون “raw_input”. يمكنك تصحيح ذلك في الدالة “play_again”.
ثالثًا، تظهر أن دالة “start” لا تستدعى بشكل صحيح في الكود. يجب أن تكون الدالة “start” متصلة بشكل صحيح مع الكود الرئيسي للبرنامج. يمكنك تصحيح ذلك عن طريق استبدال “if name == ‘main‘:” بـ “if name == ‘main‘:”.
رابعًا، يجب أن تحسن تهميش الأكواد لتحسين قابلية القراءة والصيانة. قد يكون من المفيد أيضًا إعادة هيكلة الكود لتحسين فهمه وصيانته.
اليك نموذج لتصحيح الشيفرة:
pythonimport random
import time
rock = 1
paper = 2
scissors = 3
names = {rock: "Rock", paper: "Paper", scissors: "Scissors"}
rules = {rock: scissors, paper: rock, scissors: paper}
player_score = 0
computer_score = 0
def start():
print("Let's play a game of rock paper and scissors")
while game():
pass
scores()
def game():
player = move()
computer = random.randint(1, 3)
result(player, computer)
return play_again()
def move():
while True:
print()
player = raw_input("Rock = 1\nPaper = 2\nScissors =3\nMake a move: ")
try:
player = int(player)
if player in (1, 2, 3):
return player
except ValueError:
pass
print("Oops! I didn't understand that. Please enter 1,2 or 3.")
def result(player, computer):
print("1...")
time.sleep(1)
print("2...")
time.sleep(1)
print("3...")
time.sleep(0.5)
print("Computer threw {0}!".format(names[computer]))
global player_score, computer_score
if player == computer:
print("Tie game.")
else:
if rules[player] == computer:
print("Your victory has been assured.")
player_score += 1
else:
print("The computer laughs as you realize you have been defeated.")
computer_score += 1
def play_again():
answer = raw_input("Would you like to play again? y/n: ")
if answer.lower() in ("y", "yes", "of course"):
return True
else:
print("Thank you very much for playing our game. See you next time!")
return False
def scores():
global player_score, computer_score
print("High Scores")
print("Player:", player_score)
print("Computer:", computer_score)
if __name__ == '__main__':
start()
بتطبيق هذه التغييرات، يجب أن يعمل البرنامج بشكل صحيح ويعرض النتائج بشكل صحيح على الشاشة.
المزيد من المعلومات
التعديلات التي قدمتها في الشيفرة البرمجية تستهدف حل المشكلات المحددة التي تم التعرف عليها في الكود الأصلي. إليك بعض المعلومات الإضافية حول الشيفرة المعدلة:
-
دالة
raw_input
: في Python 2.7، تُستخدمraw_input
لقراءة الإدخال من المستخدم كسلسلة نصوص. لكن في Python 3، تم استبدالها بدالةinput
. في الشيفرة المعدلة، تم استخدامraw_input
بما أنك تستخدم Python 2.7. -
دالة
play_again
: تم تعديل شرط الإدخال من"Y", "Y" , "yes" , "Yes" , "Of course!"
إلى"y", "yes", "of course"
لتكون أكثر مرونة وتقبل إدخالات مختلفة من المستخدم بدون أي حساسية لحالة الأحرف. -
الترتيب الصحيح لدوال البرنامج: تم تصحيح ترتيب الدوال لضمان استدعائها بشكل صحيح وتنفيذها بالتسلسل الصحيح. تم وضع الشرط
if __name__ == '__main__':
بشكل صحيح حول الدالةstart
لتكون نقطة البداية الرئيسية لتنفيذ البرنامج. -
إصلاح الهمزات والتسويات: تم تصحيح الهمزات والتسويات في الشيفرة لتحسين قابلية القراءة والفهم.
-
تحسين الأمان: تم إجراء تعديلات لضمان استجابة البرنامج بشكل صحيح لإدخالات المستخدم وتحسين تجربة المستخدم عند استخدام البرنامج.
عمومًا، يُفضل دائمًا توثيق الشيفرة وتنظيمها بشكل جيد لتسهيل فهمها وصيانتها في المستقبل.