سوال در مورد اسکریپت سنگ کاغد قیچی

پرسیده شده
فعالیت 988 روز پیش
دیده شده 358 بار
0
return Rules[tuple(sorted(match))]

با سلام و خسته نباشید خدمت همه ی دوستان با عرض پوزش من این خط کد رو متوجه نشدم اگر امکانش هست این رو یکبار دیگ توضییح بدین 

 

فایل پیوست

محمد یارمحمدی
محمد یارمحمدی

12 مرداد 00

1
حذف شده

سلااااااااااااااااااام ممنون

خدا قوت

خب جسارتا من از قبل تر توضیح میدم.

خط ۶۸

        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 کلیدهای دیکشنری، تاپل هایی هستن که ترتیب مقدارهای تاپل ها طبق حروف الفبا هستش.

RULES = {
    ('p', 'r'): 'p',
    ('p', 's'): 's',
    ('r', 's'): 'r',
}

در واقع ما اومدیم دیکشنری کوچیکتری نوشتیم. و دیگه حالت های اضافی رو ننوشتیم. مثل:

    ('r', 'p'): 'p',

بعد از اینکه مجموعه match رو با تابع sorted مرتبش کردیم، با دستور tuple تبدیلش کردیم به تاپل. چون کلیدهای RULES تاپل هستن.

 

تابع find_winner انتخابی که برنده است رو بر میگردونه. مثلا اگر یکی سنگ آورده و اون یکی کاغذ. طبق قوانین سنگ کاغذ قیچی، کاغذ برنده است و تابع مقدار p که مخفف paper هست رو برمیگردونه.

 

امیدوارم تونسته باشم تو فهم این تیکه از کد کمکت کنم. باز اگر سوالی داشتی در خدمتم :)

فایل پیوست

محمدعلی رضا

توسط

محمدعلی رضا

13 مرداد 00