جواب پودمان ۳ برنامه نویسی پایتون (۲) کاروفناوری هشتم صفحه ۲۶ تا ۳۹
گام به گام پاسخ نامه و حل تمرین های کار کلاسی ، کار غیر کلاسی و پروژه پودمان 3 کار و فناوری هشتم صفحه 26 ، 27 ، 31 ، 33 ، 34 ، 35 ، 38 و 39
در این مطلب به پاسخ و جواب سوالات مقدمه ، کار کلاسی ، کار غیر کلاسی ، فعالیت ، پروژه و پرسش های صفحه ۲۶ ، ۲۷ ، ۳۱ ، ۳۳ ، ۳۴ ، ۳۵ ، ۳۶ ، ۳۸ و ۳۹ درس پودمان برنامه نویسی پایتون (۲) کتاب کاروفناوری هشتم متوسطه اول پرداخته ایم. در ادامه با بخش آموزش و پرورش ماگرتا ما همراه باشید.
بعدی: جواب پودمان ۴ الکترونیک کاروفناوری هشتم
جواب سوالات مقدمه صفحه ۲۶ پودمان ۳ کاروفناوری هشتم
۱- آیا میتوان یک ساختار دادهای را ایجاد کرد که چندین مقدار را داخل خودش ذخیره کند؟
پاسخ: بله، میتوان یک ساختار دادهای ایجاد کرد که چندین مقدار را در خود ذخیره کند. این نوع ساختار داده به عنوان آرایه یا لیست شناخته میشود و به صورت مجموعهای از عناصر با نامهای مختلف و با شمارهگذاری ترتیبی (index) در آرایه قابل دسترسی است.
۲- چگونه میتوان دادههای ورودی از کاربر را به صورت دائمی در حافظه رایانه ذخیره کرد؟
پاسخ: در زبانهای برنامهنویسی، میتوانید از فایلها یا پایگاه دادهها برای ذخیره دائمی دادههای ورودی کاربران در حافظه رایانه استفاده کنید. به عنوان مثال، در زبانهایی مانند Python، میتوانید از کتابخانههای مختلفی مانند pickle یا json برای ذخیره و بازیابی دادهها بهره ببرید. همچنین، اگر به ذخیرهسازی دادهها در پایگاه داده نیاز دارید، میتوانید از SQLite یا MySQL استفاده کنید تا دادههای ورودی را در پایگاه داده ذخیره و بازیابی کنید.
جواب کار کلاسی صفحه ۲۶ کار و فناوری هشتم پودمان برنامه نویسی پایتون
قطعه برنامه زیر را که توسط کتابخانه turtle نوشته شده است، در محیط IDLE بنویسید. خروجی آن به شکل زیر است: خطوط برنامه را تحلیل نموده و شرح دهید.
پاسخ: خط ۱: فراخوانی کتابخانه ترتل turtle برای ترسیم
خط ۲: نسبت دادن کتابخانه ترتل به یک متغیر دلخواه مانند t
خط ۳: تعیین شکل ترسیم کننده به صورت لاک پشت turtle
خط ۴: تعیین رنگ آبی blue برای ترسیم خطوط
خط ۵: تعیین سرعت ترسیم به صورت سریع fast
خط ۶: ساخت صفحه ترسیم جهت ترسیم شکل
خط ۷: تعیین ضخامت ۳ پیکسل برای ترسیم خطوط
خط ۸: ایجاد حلقه تکرار چرخش ۸ ضلعی
خط ۹: ایجاد حلقه تکرار ترسیم ۸ ضلعی
خط ۱۰: ترسیم خط راست به طول ۱۰۰ پیکسل
خط ۱۱: چرخش ۴۵ درجه ترتل به طرف راست جهت ترسیم ۸ ضلعی
خط ۱۲: چرخش ۴۵ درجه ۸ ضلعی به طرف راست و ترسیم دوباره آن
خط ۱۳: مخفی کردن ترسیم کننده لاک پشت از صفحه بعد از ترسیم
کد کامل این ترسیم را در پایین مشاهده می فرمایید: (در صورت نیاز)
import turtle
t=turtle.Turtle()
t.shape("turtle")
t.color("blue")
t.speed("fast")
screen = turtle.Screen()
screen.title("suherfe.blog.ir")
t.width(3)
for i in range(8):
for j in range(8):
t.forward(100)
t.right(45)
t.right(45)
t.hideturtle()
پاسخ دیگر: تحلیل خطوط برنامه:
import turtle
: این خط کتابخانه Turtle را وارد میکند که به ما امکان میدهد با استفاده از آن شکلها و الگوهای مختلفی را رسم کنیم.t = turtle.Turtle()
: در این خط یک شیء جدید از نوع Turtle ایجاد میشود و به متغیرt
نسبت داده میشود. این شیء نمایندهی لاکپشت است که ما با آن رسم خواهیم کرد.t.shape("turtle")
: با این خط، شکل لاکپشت را به عنوان نمایهی Turtle تعیین میکنیم. این باعث میشود که وقتی Turtle حرکت کند، به شکل یک لاکپشت دیده شود.t.color("blue")
: رنگ لاکپشت را به آبی تغییر میدهد. بنابراین، هر خطی که رسم شود، به رنگ آبی خواهد بود.t.speed("fast")
: سرعت حرکت Turtle را به “سریع” تنظیم میکند. این باعث میشود که رسم اشکال سریعتر انجام شود.screen = turtle.Screen()
: یک صفحه جدید برای رسم ایجاد میکند. این صفحه جایی است که ما شکلها را روی آن رسم خواهیم کرد.screen.title("suherfe.blog.ir")
: عنوان صفحه را به “suherfe.blog.ir” تغییر میدهد. این عنوان در نوار عنوان پنجره نمایش داده خواهد شد.t.width(3)
: عرض قلم Turtle را به 3 پیکسل تنظیم میکند. این باعث میشود خطوطی که رسم میکنیم ضخیمتر باشند.for i in range(8):
: یک حلقه تکرار برای 8 بار اجرا شدن ایجاد میکند. این حلقه برای رسم چندین الگو استفاده خواهد شد.for j in range(8):
: یک حلقه تو در تو (nested loop) برای 8 بار اجرا شدن دیگر ایجاد میکند. این حلقه برای رسم خطوط در هر تکرار از حلقه اول استفاده خواهد شد.t.forward(100)
: Turtle را به جلو 100 پیکسل حرکت میدهد و خطی به طول 100 پیکسل رسم میکند.t.right(45)
: Turtle را 45 درجه به سمت راست بچرخاند. این باعث میشود که زاویه خطوط تغییر کند و الگوهای جالبی ایجاد شود.t.right(45)
: پس از اتمام حلقه داخلی، Turtle دوباره 45 درجه به سمت راست میچرخد تا برای تکرار بعدی آماده شود.t.hideturtle()
: در نهایت، با این خط، نمایهی Turtle پنهان میشود تا فقط خطوط رسم شده قابل مشاهده باشند و شکل لاکپشت دیگر دیده نشود.
نتیجهگیری: این برنامه با استفاده از کتابخانه Turtle یک الگوی زیبا و هندسی ایجاد میکند که شامل چندین خط است که با چرخشهای 45 درجهای ترسیم شدهاند. با اجرای این کد در محیط IDLE، شما یک الگوی جذاب خواهید دید که نشاندهندهی قدرت و سادگی برنامهنویسی با استفاده از Turtle است!
توضیحات بیشتر: این کد پایتون با استفاده از کتابخانه Turtle یک شکل هشتضلعی ایجاد میکند. ابتدا یک شیء Turtle ساخته میشود و سپس شکل آن به صورت لاکپشت تنظیم و رنگ آن به آبی تغییر میکند. همچنین، سرعت حرکت آن به حالت “سریع” تنظیم میشود. سپس یک صفحه نمایش جدید برای نمایش شکل ایجاد شده و عرض خطوطی که لاکپشت رسم میکند به ۳ تغییر میکند.
سپس با استفاده از دو حلقه for، لاکپشت به صورت هشتضلعی حرکت میکند. در هر دور از حلقه داخلی، لاکپشت ۱۰۰ واحد به جلو حرکت کرده و سپس ۴۵ درجه به سمت راست میچرخد و این عمل را هشت بار تکرار میکند. پس از اتمام حلقه داخلی، لاکپشت دوباره ۴۵ درجه به راست میچرخد و این روند را دوباره انجام میدهد. در نهایت، لاکپشت پنهان شده و دیگر نمایش داده نمیشود.
جواب کار غیر کلاسی صفحه ۲۷ کار و فناوری هشتم پودمان ۳
برنامهای بنویسید که تعداد ضلعهای یک شکل هندسی و تعداد تکرار آن را از ورودی دریافت کرده و سپس طرح را به صورت کامل ترسیم کند. نتیجه را به کلاس درس ارائه دهید.
(راهنمایی: برنامه را با استفاده از متد textinput بنویسید.به این منظور از کتابخانه turtle استفاده کنید.)
پاسخ: برنامه ای که تعداد اضلاع شکل و تعداد تکرار آن را دریافت و طرح کامل را ترسیم می کند:
import turtle # وارد کردن کتابخانه turtle
# ایجاد یک شیء Turtle
laki = turtle.Turtle()
laki.shape("turtle") # تعیین شکل لاکپشت
laki.color("red") # تنظیم رنگ لاکپشت به قرمز
laki.width(3) # تعیین عرض خط به 3
laki.speed(100) # تنظیم سرعت رسم به 100
# دریافت تعداد ضلعها و تعداد تکرار از کاربر
x = int(turtle.textinput("N.Side", "Number of sides: ")) # تعداد ضلعها
y = int(turtle.textinput("repeat-polygon", "The number of repetitions: ")) # تعداد تکرار
# حلقه برای رسم چندضلعیها
for i in range(y): # تکرار برای تعداد اشکال
for j in range(x): # رسم هر ضلع از شکل
laki.forward(100) # حرکت به جلو به اندازه 100 واحد
laki.left(360 / x) # چرخش به اندازه زاویه هر ضلع
laki.left(360 / y) # چرخش برای شروع شکل بعدی
# پنهان کردن لاکپشت و بالا بردن قلم
laki.up() # بالا بردن قلم برای جلوگیری از رسم خط اضافی
laki.ht() # پنهان کردن لاکپشت
پاسخ دیگر:
import turtle
# تابع برای رسم شکل هندسی
def draw_shape(sides, repetitions):
angle = 360 / sides # محاسبه زاویه هر ضلع
for _ in range(repetitions):
for _ in range(sides):
turtle.forward(100) # حرکت به جلو به اندازه 100 واحد
turtle.right(angle) # چرخش به اندازه زاویه محاسبه شده
turtle.right(360 / repetitions) # چرخش برای شروع شکل بعدی
# دریافت تعداد ضلعها و تکرار از کاربر
sides = turtle.textinput("تعداد ضلعها", "تعداد ضلعهای شکل هندسی را وارد کنید:")
repetitions = turtle.textinput("تعداد تکرار", "تعداد تکرار شکل را وارد کنید:")
# تبدیل ورودیها به عدد صحیح
sides = int(sides)
repetitions = int(repetitions)
# تنظیمات اولیه Turtle
turtle.speed("fast") # تنظیم سرعت رسم
turtle.color("blue") # تنظیم رنگ خط
# رسم شکل هندسی
draw_shape(sides, repetitions)
turtle.hideturtle() # پنهان کردن لاکپشت در انتها
turtle.done() # پایان کار Turtle
پاسخ کار غیر کلاسی صفحه ۳۱ کاروفناوری هشتم پودمان برنامه نویسی پایتون
تحقیق کنید که کاراکتر f در خط سوم قطعه برنامهٔ بالا، چه کاربردی دارد؟
پاسخ: در پروژههای مختلف نیاز داریم متغیرها و رشتههای متنی را با هم ترکیب کنیم. به کمک فرمت کردن رشته در پایتون میتوانیم برای چاپ متغیر بین رشته متنی یک ساختار منظم ایجاد کنیم. این ساختارها به خوانایی بهتر کد کمک میکند و اصلاح و توسعه را بهبود میدهد. برای فرمت دهی رشته در پایتون از کاراکتر f استفاده می شود برای استفاده از فرمت رشته باید جایگاه متغیرها در رشته را با علامت {} (آکولاد باز و بسته) تعیین کنیم. یعنی به جای متغیرها در رشته متنی، از آکولادها استفاده میکنیم.برای فرمت کردن رشته پایتون با f کافی است قبل از رشته متنی حرف f را قرار داده و نام اصلی متغیر را مستقیماً درون {}قرار دهیم.
این کاراکتر دریافتی رشته ‘Enter Number {i+1}’ را به لیست وارد می کند.
پاسخ دیگر: کاراکتر f در خط سوم این برنامه برای فراخوانی متغیرها در رشتهها استفاده میشود. این کاراکتر به کاربر این امکان را میدهد که مقدار متغیر i+1 را به عنوان ورودی برای تابع input() هنگام اجرای برنامه وارد کند. به عبارت دیگر، این کاراکتر به صورت پویا مقادیر مختلف را در رشتهٔ ورودی نمایش میدهد.
جواب کار کلاسی صفحه ۳۳ کاروفناوری هشتم
تابعی بنویسید که دو عدد را دریافت کرده و عدد بزرگتر (بیشینه) را چاپ کند.
def bozorg(a, b):
"""این تابع دو عدد را دریافت کرده و بزرگترین آنها را برمیگرداند."""
if a > b: # بررسی اینکه آیا a بزرگتر از b است
return a # اگر بله، a را برمیگرداند
elif a < b: # بررسی اینکه آیا a کوچکتر از b است
return b # اگر بله، b را برمیگرداند
else:
return None # اگر دو عدد برابر باشند، None برمیگرداند
# دریافت ورودی از کاربر
a = int(input("عدد اول را وارد کنید: ")) # دریافت عدد اول
b = int(input("عدد دوم را وارد کنید: ")) # دریافت عدد دوم
# بررسی اینکه آیا دو عدد برابر نیستند
if a != b:
print(f'عدد بزرگتر برابر است با: {bozorg(a, b)}') # چاپ بزرگترین عدد
else:
print("دو عدد برابرند!") # در صورت برابر بودن، پیام مناسب را چاپ میکند
پاسخ کار کلاسی صفحه ۳۴ کاروفناوری هشتم پودمان ۳
در شکل رو به رو ماژولی به نام myModule نوشته شده است که شامل تابع، لیست، تاپل، سِت، و دیکشنری است. ماژول را به دو روش الف و ب در برنامه دیگری تاپل وارد و از عناصر داخل آن استفاده کنید.
پاسخ: ابتدا کدهای زیر را در محیط IDLE پایتون نوشته و آن را با نام دلخواهی مانند mymodule در یک پوشه ذخیره کنید.
def myfunction(x,y):
if x>y:
return x
else:
return y
return x+y
mylist=[10,20,30,40,50]
mytuple=('omid','reza','amir','sadegh')
myset={10,15,46,2,28,90}
person={'name':'kamran','family':'karimi','Age':21}
حال دستورات الف و ب پایین را در دو فایل پایتون نوشته و ذخیره کنید.
الف) دستور ….. import
یک محیط برنامه نویسی جدید در پایتون باز کرده و کدهای زیر را با دستور import بنویسید.سپس برنامه را در همان پوشه با نام دلخواه ذخیره کنید حال آن را با زدن کلید f5 اجرا کنید.
import myModule
print(myModule.myfunction(10,20))
print(myModule.mylist[4])
print(myModule.mytuple[2])
print(myModule.myset)
print(myModule.person['family'])
ب) دستور … from … import
محیط برنامه نویسی پایتون را باز کرده و کدهای زیر را با دستور … from … import بنویسید.سپس برنامه را در همان پوشه با نام دلخواه ذخیره کنید حال آن را با زدن کلید f5 اجرا کنید.
from mymodule import *
print(myfunction(10,20))
print(mylist[4])
print(mytuple[2])
print(myset)
print(person['family'])
نکته: در روش دوم منظور از ستاره یعنی همه عناصر داخل ماژول و لازم نیست اسم تک تک آنها را نوشته و فراخوانی کنیم.
خروجی دو برنامه بالا به صورت یکسان و مانند جواب پایین است، ولی از دو روش متفاوت استفاده شده است:
20
50
amir
{2, 10, 46, 15, 90, 28}
karimi
جواب کار کلاسی صفحه ۳۵ کار و فناوری هشتم پودمان ۳
آرایه هایی که با ماژول numpy ایجاد می شوند، از نظر سرعت و کارایی چه تفاوتی با آرایه های لیست دارند؟ در گروه خود در این باره بحث و گفت وگو کنید و نتیجه را به کلاس ارائه دهید.
پاسخ: کار کردن با لیست ها ساده تر و برای افراد مبتدی و تازه کار مناسب تر می باشد لیست می تواند انواع مختلف داده مانند متن (رشته) و عدد و… را با هم در یک جا ذخیره کند همچنین می توان عناصر آن را حذف یا اضافه کرد و قابل تغییرند. مضافاَ لیست ساختار دادهای شامل عناصر مرتب شدهای است که میتوان به هر عنصر با استفاده از یک اندیس دسترسی داشت در صورتی که بخواهیم انواع دادههای مختلف را در یک آرایه ذخیره کنیم، بهتر است از لیست استفاده شود.
اما آرایه هایی که با ماژول numpy ایجاد می شوند،از پیچیده گی بیشتری برخوردار هستند و برای ساخت آنها باید از توابع خاص استفاده کرد. آرایه میتواند عناصر یک نوع خاص دادهای را در خود نگه دارد، مانند عدد یا رشته. برای ساختن آرایه در پایتون باید از کتابخانه NumPy استفاده کرد و تغییر داده آن از طریق عملیات ریاضی صورت میگیرد.
آرایه ها می توانند داده ها را بیشتر فشرده و ذخیره کنند
آرایه ها برای ذخیره مقادیر زیاد داده مناسبتر هستند.
آرایه ها برای عملیات های عددی مناسب هستند.
اما لیست ها نمی توانند مستقیماً عملیات ریاضی را انجام دهند.
بنابراین، تفاوت اصلی بین لیست و آرایه در پایتون در این است که لیست میتواند حاوی هر نوع دادهای باشد ، در حالی که آرایه محدود به یک نوع داده است و اندازه آن ثابت است. به علاوه، تغییر اندازه لیست سادهتر از آرایه است، چون لیست میتواند عناصر را به راحتی اضافه و حذف کند، در حالی که آرایه باید با توجه به محدودیت اندازه خود تعداد عناصرش را دقیقاً تعیین کند.
اگر نیاز به ذخیره مقدار کوتاهی از آیتم ها دارید و قصد انجام عملیات ریاضی با آن ها را ندارید، استفاده از لیست بهتر است. لیست به شما این امکان را میدهد که بدون وارد کردن ماژولها یا پکیج های اضافی، دنبالهای از آیتمهای مرتب، قابل تغییر و فهرستشده را ذخیره کنید.
اگر دنباله ای بسیار طولانی از آیتم ها دارید، از یک آرایه استفاده کنید. این ساختار ذخیره سازی داده کارآمدتری را ارائه می دهد.اگر قصد انجام هر گونه عملیات عددی دارید، از یک آرایه استفاده کنید. تجزیه و تحلیل داده ها و علم داده به شدت به آرایه ها (بیشتر NumPy) متکی هستند.
با استفاده از کتابخانه NumPy، میتوان بر روی آرایههای NumPy، عملیات ریاضی مانند جمع، تفریق، ضرب و تقسیم را انجام داد، در حالی که برای لیستها این عملیاتها امکانپذیر نیست و باید از یک حلقه برای انجام آنها استفاده کرد.
لیستها اغلب برای ذخیره و مدیریت دادههایی با اندازه متغیر استفاده میشوند، در حالی که آرایهها به دلیل اندازه ثابت خود، کمتر حافظه مصرف میکنند و در برخی موارد سرعت بیشتری نسبت به لیست دارند.
به طور کلی در بسیاری از موارد پیشنهاد میشود تا از list در برنامهی خود استفاده کنید و در صورتی که در آینده نیاز به بهینه سازی کد خود داشتید، میتوانید آن را تغییر دهید. چرا که استفاده از list ها ساده تر بوده و همچنین سایر برنامه نویسان نیز با این نوع داده آشنایی کامل دارند. در صورتی که نیاز به ذخیره و مدیریت دادههایی با اندازه متغیر دارید، لیستها گزینه بهتری هستند. در صورتی که نیاز به ذخیره و مدیریت دادههایی با اندازه ثابت و یا نیاز به سرعت بالا در انجام عملیاتها دارید، آرایهها بهترین گزینه هستند.پس برای انتخاب بین لیست و آرایه، باید نیازمندیهای خود را در نظر گرفته و با توجه به ویژگیهای هر یک، تصمیم گیری کرد.
پاسخ دیگر: ماژولهای NumPy و لیستهای پایتون هر کدام ویژگیها و مزایای خاص خود را دارند. در گروه ما، درباره تفاوتهای سرعت و کارایی این دو نوع آرایه بحث کردیم و به نتایج زیر رسیدیم:
۱. سرعت و کارایی
- NumPy: آرایههای NumPy برای انجام محاسبات عددی بهینهسازی شدهاند و معمولاً سریعتر از لیستهای پایتون هستند. این به دلیل این است که NumPy از زبان C برای پیادهسازی توابع خود استفاده میکند و دادهها را به صورت متراکم در حافظه ذخیره میکند. بنابراین، عملیات ریاضی بر روی آرایههای NumPy به طور قابل توجهی سریعتر انجام میشود.
- لیستهای پایتون: لیستها انعطافپذیرتر هستند و میتوانند انواع مختلف دادهها را در خود نگه دارند، اما برای محاسبات عددی بهینه نیستند. لیستها معمولاً برای عملیات ریاضی کندترند زیرا هر عنصر در لیست به طور جداگانه مدیریت میشود و این باعث افزایش زمان پردازش میشود.
۲. نوع داده
- NumPy: آرایههای NumPy همگن هستند، به این معنی که همه عناصر باید از یک نوع داده باشند. این ویژگی باعث میشود که حافظه به طور موثرتری استفاده شود و عملیات ریاضی بر روی عناصر سریعتر انجام شود.
- لیستهای پایتون: لیستها میتوانند شامل انواع مختلف دادهها (مانند اعداد، رشتهها و اشیاء) باشند. این قابلیت باعث افزایش انعطافپذیری میشود اما همچنین ممکن است کارایی را کاهش دهد.
۳. عملکرد در محاسبات ریاضی
- NumPy: برای انجام عملیات ریاضی بر روی آرایهها، NumPy توابع و روشهای زیادی ارائه میدهد که به راحتی قابل استفاده هستند. همچنین، امکان انجام عملیات بر روی تمامی عناصر یک آرایه به صورت همزمان (عملیات عنصر به عنصر) وجود دارد.
- لیستهای پایتون: برای انجام عملیات مشابه بر روی لیستها، باید از حلقهها استفاده کرد که معمولاً کندتر است و کد بیشتری نیاز دارد.
نتیجهگیری: به طور کلی، اگر شما نیاز دارید که محاسبات عددی سنگین انجام دهید یا با دادههای بزرگ کار کنید، استفاده از آرایههای NumPy بهترین انتخاب است. اما اگر فقط نیاز دارید که مجموعهای از دادهها را ذخیره کنید و نیازی به عملیات ریاضی پیچیده ندارید، لیستهای پایتون ممکن است گزینه مناسبتری باشند.
جواب تمرین های فعالیت صفحه ۳۶ کار و فناوری هشتم پودمان ۳
۱- دو قطعه برنامه الف و ب را با یکدیگر مقایسه کنید.
پاسخ: برنامه الف از یک حلقه for برای دریافت هر عنصر از list1 استفاده میکند و سپس با استفاده از شرط if بررسی میکند که آیا عدد زوج است یا خیر. اگر عدد زوج باشد، آن را به list2 اضافه میکند و در نهایت list2 را چاپ میکند.
در برنامه ب، list2 با یک خط مقداردهی میشود. در اینجا، با استفاده از یک حلقه for و یک شرط if، تمام عناصر list1 برای بررسی زوج بودن مورد بررسی قرار میگیرند و سپس تمام عناصر زوج به list2 اضافه میشوند. در پایان، list2 چاپ میشود.
بنابراین، هر دو برنامه به یک نتیجه مشابه میرسند، اما روشهای به دست آوردن آنها متفاوت است.
۲- فرض کنید یک لیست حاوی تعدادی عدد صحیح داریم. توسط comprehension list عناصر آن را پیمایش کنید. در صورتی که عنصر زوج پیدا شد، در لیست دوم عبارت Even را اضافه و در غیر این صورت عبارت Odd را اضافه کنید. در انتها لیست دوم را چاپ کنید.
پاسخ: فرض کنید که لیست اول اعداد صحیح بین 1تا 10 باشد. برنامه به صورت زیر خواهد بود:
list1=[1,2,3,4,5,6,7,8,9,10]list2=[‘Even’ if x%2==0 else ‘Odd’ for x in list1 ]print(list2)
۳- تابعی بنویسید که یک لیست شامل تعدادی عدد را دریافت کند و با پیمایش عناصر آن، تعداد عناصر زوج لیست را توسط دستور return برگرداند. سپس تابع را فراخوانی کنید.
پاسخ: این کد به شما این امکان را میدهد که تعداد اعداد زوج موجود در یک لیست را به راحتی شمارش کنید.
def count_even_numbers(numbers):
"""این تابع تعداد اعداد زوج را در لیست ورودی شمارش میکند."""
count = 0 # متغیر شمارنده برای تعداد اعداد زوج
for num in numbers: # حلقه برای بررسی هر عدد در لیست
if num % 2 == 0: # بررسی اینکه آیا عدد زوج است
count += 1 # افزایش شمارنده در صورت زوج بودن
return count # برگرداندن تعداد اعداد زوج
# فراخوانی تابع مورد نظر
my_list = [1, 2, 3, 4, 5, 6] # لیست اعداد برای بررسی
result = count_even_numbers(my_list) # فراخوانی تابع و ذخیره نتیجه
print("تعداد اعداد زوج برابر است با:", result) # چاپ نتیجه
توضیحات کد بالا:
- تعریف تابع: تابع
count_even_numbers
یک پارامتر به نامnumbers
میگیرد که نماینده لیستی از اعداد است. - شمارنده: متغیر
count
برای شمارش تعداد اعداد زوج استفاده میشود و در ابتدا مقدار آن صفر است. - حلقه for: با استفاده از یک حلقه
for
، هر عدد در لیست بررسی میشود. - شرط برای بررسی زوج بودن:
- با استفاده از شرط
if num % 2 == 0
، بررسی میشود که آیا عدد زوج است یا خیر. - اگر عدد زوج باشد، شمارنده
count
افزایش مییابد.
- با استفاده از شرط
- برگرداندن نتیجه: در انتها، تعداد اعداد زوج برگردانده میشود.
- فراخوانی تابع:
- یک لیست به نام
my_list
تعریف شده است که شامل اعداد مختلف است. - تابع
count_even_numbers
با این لیست فراخوانی میشود و نتیجه در متغیرresult
ذخیره میشود.
- یک لیست به نام
- چاپ نتیجه: در نهایت، تعداد اعداد زوج با استفاده از دستور
print
نمایش داده میشود.
۴- تابعی بنویسید که یک لیست شامل اسامی همکلاسیهایتان را دریافت کرده، با پیمایش عناصر آن، تعداد عناصر لیست که شامل حرف m باشد را توسط دستور return برگرداند. سپس تابع را فراخوانی کنید.
پاسخ: کد زیر تابع count_names_with_m را تعریف میکند که یک لیست از نامها را به عنوان ورودی دریافت میکند. سپس با استفاده از حلقه for، هر نام را بررسی میکند و اگر حروف “m” یا “M” در آن وجود داشت، تعداد را ۱ واحد افزایش میدهد. در نهایت، تعداد نامهای شامل حرف “m” را با استفاده از دستور return برمیگرداند.
سپس لیست classmates را با دادن به عنوان ورودی به تابع فراخوانی میکنید و نتایج را به عنوان خروجی چاپ میکنید.
def count_names_with_m(names):
"""این تابع تعداد نامهایی را که شامل حرف 'm' یا 'M' هستند، شمارش میکند."""
count = 0 # متغیر شمارنده برای تعداد نامها
for name in names: # حلقه برای بررسی هر نام در لیست
if 'm' in name or 'M' in name: # بررسی وجود حرف 'm' یا 'M' در نام
count += 1 # افزایش شمارنده در صورت وجود حرف
return count # برگرداندن تعداد نامها
# لیست همکلاسیها
classmates = ['Ali', 'Mohammad', 'Mohsen', 'Sasan', 'Amin']
# فراخوانی تابع و ذخیره نتیجه
result = count_names_with_m(classmates)
# چاپ نتیجه
print(result)
توضیحات کد بالا:
- تعریف تابع: تابع
count_names_with_m
یک پارامتر به نامnames
میگیرد که نماینده لیستی از نامها است. - شمارنده: متغیر
count
برای شمارش تعداد نامهایی که شامل حرف ‘m’ یا ‘M’ هستند، استفاده میشود و در ابتدا مقدار آن صفر است. - حلقه for: با استفاده از یک حلقه
for
، هر نام در لیست بررسی میشود. - شرط برای بررسی وجود حرف:
- با استفاده از شرط
if 'm' in name or 'M' in name
، بررسی میشود که آیا نام شامل حرف ‘m’ یا ‘M’ است. - اگر این شرط برقرار باشد، شمارنده
count
افزایش مییابد.
- با استفاده از شرط
- برگرداندن نتیجه: در انتها، تعداد نامهایی که شامل حرف مورد نظر هستند، برگردانده میشود.
- لیست همکلاسیها: یک لیست به نام
classmates
تعریف شده است که شامل نامهای مختلف همکلاسیها است. - فراخوانی تابع: تابع
count_names_with_m
با لیست همکلاسیها فراخوانی میشود و نتیجه در متغیرresult
ذخیره میشود. - چاپ نتیجه: در نهایت، تعداد نامهایی که شامل حرف ‘m’ یا ‘M’ هستند با استفاده از دستور
print
نمایش داده میشود.
حل کار کلاسی صفحه ۳۸ کار و فناوری هشتم
دو قطعه برنامه بالا را اجرا و خروجی آنها را با هم مقایسه کنید.
پاسخ: برای اینکه برنامه اول به درستی کار کند، ابتدا باید در درایو D رایانه، پوشهای به نام amir ایجاد کنیم. سپس پس از نوشتن کد، برنامه را اجرا میکنیم. نتیجه این خواهد بود که عبارت «omid is a good student.» در فایل myFile.txt چاپ میشود.
برای برنامه دوم نیز به همین صورت عمل میشود و در نهایت عبارت «Ali is a Good Student!» در فایل myFile.txt چاپ خواهد شد.
تفاوت این دو برنامه در این است که در برنامه اول، عبارت «omid is a good student.» به متن موجود در فایل اضافه میشود و اگر متنی قبلاً در فایل وجود داشته باشد، تغییر نخواهد کرد. اما در برنامه دوم، عبارت «Ali is a Good Student!» جایگزین متن قبلی میشود و هر آنچه که در myFile.txt بوده است قبل از این عبارت حذف میگردد.
پاسخ کار کلاسی صفحه ۳۹ کاروفناوری هشتم پودمان برنامه نویسی پایتون
۱- تابعی بنویسید که ولتاژ دو سر یک لامپ رشتهای و مقاومت آن را دریافت کرده و شدت جریانی که از آن عبور میکند را برگرداند. سپس آن را فراخوانی کنید.
پاسخ: این کد به شما این امکان را میدهد که با وارد کردن ولتاژ و مقاومت، میزان جریان عبوری از یک لامپ را محاسبه کنید.
def current(voltage, resistance):
"""این تابع مقدار جریان الکتریکی را با استفاده از ولتاژ و مقاومت محاسبه میکند."""
current = voltage / resistance # محاسبه جریان با استفاده از فرمول Ohm's Law
return current # برگرداندن مقدار جریان
# دریافت ولتاژ از کاربر
voltage = float(input("ولتاژ دو سر لامپ را به ولت وارد کنید: ")) # تبدیل ورودی به عدد اعشاری
# دریافت مقاومت از کاربر
resistance = float(input("مقاومت دو سر لامپ را به اهم وارد کنید: ")) # تبدیل ورودی به عدد اعشاری
# فراخوانی تابع و ذخیره نتیجه
result = current(voltage, resistance)
# چاپ نتیجه
print("میزان جریان عبوری از لامپ برابر است با", result, "آمپر.")
توضیحات کد بالا:
- تعریف تابع: تابع
current
دو پارامتر به نامهایvoltage
وresistance
میگیرد که نماینده ولتاژ و مقاومت هستند. - محاسبه جریان: با استفاده از فرمول قانون اُهم (Ohm’s Law)، مقدار جریان الکتریکی محاسبه میشود:
- current=voltageresistancecurrent=resistancevoltage
- برگرداندن مقدار جریان: در انتها، مقدار محاسبه شده جریان برگردانده میشود.
- دریافت ولتاژ: با استفاده از
input()
، ولتاژ دو سر لامپ از کاربر دریافت میشود و به نوع عدد اعشاری (float
) تبدیل میشود. - دریافت مقاومت: به همین ترتیب، مقاومت دو سر لامپ نیز از کاربر دریافت و به نوع عدد اعشاری تبدیل میشود.
- فراخوانی تابع: تابع
current
با ورودیهای ولتاژ و مقاومت فراخوانی میشود و نتیجه در متغیرresult
ذخیره میشود. - چاپ نتیجه: در نهایت، میزان جریان عبوری از لامپ با استفاده از دستور
print
نمایش داده میشود.
۲- با استفاده از رابطه فیثاغورس، تابعی بنویسید که سه عدد را به عنوان اضلاع یک مثلث، دریافت کرده و تشخیص دهد که آیا یک مثلث قائم الزاویه تشکیل می دهند؛ یا خیر؟ سپس آن را فراخوانی کنید.
پاسخ: این کد به شما این امکان را میدهد که با وارد کردن طول اضلاع یک مثلث، بررسی کنید که آیا آن مثلث قائم الزاویه است یا خیر.
def is_right_triangle(a, b, c):
"""این تابع بررسی میکند که آیا سه ضلع داده شده یک مثلث قائم الزاویه را تشکیل میدهند یا خیر."""
# بررسی شرط مثلث قائم الزاویه با استفاده از قضیه فیثاغورس
if a * a + b * b == c * c or a * a + c * c == b * b or b * b + c * c == a * a:
return True # اگر مثلث قائم الزاویه باشد، True برمیگرداند
else:
return False # در غیر این صورت، False برمیگرداند
# دریافت طول اضلاع مثلث از کاربر
a = int(input("ضلع اول را وارد کنید: ")) # تبدیل ورودی به عدد صحیح
b = int(input("ضلع دوم را وارد کنید: ")) # تبدیل ورودی به عدد صحیح
c = int(input("ضلع سوم را وارد کنید: ")) # تبدیل ورودی به عدد صحیح
# فراخوانی تابع برای بررسی مثلث قائم الزاویه
result = is_right_triangle(a, b, c)
# چاپ نتیجه
if result:
print("بله، مثلث قائم الزاویه است!")
else:
print("خیر، مثلث قائم الزاویه نیست!")
توضیحات کد بالا:
- تعریف تابع: تابع
is_right_triangle
سه پارامتر به نامهایa
،b
وc
میگیرد که نماینده طول اضلاع مثلث هستند. - شرط بررسی مثلث قائم الزاویه: با استفاده از قضیه فیثاغورس، بررسی میشود که آیا سه ضلع داده شده میتوانند یک مثلث قائم الزاویه تشکیل دهند یا خیر.
- شرطها به این صورت هستند:
- a2+b2=c2a2+b2=c2
- a2+c2=b2a2+c2=b2
- b2+c2=a2b2+c2=a2
- شرطها به این صورت هستند:
- برگرداندن نتیجه: اگر یکی از شرایط برقرار باشد، تابع
True
برمیگرداند و در غیر این صورتFalse
. - دریافت طول اضلاع: با استفاده از
input()
، طول سه ضلع مثلث از کاربر دریافت میشود و به نوع عدد صحیح (int
) تبدیل میشود. - فراخوانی تابع: تابع
is_right_triangle
با ورودیهای طول اضلاع فراخوانی میشود و نتیجه در متغیرresult
ذخیره میشود. - چاپ نتیجه: در نهایت، با استفاده از دستور
print
، نتیجه بررسی نمایش داده میشود که آیا مثلث قائم الزاویه است یا خیر.
جواب پروژه پودمان برنامه نویسی پایتون صفحه ۳۹ کاروفناوری هشتم
الف) برنامهای بنویسید که با اجرای آن منویی با گزینههای زیر ظاهر شود.
زمانی که کاربر دکمههای a تا d از صفحه کلید رایانه را فشار دهد، دستورهای داخل منو توسط برنامه اجرا میشود و به طور مداوم منو ظاهر میشود. هنگامی که کاربر حرف e را فشار میدهد، از برنامه خارج شده و منو نمایش داده نمیشود.
پاسخ: ابتدا تابع مورد نظر را می نویسیم:
# لیست برای ذخیره دادهها
data_list = []
def add_number():
"""این تابع یک عدد را از کاربر دریافت کرده و به لیست اضافه میکند."""
number = input("عدد خود را وارد کنید: ") # دریافت عدد از کاربر
data_list.append(number) # اضافه کردن عدد به لیست
def remove_number():
"""این تابع یک عدد را از کاربر دریافت کرده و در صورت وجود آن را از لیست حذف میکند."""
number = input("عددی که میخواهید از لیست حذف کنید را وارد کنید: ") # دریافت عدد از کاربر
if number in data_list: # بررسی وجود عدد در لیست
data_list.remove(number) # حذف عدد از لیست
else:
print("عدد در لیست نمیباشد.") # پیام در صورت عدم وجود عدد
def show_list():
"""این تابع محتویات لیست را نمایش میدهد."""
print("اعداد موجود در لیست:")
for number in data_list: # حلقه برای نمایش هر عدد در لیست
print(number) # چاپ عدد
def save_data():
"""این تابع دادههای موجود در لیست را در یک فایل متنی ذخیره میکند."""
file = open("myFile.txt", "w") # باز کردن فایل برای نوشتن
for number in data_list: # حلقه برای نوشتن هر عدد در فایل
file.write(number + "\n") # نوشتن عدد به همراه یک خط جدید
file.close() # بستن فایل
print("دادهها در فایل myFile.txt ذخیره گردید!") # پیام تایید ذخیرهسازی
توضیحات کد بالا:
- تعریف لیست:
data_list
برای ذخیره دادهها (اعداد) تعریف شده است. - تابع
add_number
:- این تابع یک عدد را از کاربر دریافت کرده و به
data_list
اضافه میکند.
- این تابع یک عدد را از کاربر دریافت کرده و به
- تابع
remove_number
:- این تابع یک عدد را از کاربر دریافت کرده و بررسی میکند که آیا آن عدد در
data_list
وجود دارد یا خیر. - اگر عدد وجود داشته باشد، آن را حذف میکند و اگر وجود نداشته باشد، پیام مناسبی چاپ میکند.
- این تابع یک عدد را از کاربر دریافت کرده و بررسی میکند که آیا آن عدد در
- تابع
show_list
:- این تابع محتویات
data_list
را نمایش میدهد و هر عدد موجود در لیست را چاپ میکند.
- این تابع محتویات
- تابع
save_data
:- این تابع دادههای موجود در
data_list
را در یک فایل متنی به نامmyFile.txt
ذخیره میکند. - ابتدا فایل باز میشود، سپس هر عدد به همراه یک خط جدید نوشته میشود و در نهایت فایل بسته میشود.
- این تابع دادههای موجود در
سپس آن را در فایلی به نام myFunction به پسوند پایتون ذخیره می کنیم. در برنامه زیر را در فایلی دیگر به نام project می نویسیم:
from myFunction import * # وارد کردن تمامی توابع از ماژول myFunction
while True:
# نمایش منوی اصلی
print("منو:")
print("a) عدد را به لیست اضافه کن")
print("b) عدد را از لیست حذف کن")
print("c) دادههای لیست را نمایش بده")
print("d) لیست را در یک فایل ذخیره کن")
print("e) خروج")
choice = input("گزینهی خود را انتخاب کنید: ") # دریافت انتخاب کاربر
# بررسی انتخاب کاربر و اجرای تابع مربوطه
if choice == "a":
add_number() # افزودن عدد به لیست
elif choice == "b":
remove_number() # حذف عدد از لیست
elif choice == "c":
show_list() # نمایش دادههای لیست
elif choice == "d":
save_data() # ذخیرهسازی لیست در فایل
elif choice == "e":
print("از برنامه خارج شدید.") # پیام خروج
break # خروج از حلقه
else:
print("انتخابتان اشتباه است، دوباره انتخاب کنید.") # پیام در صورت انتخاب نادرست
توضیحات کد بالا:
- وارد کردن توابع:
from myFunction import *
تمامی توابع موجود در ماژولmyFunction
را وارد میکند تا بتوان از آنها استفاده کرد. - حلقه بیپایان:
while True:
یک حلقه بیپایان ایجاد میکند که تا زمانی که کاربر تصمیم به خروج نگیرد، ادامه خواهد داشت. - نمایش منو:
- منوی اصلی با گزینههای مختلف برای کاربر نمایش داده میشود.
- گزینهها شامل افزودن عدد، حذف عدد، نمایش دادههای لیست، ذخیرهسازی لیست در فایل و خروج از برنامه هستند.
- دریافت انتخاب کاربر: با استفاده از
input()
، انتخاب کاربر دریافت میشود. - بررسی انتخاب کاربر:
- با استفاده از شرطهای
if
وelif
، بررسی میشود که کاربر کدام گزینه را انتخاب کرده است و تابع مربوط به آن گزینه فراخوانی میشود. - اگر کاربر گزینه “e” را انتخاب کند، پیام خروج نمایش داده میشود و حلقه با استفاده از
break
متوقف میشود. - در صورت انتخاب نادرست، پیام مناسبی چاپ میشود.
- با استفاده از شرطهای
ب) با توجه به مطالبی که در پودمان الگوریتم آموختهاید، قبل از نوشتن برنامه، الگوریتم آن را به دو روش شبه دستور و نمودار روندنما رسم کنید.
راهنمایی: برای هر کدام از موارد اضافه کردن، حذف و نمایش دادههای لیست، تابعی جداگانه بنویسید و آن را فراخوانی کنید. در پایان توابع را داخل ماژولی ذخیره کرده و آن را در برنامه خودتان import کنید.
پاسخ: الف) روش شبه دستور:
برای ماژول myFunction:
- یک لیست خالی به نام
data_list
ایجاد کنید. - یک حلقه بنویسید تا برنامه به طور مداوم اجرا شود تا زمانی که کاربر دکمه “e” را فشار دهد و از برنامه خارج شود.
- در هر مرحله، گزینه کاربر را دریافت کرده و بر اساس انتخاب او، عملیات مناسب را انجام دهید:
- افزودن یک عدد به لیست
- حذف یک عدد از لیست
- نمایش تمامی دادههای موجود در لیست
- ذخیرهسازی دادهها در یک فایل
- خروج از برنامه
- در پایان هر مرحله، وضعیت فعلی لیست یا پیامی که باید نمایش داده شود را چاپ کنید.
برای ماژول project:
شروع
فراخوانی ماژول myFunction
حلقه اصلی:
- دریافت ورودی از کاربر
- اگر ورودی برابر با “a” بود:
- افزودن عدد به لیست
- اگر ورودی برابر با “b” بود:
- حذف عدد از لیست
- اگر ورودی برابر با “c” بود:
- نمایش تمامی دادههای موجود در لیست
- اگر ورودی برابر با “d” بود:
- ذخیرهسازی دادهها در یک فایل
- اگر ورودی برابر با “e” بود:
- خروج از حلقه
پایان حلقه
پایان
ب) نمودار روندنما:
برای ماژول myFunction: در تصویر زیر می توانید مشاهده کنید:
برای ماژول project: در تصویر زیر می توانید مشاهده کنید:
همچنین بخوانید: جواب پودمان الکترونیک کاروفناوری هشتم
توجه: شما دانش آموز پایه هشتم متوسطه اول می توانید برای دسترسی سریع و آسان تر به جواب سوالات پودمان های کتاب کار و فناوری پایه هشتم متوسطه اول ، در انتهای عنوان خود عبارت «ماگرتا» را نیز در گوگل جستجو کنید.
در انتها امیدواریم که مقاله جواب سوالات بارش فکری و پرسش های پودمان ۳ برنامه نویسی پایتون ۲ کتاب کار و فناوری هشتم ، برای شما دانش آموزان عزیز مفید بوده باشد.