33
، پایتونسی برنامه نوی درس مبانی10 طالبی هادی اسفند1398

This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

درس مبانی برنامه نویسی، پایتون10

هادی طالبی 1398اسفند

Page 2: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

امکان المان های ناهمگون با، یک گونه ساختار داده ● (hetrogeneous)

Lists (a Data Structure class)

ps = [10, 20, 30, 40] qs = ["spam", "bungee", "swallow"]

zs = ["hello", 2.0, 5, [10, 20]]#nested

Page 3: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Lists (a Data Structure class) :با ایندکس المان ها مانند دنباله های دیگر آدرس شدنترتیب مهم و ●

>>> numbers = [17, 123] >>> numbers[0] 17 >>> numbers[9-8]# integer 9-1 = 1 123 >>> numbers[1.0]# ERROR float index Traceback (most recent call last): File "<interactive input>", line 1, in <module> TypeError: list indices must be integers, not float >>> numbers[2]# ERROR index is out of range Traceback (most recent call last): File "<interactive input>", line 1, in <module> IndexError: list index out of range

Page 4: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Lists (a Data Structure class)

:لیست به عنوان آرگومان یک تابع ●

>>> vocabulary = ["apple", "cheese", "dog"] >>> numbers = [17, 123] >>> an_empty_list = []#empty list >>> print(vocabulary, numbers, an_empty_list) ['apple', 'cheese', 'dog'] [17, 123] []

Page 5: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

بیاید= می تواند سمت چپ یک المان : تحول پذیر ●

Lists (a Data Structure class)

تغییر کامل هم ممکن است ●

>>> numbers = [17, 123] >>> numbers[0] = 30 >>> print (numbers) [30, 123]

>>> numbers = [“a”, “b”, “c”] >>> print (numbers) [“a”, “b”, “c”]

Page 6: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

len function on lists :که دنباله ها را به عنوان آرگومان می گیرد ()lenداخلی تابع ●

>>> len(['car makers', 1, ['Ford', 'Toyota', 'BMW'], [1, 2, 3]]) 4

>>> len(["war", "famine", "pestilence", "death"]) 4

Page 7: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Lists in loops :(مشابه دنباله های دیگر) حلقه به عنوان ایندکی لسیت متغیر ●

horsemen = ["war", "famine", "pestilence", "death"] for i in range(len(horsemen)):

print(horsemen[i])

:البته بدون ایندکس هم ممکن بود ●

horsemen = ["war", "famine", "pestilence", "death"] for h in horsemen: print(h)

Page 8: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

List membership

برای سنجش عضویت در not inو inبا نام های (boolean)اپراتورهای بولین ● :دنباله ها

>>> horsemen = ['war', 'famine', 'pestilence', 'death'] >>> 'pestilence' in horsemen True >>> 'debauchery' in horsemen False >>> 'debauchery' not in horsemen True

Page 9: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

List membership برای سنجش عضویت در not inو inبا نام های (boolean)اپراتورهای بولین ●

( :این مثال پیش از این با روش دیگری حل شده)مثال . دنباله ها

students = [ ("John", ["CompSci", "Physics"]), ("Vusi", ["Maths", "CompSci", "Stats"]), ("Jess", ["CompSci", "Accounting", "Economics", "Management"]), ("Sarah", ["InfSys", "Accounting", "Economics", "CommLaw"]), ("Zuki", ["Sociology", "Economics", "Law", "Stats", "Music"])] # Count how many students are taking CompSci counter = 0 for (name, subjects) in students: if )"CompSci" in subjects(: counter += 1

print("The number of students taking CompSci is", counter)

Page 10: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

List operations :با مفهوم خاص روی لیست ها عمل می کنند *و +دو اپراتور ●

>>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> c = a + b >>> c [1, 2, 3, 4, 5, 6]

>>> [0] * 4 [0, 0, 0, 0] >>> [1, 2, 3] * 3 [1, 2, 3, 1, 2, 3, 1, 2, 3]

Page 11: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

List slices :مشابه با اسالیس در استرینگ ها، که پیشتر دیده ایم ●

>>> a_list = ['a', 'b', 'c', 'd', 'e', 'f'] >>> a_list[1:3] ['b', 'c'] >>> b_list = a_list[:4] >>> print(b_list) ['a', 'b', 'c', 'd'] >>> a_list[3:] ['d', 'e', 'f'] >>> a_list[:] ['a', 'b', 'c', 'd', 'e', 'f']

Page 12: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

List deletion تغییر می کندلیست اصلی . پاک کردن و تغییر یک لیست ●

>>> a = ['one', 'two', 'three'] >>> del a[1] >>> a ['one', 'three'] >>> a_list = ['a', 'b', 'c', 'd', 'e', 'f'] >>> del (a_list[1:5]) >>> a_list ['a', 'f']

:، با پرانتز یا بدون پرانتز del یا ()delبا دستور ●

Page 13: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Aliasing :، به مثال ها توجه کنیدچند نام برای یک موجودیتچند نامی، ●

