بر زدن یک دسته ورق چگونه انجام می شود ؟
بر زدن یک دسته ورق چگونه انجام می شود ؟
اگر یک دسته ورق ماهرانه بر خورده باشد، آنگاه هر کارت با احتمالی مساوي در هر جاي دسته ورق ظاهر میشود و هر مکان در دسته، احتمال برابري براي شامل بودن هر کارت را دارد. به منظـور بـر زدن یـک دسـته ورق، مـا از تـابع randrange از مـاژول random اسـتفاده میکنیم. بـا دو آرگومـان صـحیح a و b ،randrange یـک عـدد صـحیح در بـازة b-<-x-<=-a انتخاب میکند. از آنجا که کران بالایی حتماً از b کمتر است، میتوانیم از طول لیست به عنوان پـارامتر دوم استفاده نماییم و تضمین کنیم که اندیس مجازي دریافت میکنیم. براي مثال، این عبـارت انـدیس یک کارت را در یک دسته ورق انتخاب میکند:
random.randrange(0, len(self.cards))
یک راه ساده براي بر زدن یک دسته ورق، پیمایش کارتها و جابجایی هر کارت بـا یـک کـارت تصادفی انتخاب شده از دسته است. امکان دارد کارتی با خودش جابجا شود، اما باز هم خـوب اسـت. در حقیقت اگر از این امکان جلوگیري کنیم، ترتیب کارتها بهطور کامل اتفاقی نخواهد بود:
class Deck:
…
def shuffle(self):
import random
nCards = len(self.cards)
for i in range(nCards):
j = random.randrange(i, nCards)
self.cards[i], self.cards[j]=self.cards[j], self.cards[i]
بدون اینکه فرض کنیم در دسته ورق 52 کارت وجود دارد، طول واقعی لیسـت را مـیگیـریم و در nCards ذخیره میکنیم. براي هر کارت در دسته ورق، ما کارتی را از میان کارتها انتخاب میکنیم کـه تـا بـه حـال بـر نخورده باشد. آنگاه کارت جاري (i (را با کارت انتخابی (j (عوض میکنـیم. جهـت معاوضـۀ کـارتهـا همانطور که در بخش 9-2 دیدید از یک نسبتدهی چندتایی استفاده میکنیم:
self.cards[i], self.cards[j] = self.cards[j], self.cards[i]
تمرین 15-2 :این خط کد را بدون استفاده از نسبتدهی چندتایی بازنویسی کنید.
برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید