Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
درس مبانی برنامه نویسی، پایتون10
هادی طالبی 1398اسفند
امکان المان های ناهمگون با، یک گونه ساختار داده ● (hetrogeneous)
Lists (a Data Structure class)
ps = [10, 20, 30, 40] qs = ["spam", "bungee", "swallow"]
zs = ["hello", 2.0, 5, [10, 20]]#nested
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
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] []
بیاید= می تواند سمت چپ یک المان : تحول پذیر ●
Lists (a Data Structure class)
تغییر کامل هم ممکن است ●
>>> numbers = [17, 123] >>> numbers[0] = 30 >>> print (numbers) [30, 123]
>>> numbers = [“a”, “b”, “c”] >>> print (numbers) [“a”, “b”, “c”]
len function on lists :که دنباله ها را به عنوان آرگومان می گیرد ()lenداخلی تابع ●
>>> len(['car makers', 1, ['Ford', 'Toyota', 'BMW'], [1, 2, 3]]) 4
>>> len(["war", "famine", "pestilence", "death"]) 4
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)
List membership
برای سنجش عضویت در not inو inبا نام های (boolean)اپراتورهای بولین ● :دنباله ها
>>> horsemen = ['war', 'famine', 'pestilence', 'death'] >>> 'pestilence' in horsemen True >>> 'debauchery' in horsemen False >>> 'debauchery' not in horsemen True
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)
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]
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']
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با دستور ●
Aliasing :، به مثال ها توجه کنیدچند نام برای یک موجودیتچند نامی، ●
>>> a = [1, 2, 3] >>> b = a >>> a is b True >>> b[0] = 5 >>> a [5, 2, 3]
● a وb دو نام برای یک ابجکت از کالس لیست هستند
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]
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]
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!")
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
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
:پاسخ ●
Lists as the function Parameter
call by valueکردن یک فانکشن به صورت callمتغیرها به عنوان آرگومان در ● :نمی دهدروی aliasingبه فانکشن می رسند ، کپی آن ها می رسد، یعنی
call by referenceلیست ها به عنوان آرگومان یک تابع به صورت ● :می دهدروی aliasingبه فانکشن می رسند ، خود ابجکت می رسد، یعنی
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]
Lists methods :لیست ها متدهایی دارد که در این جا معرفی می گرددکالس ●
>>> mylist = []#empty list >>> mylist.append(5) >>> mylist.append(27) >>> mylist.append(3) >>> mylist.append([‘a’, ‘b’]) >>> mylist [5, 27, 3, [‘a’, ‘b’]] >>>
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] >>>
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]
:پاسخ ●
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]
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
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...
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'
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)
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]
Nested lists :لیست های تو در تو ●
>>> nested = ["hello", 2.0, 5, [10, 20]] >>> elem = nested[3] >>> elem [10, 20] >>> elem[0] 10 >>> nested[3][1] 20
Matrices :لیست های تو در تو برای ساخت ماتریس ●
>>> mx = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> mx[1] [4, 5, 6] >>> mx[1][2] 6
هر : گذاشتمی توان قرار . به ترتیبسطر، بیرونی، یک المان لیست معموال هر ● دالمان لیست بیرونیستون یک
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]]
تمرین
از کتاب را حل کنید 11.22تمرین های شماره فرد بخش ●