>>> a = [1, 2, 3] >>> b = a >>> a is b True >>> b[0] = 5 >>> a [5, 2, 3]

● a وb دو نام برای یک ابجکت از کالس لیست هستند

Page 14: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Aliasing ، چند نامی به وجود می آید تا آنکه یکی از متغیرها دوباره =پس از عالمت ●

تعریف شود >>> x = [1,2,3] >>> y = x # aliasing is created >>> x[1] = 100 >>> x [1, 100, 3] >>> y [1, 100, 3] >>> x = [10,20,30] # re-define , aliasing is not available any more >>> y [1, 100, 3] >>> y[0] = 1000 >>> y [1000, 100, 3] >>> x [10, 20, 30]

Page 15: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Cloning (copying) a list [:]و ()aliasing ،listراه های برابر قرار دادن دو لیست در آغاز ولی پرهیز از ●

>>> x = [1,2,3] >>> y = list(x) >>> x[1] = 100 >>> y [1, 2, 3] >>> x [1, 100, 3] >>> z = x[:] >>> x[2] = 1000 >>> x [1, 100, 1000] >>> z [1, 100, 3]

Page 16: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Lists and for loops (revisited) :حالت کلی ●

for VARIABLE in LIST: BODY

:مثال ها ●friends = ["Joe", "Amy", "Brad", "Angelina", "Zuki", "Thandi", "Paris"] for friend in friends: print(friend)

for number in range(20): if (number % 3 == 0):# multiple of 3 in [0, 19] print(number) for fruit in ["banana", "apple", "quince"]: print("I like to eat " + fruit + "s!")

Page 17: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Lists and for loops and enumerate :تغییر المان های یک لیست، مناسب کار با ایندکس ها ●

● enumerate همزمان به راهی است برای دستیابی(index, value) در یک :لیست

xs = [1, 2, 3, 4, 5] for i in range(len(xs)): xs[i] = xs[i]**2

xs = [1, 2, 3, 4, 5] for (i, val) in enumerate(xs): xs[i] = val**2

Page 18: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Lists and for loops and enumerate

● enumerate راهی است برای دستیابی به(index, value) در یک لیست:

:مثال دیگر ●for (i, v) in enumerate(['banana', 'apple', 'pear', 'lemon']): print(i, v)

0 banana 1 apple 2 pear 3 lemon

:پاسخ ●

Page 19: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Lists as the function Parameter

call by valueکردن یک فانکشن به صورت callمتغیرها به عنوان آرگومان در ● :نمی دهدروی aliasingبه فانکشن می رسند ، کپی آن ها می رسد، یعنی

call by referenceلیست ها به عنوان آرگومان یک تابع به صورت ● :می دهدروی aliasingبه فانکشن می رسند ، خود ابجکت می رسد، یعنی

Page 20: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Lists as the function Parameter call by referenceلیست ها به عنوان آرگومان یک تابع به صورت ●

:می دهدروی aliasingبه فانکشن می رسند ، خود ابجکت می رسد، یعنی

def double_stuff(a_list): """ Overwrite each element in a_list with double its value. """

for (idx, val) in enumerate(a_list): a_list[idx] = 2 * val # No return values things = [2, 5, 9] double_stuff(things)# calling the function print(things) ● پاسخ:

[4, 10, 18]

Page 21: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Lists methods :لیست ها متدهایی دارد که در این جا معرفی می گرددکالس ●

>>> mylist = []#empty list >>> mylist.append(5) >>> mylist.append(27) >>> mylist.append(3) >>> mylist.append([‘a’, ‘b’]) >>> mylist [5, 27, 3, [‘a’, ‘b’]] >>>

Page 22: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Lists methods >>> mylist.insert(1, 12) # insert 12 at pos 1, shift other items up

>>> mylist [5, 12, 27, 3, 12] >>> mylist.count(12) # how many times is 12 in mylist?

2 >>> mylist.extend([5, 9, 5, 11]) # put whole list onto end of mylist

>>> mylist [5, 12, 27, 3, 12, 5, 9, 5, 11]) >>> mylist.index(9) # find index of first 9 in mylist

6 >>> mylist.reverse() >>> mylist [11, 5, 9, 5, 12, 3, 27, 12, 5] >>> mylist.sort() >>> mylist [3, 5, 5, 5, 9, 11, 12, 12, 27] >>> mylist.remove(12) >>> mylist [3, 5, 5, 5, 9, 11, 12, 27] >>>

Page 23: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

aliasing avoidance (راه کار درون تابع)نگه داشت اصل لیست و پردازش روی آن ●

def double_stuff(a_list): """ Return a new list in which contains doubles of the elements in a_list""" new_list = [] for value in a_list: new_elem = 2 * value new_list.append(new_elem) return new_list things = [2, 5, 9] xs = double_stuff(things) print(things) print(xs)

[2, 5, 9] [4, 10, 18]

:پاسخ ●

Page 24: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

