Professional Documents
Culture Documents
Drills (Session02) (Answers)
Drills (Session02) (Answers)
هرگونه کپی برداری غیرقانونی و حرام است و هیچ گونه رضایت مولف را در بر ندارد
-2ممکن است در جواب بعضی سواالت نیاز باشد بگویید با خطا مواجه میشویم و توضیح دهید[ .پس لزوماً قرار
نیست چیزی که خواسته شده واقعاً صحیح باشد]
پس تاکید مجدد :اگر جایی با خطا مواجه میشه ،کامل توضیح بدید [کاملِ کامل!]
-3در هیچ جای این تمرین حق ندارید از مطالبی استفاده کنید که ما آموزش ندادیم.
این سوال ،5تمرین سری 1است .قبول دارید این سوال دقیقاً همونه فقط یکم تعداد
متغیرهاش رو بیشتر کردیم؟! و اونجا هم تاکید کردیم که برید نوعش رو با تابع type
فراخوانی کنید.
به هرحال مقادیر متغیرها رو بخوام جمع بندی کنم ،این شکلی میشه:
e 12
f 3
g5
a b c d 12, 3 , 5
خب حاال چون چندتا چیزمیز جلوتر الزم داریم .اینا رو بیایم حساب بکنیم:
باید ] a[1رو حساب کنیم( .یعنی مولفه با اندیس 1از )aکه میشه 3
همچنین ] b[0میشه 12
همچنین ] d[2میشه 5
و ] c[0میشه 12
حاال بریم همینها رو بندازیم توی عبارتی که صورت سوال گفته و شروع کنیم به حل:
)b[0]//d[2]**a[1]%((c[0]**2+5//2+24-10*2)//60+2
)12//5**3%((12**2+5//2+24-10*2)//60+2
اولویت اول با پرانتزه! که در خط باال رنگیش کردیم!
باز توی اون اولویت با پرانتز داخلیش هست .پس:
)12//5**3%((12**2+5//2+24-10*2)//60+2
حاال توی این پرانتز داخلی که نارنجی هست ،چندتا چیزمیز وجود داره!
که اولویت با ** است.
)12//5**3%((144+5//2+24-10*2)//60+2
خب حاال اولویت بین //و * با عملگری است که زودتر اومده (یعنی )//
)12//5**3%((144+2+24-10*2)//60+2
اینبار اولویت با * است:
)12//5**3%((144+2+24-20)//60+2
حاال توی پرانتز نارنجی رو سریع حساب کنیم [چون دیگه ساده است و میشه ]150
)12//5**3%(150//60+2
حاال نوبت میرسه به عملگر ://
)12//5**3%(2+2
حاال اون جمعِ سادهی داخل پرانتز رو انجام میدیم:
12//5**3%4
خب! حاال بین اینایی که موندن ،اولویت با ** است:
12//125%4
حاال نوبت میرسه به ://
0%4
که جواب این هم میشه .0والسّالم!
در این سوال حق استفاده از هیچ چیزی [مانند پایتون] را ندارید و فقط باید از دانش خود استفاده کنید 4
))" a=eval(input("Enter something:
پس از اینکه پایتون منتظر ما می ماند تا ورودی ای را وارد کنیم .ما عبارت زیر را وارد می کنیم .خروجی چه خواهد بود؟
Sajjad
پاسخ:
خروجی یک خطا خواهد بود
چون inputمیاد هرچی بهش بدیم رو stringدر نظر میگیره ،پس وقتی بهش میدیم
Sajjadمیاد اونو به صورت " "Sajjadدر نظر میگیره.
حاال اون evalبزرگواری میکنه و داخل اون "" رو evaluateمیکنه و میشه Sajjad
خالی! و اینو میخواد بریزه توی aکه نمیشه! چون میشه " "Sajjadرو به یک متغیری
تخصیص داد ،اما Sajjadخالی [و بدون هیچ quotationای] رو نمیشه!
در این سوال حق استفاده از هیچ چیزی [مانند پایتون] را ندارید و فقط باید از دانش خود استفاده کنید 5
توضیح کامل دهید هر یک از موارد زیر چه کاری انجام میدهند.
اگر در جایی از سوال نیاز بود که کاربر چیزی وارد کند ،فرض کنید که وارد میکند3 :
پ ب الف
)))))list(tuple(range(len((5,14 ))")' '(a=eval(eval("input )eval(15/5
هشدار :لطفاً یک کلمهای و در حد خروجی جواب ندید و توضیحِ کامل بدید.
پاسخ:
الف) خطا میده! چون گفتیم که باید بهش stringبدیم [که اینجا این کار رو نکردیم].
ب) بیاین با هم بررسی کنیم.
))")' '(a=eval(eval("input
اون قسمتی که highlightکردم ،میاد داخل double quotationرو اجرا میکنه! که در
واقع یک دستور inputاست که از کاربر ورودی میگیره! [پس عمالً منتظر میمونه تا ما
یه چیزی وارد کنیم .مثالً فرض کنید وارد میکنیم ]3
اما میدونیم به دستور inputهرچی بدیم (حتی عدد) ،اون رو stringدر نظر میگیره.
یعنی همین 3که بهش دادیم رو میاد " "3در نظر میگیره و عمالً دستور باال میشه:
))"a=eval("3
البته فرض کردیم که عدد 3رو وارد کردید! ولی هرچیز دیگه هم وارد کنید به هرحال stirng
درنظر میگیره!
و اون evalآخری هم نقشش اینه که بیاد داخل این رو اجرا کنه!
پس عمالً مقدار aرو برابر 3قرار میده! همین!
ج) دوباره بیاین باهم دقیق بررسی کنیم:
)))))list(tuple(range(len((5,14
اون تیکهای که هایالیت کردم میشه [ 2چون تاپلی که داریم lengthاِش رو حساب
میکنیم ،دو مولفه داره].
پس عمالً تا اینجا داریم:
)))list(tuple(range(2
حاال ) range(2یعنی اعداد 0و 1که به لطفِ تابع [ tupleکه هایالیتِ زرد کردم] میشه
).(0,1
و در نهایت تابع listهم که محبت میکنه همون ) (0,1که تاپل بود رو به لیست تبدیل
میکنه .همین!
پس تهش میشه ] [0,1که یک لیست است.
با در نظر گرفتن دو متغیر زیر به سواالت زیر پاسخ دهید. 6
]])]a=["Sajjad","Ali Reza",[1,2,(5,7,[4,5
)]]]"b=(1,2,3,[[[" Sajjad "],[ "Koolac.Org
الف) به aو bهر کدام )) list(range(5را اضافه کنید.
ب) عضوی که در قسمت الف اضافه کردید را حذف کنید.
پ) دو مولفه 15و 18را به هر دوشوون (هر دوشوون یعنی aو )bو به صورت یهویی
اضافه کنید.
ت) بشمارید که در هر کدام ،حرف " "Aچندبار تکرار شده است.
ث) خروجی عبارت زیر چیست؟
]a[2][2
ج) از متغیر ،bبه " "Koolac.Orgچگونه دست پیدا میکنید؟ (نحوه دسترسی به این
مولفه را بیان کنید)
پاسخ:
به وضوح میشه فهمید ،هدف از طرح سوال ،اذیت کردن بوده ،ان شاء اللّه موفق بوده باشم:
الف) به bکه نمیشه اضافه کرد چون tupleاست تغییرناپذیر (.)immutable
اما واسه aفقط کافی است بنویسیم:
)))a.append(list(range(5
خروجی خواهد شد:
]]['Sajjad', 'Ali Reza', [1, 2, (5, 7, [4, 5])], [0, 1, 2, 3, 4
ب) یکی از راههاش اینه که بنویسیم:
)(a.pop
که دقیقاً همون آخری که اضافه کردیم [همون که در قسمت الف اضافه کردیم رو میگم] رو
پاک میکنه.
یکی از راههای دیگش هم اینه که:
)))a.remove(list(range(5
پ) برای بار nاُم :نمیشه به [ tupleیعنی همون ]bچیزی اضافه کرد.
اما واسه aفقط کافی است بنویسیم:
]])]a=["Sajjad","Ali Reza",[1,2,(5,7,[4,5
)))a.append(list(range(5
)]a.extend([15,18
)print(a
خروجی:
]['Sajjad', 'Ali Reza', [1, 2, (5, 7, [4, 5])], [0, 1, 2, 3, 4], 15, 18
ت) به لطفِ دو خط کد زیر میتونیم این شمارش رو انجام بدیم:
))"print (a.count ("A
))"print (b.count ("A
اما چون خبری از Aنیست ،خروجی هر دو printمیشه .0
ث) بیاییم یه بار دیگه به aنگاه کنیم:
]])]a=["Sajjad","Ali Reza",[1,2,(5,7,[4,5
حاال بیاید اندیس 2این بندهخدا رو هایالیت زرد کنیم:
]])]a=["Sajjad","Ali Reza",[1,2,(5,7,[4,5
])][1,2,(5,7,[4,5 خب پس ] a[2میشه:
حاال از همین ] a[2دوباره قراره به مولفه با اندیس 2دسترسی پیدا کنیم .پس:
])][1,2,(5,7,[4,5
)](5,7,[4,5 پس خروجی و جواب این قسمت میشه:
ج) فقط کافی است بنویسیم:
)]print(b[3][0][1][0
اعداد 7و8و1و10و77و0و1و-1و-8و همچنین حروف " "aو " "Aو " "Bو " "bو 7
عبارت " "A0را در لیستی با اسم Koolacتعریف کنید .و بعد این لیست را sortکنید.
پاسخ:
]"Koolac=[7,8,1,10,77,0,1,-1,-8,"a","A","B","b","A0
)(Koolac.sort
)print(Koolac
خروجی:
'TypeError: '<' not supported between instances of 'str' and 'int
که در واقع خطایی است که میگه برادر عزیز ،نمیتونم رشته و عدد رو باهم sortکنم!
هر کدام از موارد زیر را ابتدا sortو سپس برعکس کنید .منظور از برعکس کرن این است 8
که مثالً ] [1,2,3را تبدیل کنیم به ][3,2,1
الف) ]"a=[1,2,"A
ب) ]b=[14,7,5,4,3,17,2.5,4,5+3j,5+4j
پ) ]c=[14,7,5,4,3,17,2.5
ت) ]"d=["Z","E","A","K","B","P
ث) ]"e=["D","A","z","b","Z","a","P
ج) ]"f=["D","A","z","b","Z","a","P","A0","P1","A00","A001","A02","A2","A003
پاسخ:
الف) همون آش و کاسهای که در تمرین 7گفتیم .خطا میده.
ب) این هم خطا میده و میگه نمیتونه عددمختلط و integerرو باهم sortکنه
پ) باالخره این بزگوار خطا نمیده!
]c=[14,7,5,4,3,17,2.5
)"======= print("======= Let's sort it
)(c.sort
)print(c
)"======= print("======= Now let's reverse it
)(c.reverse
)print(c
خروجی:
======= ======= Let's sort it
][2.5, 3, 4, 5, 7, 14, 17
======= ======= Now let's reverse it
][17, 14, 7, 5, 4, 3, 2.5
کمی حاشیه
خب باید یکم حرف بزنیم و در قالب همین تمرین ،یک نکته ای رو بگیم.
اگر این شکلی میگفتید:
]c=[14,7,5,4,3,17,2.5
)(koolac=c.sort
)print(koolac
بهتون خروجی میدهNone :
بذارید در حد دو سه خط یه توضیح بدم ،ولی قول میدم اگر پیشزمینه نداشته باشید
هیچی نمی فهمید! و اینو قطعاً بعداً که تابع رو خوندیم و خیلی جلوترها ،ما باهم دقیقاً
همینو بحث میکنیم .ولی االن این چند خط بعد رو بخونید که فقط دید بگیرید:
اون متد sortیک تابع است .این تابعِ بزرگوار یه سری کارها انجام میده ،اما چیزی رو
خروجی نمیده [اصطالحاً چیزی رو returnنمیکنه/چیزی رو برنمیگردونه] ،برای همین
ما Noneدریافت میکنیم .ولی صدالبته که کار خودش رو میکنه [یعنی sortکردن رو]!
ولی مشکلش اینه که چیزی رو خروجی نمیده و بی سرو صدا کار خودش رو میکنه.
چون چیزی خروجی نمیده ،پس وقتی خروجی همین بندهخدا (یعنی Noneکه معنیش
میشه هیچی) رو میدیم به ،koolacاین متغیر بندهخدا عمالً برابر همون ( Noneیعنی
هیچی) است .و در خط بعد وقتی printمیکنیم ،بهمون Noneنشون میده.
حاال اگر خواستیم یه خروجی بگیریم ،چه کنیم؟
میتونیم از تابع sortedاستفاده کنیم:
]c=[14,7,5,4,3,17,2.5
)koolac=sorted(c
)print(koolac
خروجی:
][2.5, 3, 4, 5, 7, 14, 17
همین سخنان گرانبهایی که گفتیم ،برای متد reverseهم برقراره و اون رو هم میشه این
شکلی نوشت:
]a=[1,2,3
)koolac=reversed(a
)print(koolac
اما ناگهان با خروجی زیر روبرو میشیم:
><list_reverseiterator object at 0x000000A1B0EC4448
اون وسط مسطها یک لغت objectمیبینیم که خیلی بعدترها ما درباره شیگرایی و
این جور چیزا صحبت میکنیم ،اما االن به نظرتون راهحل تبدیل این بنده خدا مثالً به
لیست چیست؟ [بله درسته ،تابع ]list
پس کالً میتونیم بنویسیم:
]a=[1,2,3
))koolac=list(reversed(a
)print(koolac
خروجی:
][3, 2, 1
ت) فقط کافی است بنویسیم:
]"d=["Z","E","A","K","B","P
)(d.sort
)(d.reverse
)print(d
خروجی:
]'['Z', 'P', 'K', 'E', 'B', 'A
ث) فقط کافی است بنویسیم:
]"e=["D","A","z","b","Z","a","P
)(e.sort
)(e.reverse
)print(e
خروجی:
]'['z', 'b', 'a', 'Z', 'P', 'D', 'A
توجه کنید که این تمرین به ما یاد داد که در sortکردن ،حروف بزرگ از حروف کوچیک
شاخترن و توی sortاول قرار میگیرن.
البته این نکات این شکلی به دو پول سیاه هم نمیارزه! فقط برای تمرین خوبه ،ولی اینکه
این ترتیبها رو حفظ کنید ،خیلی مفید نیست.
هر موقع الزم شد ،میتونید چک کنید دیگه!
ج) این هم از آخریش:
]"f=["D","A","z","b","Z","a","P","A0","P1","A00","A001","A02","A2","A003
)(f.sort
)(f.reverse
)print(f
خروجی:
]'['z', 'b', 'a', 'Z', 'P1', 'P', 'D', 'A2', 'A02', 'A003', 'A001', 'A00', 'A0', 'A
خداییش وقتی شروع کردم به نوشتن پاسخنامه ،تازه فهمیدم این تمرین سری 2چقدر
طوالنی بود
چون هنوز خیلی پیش نرفتیم ،نمی تونیم خیلی سواالت جوون دارتری طرح کنیم.