با سلام و خسته نباشید خدمت همه ی دوستان با عرض پوزش من این خط کد رو متوجه نشدم اگر امکانش هست این رو یکبار دیگ توضییح بدین
سلااااااااااااااااااام ممنون
خدا قوت
خب جسارتا من از قبلتر توضیح میدم.
خط ۶۸
winner = find_winner(user_choice, system_choice)
تابع find_winner رو صدا زدیم و بهش انتخاب کاربر و سیستم رو دادیم که یکی از این ۳ تاس (r, p, s)
داخل تابع
def find_winner(user, system):
"""
receive user and system choice, sort them and compare with game rules if
they are not the same.
:param user:
:param system:
:return: winner
"""
match = {user, system}
if len(match) == 1:
return None
return RULES[tuple(sorted(match))]
برای اینکه بفهمیم که کاربر و سیستم انتخاب شون مثل هم بوده یا نه (مثلا هر دو کاغذ انتخاب کردن یا نه). از انتخاب کاربر و سیستم یه set ساختیم و نتیجه اش رو ریختیم توی match (که چون نوع داده set تو پایتون عضو تکراری نمیتونه داشته باشه، اگر انتخاب کاربر و سیستم تکراری باشه یکی شون حذف میشه و داخل set یک عضو میمونه)
بعد یه شرط گذاشتیم که اگر طول set مساوی ۱ بود None رو برگردون که علامتی هست برای اینکه کسی برنده نشد.
خب خط
return RULES[tuple(sorted(match))]
اول مجموعه match رو با استفاده از تابع sorted به ترتیت حروف الفبا مرتبش کردیم.
چرا؟
چون داخل دیکشنری RULES کلیدهای دیکشنری، تاپل هایی هستن که ترتیب مقدارهای تاپلها طبق حروف الفبا هستش.
در واقع ما اومدیم دیکشنری کوچیکتری نوشتیم. و دیگه حالتهای اضافی رو ننوشتیم. مثل:
('r', 'p'): 'p',
بعد از اینکه مجموعه match رو با تابع sorted مرتبش کردیم، با دستور tuple تبدیلش کردیم به تاپل. چون کلیدهای RULES تاپل هستن.
تابع find_winner انتخابی که برنده است رو بر میگردونه. مثلا اگر یکی سنگ آورده و اون یکی کاغذ. طبق قوانین سنگ کاغذ قیچی، کاغذ برنده است و تابع مقدار p که مخفف paper هست رو برمیگردونه.
امیدوارم تونسته باشم تو فهم این تیکه از کد کمکت کنم. باز اگر سوالی داشتی در خدمتم :)