aliasing avoidance (رونوشت در متن اصلی)آن رونوشتنگه داشت اصل لیست و پردازش روی ●

>>> def double_stuff(a_list): for i in range(len(a_list)): a_list[i] *= 2 return(a_list) >>> things = [2, 5, 9] >>> xs = list(things) # cloning, get a copy >>> xs = double_stuff(xs) >>> things [2, 5, 9] >>> xs [4, 10, 18]

Page 25: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Functions that produce lists :فرم کلی(. مثال های پیش)بسیار الزم می شود، در تابعی لیستی ساخته شود ●

بر می گرداند ، غیر آن Trueعدد اول باشد iکه اگر is_prime(i)تابع ● False را نوشته و برنامه زیر را کامل و آنالیز کنید ،.

initialize a result variable to be an empty list loop create a new element append it to result return the result

def primes_lessthan(n): ‘'' Return a list of all prime numbers less than n. ''' result = [] for i in range(2, n): if is_prime(i): result.append(i) return result

Page 26: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

strings to/from lists conversion ()split، داردبرای تبدیل استرینگ به لیست متدی استرینگ کالس ● کننده عامل جدا می گویند delimiterکه به آن جداکنند یا ()splitآرگومان ●

:، استرینگ اصلی بدون تغییر(بلنک)است، بدون آرگومان یعنی یک فاصله >>> song = "The rain in Spain..." >>> wds = song.split() >>> wds ['The', 'rain', 'in', 'Spain...'] >>> song.split('ai') ['The r', 'n in Sp', 'n...']

تبدیل لیست به استرینگ ، لیست اصلی از کالس استرینگ برای ()join متد ● :بدون تغییر

>>> wds = ['The', 'rain', 'in', 'Spain...'] >>> glue = ';’ >>> s = glue.join(wds) >>> print(s) The;rain;in;Spain...

Page 27: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

list() built-in function

:به لیست تبدیل می کند ابجکت های ممکن را ()listتابع ●

>>> xs = list("Crunchy Frog") >>> xs ['C', 'r', 'u', 'n', 'c', 'h', 'y', ' ', 'F', 'r', 'o', 'g']

>>> ''.join(xs) 'Crunchy Frog'

Page 28: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

range() built-in function ولی لیست درستکند تر شده پایتون 3در ورژن های باالتر از ()range تابع ●

:دنباله می سازدبه مقدار الزم نمی کند، def f(n): """ Find the first positive integer between 101 and less

than n that is divisible by 21"""

for i in range(101, n): if (i % 21 == 0): return (i)

def test(a, b):

if (a == b):

print)“Test passed”(

else:

print)“Test failed”( test(f(110), 105) test(f(1000000000), 105)

Page 29: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Range() built-in function test(f(110), 105) test(f(1000000000), 105)

بخواهد لیست کامل range، اگر تابع f(1000000000)در مثال پیش ● این کار را rangeابجکت . دنباله تمام می شود returnبا ! حافظه؟بسازد،

انجام می دهد >>> range(10) # create a lazy object(promise)

range(0, 10)

>>> list(range(10))# Call in the promise, to produce a list. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Page 30: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Nested lists :لیست های تو در تو ●

>>> nested = ["hello", 2.0, 5, [10, 20]] >>> elem = nested[3] >>> elem [10, 20] >>> elem[0] 10 >>> nested[3][1] 20

Page 31: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

Matrices :لیست های تو در تو برای ساخت ماتریس ●

>>> mx = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> mx[1] [4, 5, 6] >>> mx[1][2] 6

هر : گذاشتمی توان قرار . به ترتیبسطر، بیرونی، یک المان لیست معموال هر ● دالمان لیست بیرونیستون یک

Page 32: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

aliasing avoidance : aliasingدر لیست های تو در تو روش پیشگیری از ●

>>> x = [[1,2],[3,4],[5,6]] >>> y = list(x) >>> y[0] = [10,20] >>> x [[1, 2], [3, 4], [5, 6]] >>> y [[10, 20], [3, 4], [5, 6]] >>> y[1][0] = 30 >>> x [[1, 2], [30, 4], [5, 6]] #→→→→→→→

#→→→→→→→ >>> z = [list(x[0]),list(x[1]),list(x[2])] >>> z [[1, 2], [30, 4], [5, 6]] >>> z[2] = [50,60] >>> x [[1, 2], [30, 4], [5, 6]] >>> z [[1, 2], [30, 4], [50, 60]] >>> z[2][1] = 600 >>> z [[1, 2], [30, 4], [50, 600]] >>> x [[1, 2], [30, 4], [5, 6]]

Page 33: This is a test.ce.sharif.edu/courses/98-99/2/ce153-6/resources/root/Lectures/Lec1… · [5, 2, 3] د٭تػٰ تػی٥ ظځک ضا تکجبا کی یاصب ٧ا٬ ٲذ b ٲ a ... دی٭ک

تمرین

از کتاب را حل کنید 11.22تمرین های شماره فرد بخش ●