آموزش پایتون-پروژه محور

سلام دوستان ...در قسمت قبل آموزش پایتون مفاهیم زیر را یاد دادیمآموزش عبارات break و continue، و بند else در حلقه ها در برنامه نویسی پایتونعبارات pass در برنامه نویسی پایتونآموزش توابع در برنامه نویسی پایتونمقادیر پیش فرض آرگومان ها در Pythonپارامترهای خاص در زبان Pythonمثال های تابع در Pythonلیست های آرگومان اختیاری در زبان برنامه نویسی Pythonحال با ادامه آموزش پایتون همراه ما باشید.آموزش ساختار های داده در آموزش پایتوناین بخش چیزهایی را که تاکنون فرا گرفته اید، با جزییات بیشتر توضیح میدهد و چیزهای جدیدتری را نیز به آن اضافه می کند.اطلاعات بیشتر درباره لیست ها در Pythonنوع داده لیست متدهای بیشتری دارد. در اینجا همه متدهای اشیای لیست ارائه شده است.مفهوم( List.append(x در Pythonیک عنصر را به انتهای لیست اضافه می کند. برابر است با a[len(a):] = [x] .مفهوم (List.extend(itarable در Pythonبا الحاق همه عناصر iterable ، لیست را توسعه می دهد. برابر است با a[len(a):] = iterable .مفهوم (List.insert(I,x در Pythonیک عنصر را در مکان داده شده درج می کند. آرگومان اول، اندیس عنصری است که عنصر جدید قبل از آن باید درج شود، بنابراین a.insert(0, x) در ابتدای لیست درج می کند و a.insert(len(a)), x برابر است با (a.append(x.مفهوم (List.remove(x در Pythonاولین عنصر لیست که دارای مقدار x باشد را از لیست حذف می کند. اگر چنین عنصری وجود نداشته باشد خطای ValueError بروز می کند.مفهوم (List.pop([i] در Pythonعنصر موجود در مکان داده شده را از لیست حذف می کند و آن را باز می گرداند. اگر هیچ اندیسی مشخص نشده باشد، a.pop() آخرین عنصر لیست را حذف می کند و باز می گرداند. ( وجود براکت مربعی [] در اطراف i در نحوه نگارش متد، بیانگر این است که استفاده از پارامتر، اختیاری است و مجبور به نوشتن براکت ها در این مکان نیستید. در مراجع کتابخانه پایتون این نوع نوشتار را مکررا می بینید.)مفهوم List.clear() در Pythonتمامی عناصر لیست را حذف می کند. برابر است با del a[:]مفهوم (List.index(x[, start[, end]] در Pythonاندیس مبتنی بر صفر در لیست اولین آیتم که مقدار برابر با x دارد را باز می گرداند. اگر چنین آیتمی وجود نداشته باشد خطای ValueError را بر می انگیزد. آرگومان های اختیاری شروع و پایان همانطور که در نحوه نگارش آمده تفسیر می شود و برای محدود کردن جستجو به یک زیر مجموعه خاص از لیست استفاده می شود. اندیس باز گردانده شده متناسب با شروع کل دنباله محاسبه می شود نه از آرگومان شروع.مفهوم (List.count(x در Pythonتعداد دفعات ظهورx در لیست را باز می گرداند.مفهوم (List.sort(key=None, reverse=False در Pythonعناصر درون لیست را مرتب می کند ( آرگومان ها برای سفارشی کردن مرتب سازی می توانند بکار روندمفهوم List.reverse() در Pythonعناصر لیست را برعکس می کند.مفهوم List.copy() در Pythonیک کپی از لیست را باز می گرداند. برابر است با a[:].یک مثال که بیشتر متدهای لیست را استفاده می کند در ادامه آمده است:>>> fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']>>> fruits.count('apple')2>>> fruits.count('tangerine')0>>> fruits.index('banana')3>>> fruits.index('banana', 4) # Find next banana starting a position 46>>> fruits.reverse()>>> fruits['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange']>>> fruits.append('grape')>>> fruits['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']>>> fruits.sort()>>> fruits['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear']>>> fruits.pop()'pear'ممکن است متوجه شده باشید متدهایی مانند insert، remove و sort که فقط لیست را تغییر می دهند، هیچ مقدار بازگشتی را چاپ نمی کند – آنها مقدار پیش فرض none را باز می گردانند. 1 این یک قانون طراحی برای ساختارهای داده قابل تغییر در پایتون است. مورد دیگر که ممکن است متوجه شده باشید این است که همه داده ها نمی توانند مرتب یا مقایسه شوند.برای مثال [None, 'hello', 10] مرتب نمی شود زیرا اعداد صحیح قابل مقایسه با رشته نیست و None با سایر انواع قابل مقایسه نیست. همچنین، برخی انواع وجود دارد که رابطه ترتیبی تعریف شده ندارند. برای مثال، 3+4j < 5+7j یک مقایسه معتبر نیست.استفاده از لیست ها به عنوان پشته در آموزش پایتون متدهای لیست امکان استفاده از یک لیست به عنوان پشته( که آخرین عنصر اضافه شده، اولین عنصر بازیابی شده است- last-in, first-out) را بسیار آسان کرده است. برای اضافه کردن یک عنصر به بالای پشته از append() استفاده کنید. برای بازیابی یک عنصر از بالای پشته از pop() بدون اندیس صریح استفاده کنید. برای مثال:>>> stack = [3, 4, 5]>>> stack.append(6)>>> stack.append(7)>>> stack[3, 4, 5, 6, 7]>>> stack.pop()7>>> stack[3, 4, 5, 6]>>> stack.pop()6>>> stack.pop()5>>> stack[3, 4] استفاده از لیست ها به عنوان صف در پایتونهمچنین استفاده از لیست به عنوان صف (که اولین عنصر اضافه شده، اولین عنصر بازیابی شده است - first-in, first-out) نیز امکان پذیر است.هرچند استفاده از لیست با این هدف کارآمد نیست. درحالی که اضافه کردن و برداشتن (append - pop) از انتهای لیست سریع است، درج و برداشتن (insert - pop) از ابتدای لیست کند است (زیرا تمامی عناصر دیگر باید یک واحد جا به جا شوند). برای ساخت صف، از collections.deque استفاده کنید که برای داشتن یک روند افزودن و برداشت (append - pop) سریع از هر دو سر طراحی شده است. برای مثال:>>> from collections import deque>>> queue = deque([&quotEric&quot, &quotJohn&quot, &quotMichael&quot])>>> queue.append(&quotTerry&quot) # Terry arrives>>> queue.append(&quotGraham&quot) # Graham arrives>>> queue.popleft() # The first to arrive now leaves'Eric'>>> queue.popleft() # The second to arrive now leaves'John'>>> queue # Remaining queue in order of arrivaldeque(['Michael', 'Terry', 'Graham'])درک مباحث لیست (list comprehensions)در برنامه نویسی پایتوندرک مباحث لیست راه کوتاهی برای ساخت لیست ها فراهم می کند. برنامه های کاربردی متداول، لیست های جدیدی ایجاد می کنند که هر عنصر آن نتیجه اعمال تعدادی عملیات روی هر عضو از دنباله دیگر یا iterable است، یا زیر دنباله هایی از آن عناصر ایجاد می کند که شرایط خاصی را برآورده می کند. برای مثال، فرض کنید می خواهیم لیستی از مربع(اعداد) ایجاد کنیم:>>> squares = []>>> for x in range(10):... squares.append(x**2)...>>> squares[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]توجه داشته باشید این کد یک متغیر به نام x می سازد (یا باز نویسی می کند) که پس از اتمام حلقه همچنان وجود دارد. می توان لیست مربع ها را بدون هیچ اثر جانبی به صورت زیر محاسبه کرد:squares = list(map(lambda x: x**2, range(10)))یا به صورت مشابه زیر که مختصر تر و خوانا تر است:squares = [x**2 for x in range(10)]یک درک مطلب لیست شامل براکت هایی است که در برگیرنده یک عبارت است که در ادامه آن یک for و سپس تعدادی (صفر یا بیشتر) بسته if یا for قرار دارد. نتیجه، یک لیست جدید خواهد بود که از ارزیابی عبارت موجود در متن بسته for یا if که پس از آن قرار دارد ، به دست می آید. برای مثال، این listcomp در صورت عدم تساوی عناصر دو لیست را با هم ترکیب می کند:>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y][(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]و برابر است با:>>> combs = []>>> for x in [1,2,3]:... for y in [3,1,4]:... if x != y:... combs.append((x, y))...>>> combs[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]توجه کنید که ترتیب عبارات در for و if در هر دو قطعه کد مشابه است. اگر عبارت یک tuple باشد (برای مثال (x, y) در مثال قبل)، باید پرانتز گذاری شود.>>> vec = [-4, -2, 0, 2, 4] >>> # create a new list with the values doubled >>> [x*2 for x in vec] [-8, -4, 0, 4, 8] >>> # filter the list to exclude negative numbers >>> [x for x in vec if x >= 0] [0, 2, 4] >>> # apply a function to all the elements >>> [abs(x) for x in vec] [4, 2, 0, 2, 4] >>> # call a method on each element >>> freshfruit = [' banana', ' loganberry ', 'passion fruit '] >>> [weapon.strip() for weapon in freshfruit] ['banana', 'loganberry', 'passion fruit'] >>> # create a list of 2-tuples like (number, square) >>> [(x, x**2) for x in range(6)] [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)] >>> # the tuple must be parenthesized, otherwise an error is raised >>> [x, x**2 for x in range(6)] File &quot<stdin>&quot, line 1, in <module> [x, x**2 for x in range(6)] ^ SyntaxError: invalid syntax >>> # flatten a list using a listcomp with two 'for' >>> vec = [[1,2,3], [4,5,6], [7,8,9]] >>> [num for elem in vec for num in elem] [1, 2, 3, 4, 5, 6, 7, 8, 9]</module></stdin>درک مباحث لیست می تواند شامل عبارات پیچیده و توابع تو در تو باشد:عبارت اولیه در یک درک مطلب لیست می تواند هر عبارت دلخواهی از جمله یک درک مطلب لیست دیگر باشد. مثال زیر را در نظر بگیرید. یک ماتریس 4*3 است که به صورت یک لیست ، شامل سه لیست به طول 4 پیاده سازی شده است.>>> matrix = [... [1, 2, 3, 4],... [5, 6, 7, 8],... [9, 10, 11, 12],... ]درک مطلب لیست زیر سطرها و ستون ها را جا به جا می کند:>>> [[row[i] for row in matrix] for i in range(4)][[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]همانطور که در بخش قبل دیدیم، listcomp تو در تو، در متن بسته for که پس از آن می آید ارزیابی می شود، بنابراین این مثال برابر است با:>>> transposed = []>>> for i in range(4):... transposed.append([row[i] for row in matrix])...>>> transposed[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]که مشابه است با:>>> transposed = []>>> for i in range(4):... # the following 3 lines implement the nested listcomp... transposed_row = []... for row in matrix:... transposed_row.append(row[i])... transposed.append(transposed_row)...>>> transposed[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]در دنیای واقعی، باید توابع داخلی را برای ترکیب عبارات روند (کد) ترجیح دهید. تابع zip() برای این مورد بسیار خوب عمل می کند.>>> list(zip(*matrix))[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]آموزش عبارت del در زبان برنامه نویسی پایتونروشی برای حذف یک عنصر از لیست، با ارائه اندیس به جای مقدار آن، وجود دارد : عبارت del. Del با متد pop() که یک مقدار را باز می گرداند، متفاوت است. همچنین برای حذف بخش هایی از یک لیست یا پاک کردن کل لیست (که پیشتر با تخصیص یک لیست خالی به بخشی از لیست انجام شد) می توان از عبارت del استفاده کرد. برای مثال:>>> a = [-1, 1, 66.25, 333, 333, 1234.5]>>> del a[0]>>> a[1, 66.25, 333, 333, 1234.5]>>> del a[2:4]>>> a[1, 66.25, 1234.5]>>> del a[:]>>> a[]همچنین از del برای پاک کردن تمامی متغیرها نیز می توان استفاده کرد.>>> del aارجاع به نام a پس از این خطا است (حداقل تا زمانی که مقدار دیگری به آن اختصاص یابد). بعدا سایر کاربرد های del را بررسی می کنیم.آموزش پایتون ادامه دارد