جلسه اول
به نام خدا
درسنامه
آموزش جامع انواع داده (Types) در پایتون
۱. مقدمه
در پایتون، هر مقداری دارای یک نوع داده (Type) است که مشخص میکند:
- چگونه در حافظه ذخیره شود
- چه عملیاتی روی آن مجاز است
- چگونه با سایر دادهها تعامل کند
۲. انواع اصلی دادهها (Basic Types)
۲.۱. اعداد صحیح (Integer)
age = 25temperature = -5count = 0۲.۲. اعداد اعشاری (Float)
price = 19.99temperature = -2.5weight = 65.0۲.۳. رشتهها (String)
name = "Sara"message = 'Hello World'number_as_string = "123"۳. عملیاتهای ریاضی و نوع نتیجه
۳.۱. عملیات با اعداد صحیح
a = 10b = 3
print(a + b) # 13 (int)print(a - b) # 7 (int)print(a * b) # 30 (int)print(a / b) # 3.3333... (float!)print(a // b) # 3 (int - تقسیم صحیح)print(a % b) # 1 (int - باقیمانده)نکته: اگر دقت کنید جمع و تفریق و ضرب دوباره به عدد ختم شدند. ما فقط کافی است وقت هایی که بحث تقسیم پیش میآید خیلی دقت کنیم که به باگ نخوریم.
نکته: این مورد
print(a // b)دقیقا معادل حرف جلسه قبل است که صحبت کردیم. میتوانید تقسیم کنیدو سپس جز صحیح بگیرید. این دو نتایج یکسان خواهند داشتprint( int(a / b) )
۳.۲. نکته مهم در مورد تقسیم
# تقسیم همیشه float برمیگرداندprint(10 / 5) # 2.0 (نه 2)print(10 / 3) # 3.3333...
# برای تقسیم صحیح از // استفاده کنیدprint(10 // 3) # 3۴. دریافت ورودی و تبدیل نوع داده
۴.۱. تابع input
# input همیشه string برمیگرداندname = input("Enter your name: ") # اگر کاربر "Ali" وارد کندprint(type(name)) # <class 'str'>
age = input("Enter your age: ") # حتی اگر کاربر عدد 25 وارد کندprint(type(age)) # باز هم <class 'str'> است۴.۲. تبدیل نوعهای مختلف (Type Conversion)
تبدیل به عدد صحیح (int)
# String به Inttext_number = "123"number = int(text_number) # 123
# Float به Intx = 10.7y = int(x) # 10 (قسمت اعشار حذف میشود)تبدیل به اعشاری (float)
# String به Floatprice = "19.99"number = float(price) # 19.99
# Int به Floatx = 10y = float(x) # 10.0تبدیل به رشته (str)
age = 25message = "I am " + str(age) + " years old"# یا بهترmessage = f"I am {age} years old"۵. خطاهای رایج و راهحلها
۵.۱. خطای ترکیب string و عدد
age = 25# این خطا میدهدmessage = "I am " + age# TypeError: can only concatenate str (not "int") to str
# راهحل درستmessage = "I am " + str(age) # تبدیل به string۵.۲. خطای تبدیل string نامعتبر به عدد
price = "twelve"# این خطا میدهدnumber = int(price)# ValueError: invalid literal for int() with base 10: 'twelve'
price = "100$"# این هم خطا میدهدnumber = int(price)# ValueError: invalid literal for int() with base 10: '100$'۶. مثالهای کاربردی
۶.۱. محاسبه میانگین نمرات
score1 = float(input("Enter first score: "))score2 = float(input("Enter second score: "))score3 = float(input("Enter third score: "))
average = (score1 + score2 + score3) / 3
print("Your average is: " + str(average))۶.۲. محاسبه تخفیف
price = int(input("Enter price: "))
discount = price * 0.2final_price = price - discount
print("Original price: " + str(price) )print("Discount: " + str(discount) )print("Final price: " + str(final_price) )۷. نکات مهم
- همیشه قبل از عملیات، از یکسان بودن نوع دادهها مطمئن شوید
- برای نمایش اعداد در متن، آنها را به string تبدیل کنید
- تابع input همیشه string برمیگرداند
- تقسیم (/) همیشه float برمیگرداند
- برای تبدیل string به عدد، فقط کاراکترهای عددی مجاز هستند
آموزش حلقه (While) در پایتون
مقدمه
حلقه while در پایتون شبیه به دستور if است، با این تفاوت که کد داخل آن تا زمانی که شرط برقرار باشد، به طور مداوم اجرا میشود.
ساختار پایه
while condition: # code to be executedتوضیح عملکرد
حلقه while تا زمانی که شرط آن True باشد، به اجرای کدهای داخل خود ادامه میدهد. به محض اینکه شرط False شود، از حلقه خارج میشود.
مثال ۱: محاسبه خطا
error = 50.0while error > 1: error = error / 4 print(f"Error value: {error}")خروجی:
Error value: 12.5Error value: 3.125Error value: 0.78125مثال ۲: تصحیح انحراف
offset = 8while offset != 0: print("Correcting...") offset = offset - 1 print(f"Current offset: {offset}")خروجی:
Correcting...Current offset: 7Correcting...Current offset: 6Correcting...Current offset: 5...نکات مهم
- حلقه بینهایت: اگر شرط حلقه همیشه
Trueباشد، حلقه به صورت بینهایت اجرا میشود. برای مثال:
while True: print("This loop will never stop!")-
توقف برنامه: برای توقف برنامه، میتوانید از کلیدهای
Ctrl + Cاستفاده کنید. -
بهروزرسانی شرط: همیشه مطمئن شوید که در داخل حلقه، متغیری که در شرط استفاده میشود تغییر میکند، در غیر این صورت حلقه بینهایت خواهد شد.
کاربردهای عملی
- کنترل سیستمها
- محاسبات تکراری
- ==مهم ترین نکته: پردازش دادهها تا رسیدن به یک شرط خاص==
- خواندن ورودی از کاربر تا دریافت مقدار صحیح
تمرین پیشنهادی
سعی کنید برنامهای بنویسید که عددی را از کاربر دریافت کند و تا زمانی که عدد وارد شده منفی است، درخواست ورود عدد جدید کند.
number = int(input("Please enter a positive number: "))while number < 0: print("The number is negative!") number = int(input("Please enter a positive number: "))print(f"The positive number entered: {number}")الگوی متداول شمارش در while
counter = 0 # مقداردهی اولیه شمارندهwhile counter < n: # شرط تکرار print(f"Counter is: {counter}") counter = counter + 1 # افزایش شمارندهاین الگو معادل دستور for زیر است:
for counter in range(n): print(f"Counter is: {counter}")تمرین پیشنهادی
با استفاده از الگوی بالا، برنامهای بنویسید که اعداد زوج کمتر از 10 را چاپ کند:
counter = 0while counter < 10: if counter % 2 == 0: print(counter) counter = counter + 1تفاوتهای اصلی for و while
در
forاگر دقت کنید ما یک بخش داریم که به شمارش تعداد بار کار انجام شده کمک می کند. در حالی که درwhileما میخواهیم کاری را انقدر انجام دهیم تا یک چیزی مانع آن شود.
مثال: دکمه ویس تلگرام
فرض کنید ما برنامه نویس تلگرام هستیم. و میخواهیم تا زمانی که انگشت روی دکمه میکروفون نگه داشته میشود صدا ضبط شب شود.
is_voice_button_pushed = truewhile is_voice_button_pushed: record() is_voice_button_pushed = check_button_pushed()در این وضعیت اصلا شمردن معنی ندارد.
مثال: میانگین گرفتن از نمرات کلاس
در این سناریو ما میدانیم کلاس چند نفر دارد. پس فقط کافی است از روی لیست کلاس بخوانیم چند نفر دارد و اسم نفر i اُم بخوانیم و نمره اش را وارد کنیم
for i in range(32): vorood_nomreye_i_omin_shakhs(i)در این سناریو شمردن کمک میکند و راه را راحت تر میکند ما از روی شماره جلو برویم.
سوالات
تبدیل دما
امیرمهدی دانشآموز کوشا و تلاشگری است که به درس فیزیک و آزمایشهای آن علاقه ویژهای دارد و هر لحظه در پی کشف و انجام آزمایشهای جدید است. اما متاسفانه در مدرسه آنها فقط یک دماسنج وجود دارد که آن هم فقط درجهبندی دمایی فارنهایت را نمایش میدهد. با توجه به اینکه اکثر آزمایشهای امیرمهدی با دما سروکار دارد و او برای اکثر آزمایشها و فرمولهای فیزیک به دمای یک جسم در مقیاسهای سلسیوس (سانتیگراد) و کلوین نیاز دارد، از شما میخواهیم به امیرمهدی کمک کنید و برنامه ای بنویسید که با گرفتن دمای یک جسم در مقیاس فارنهایت، دمای آن را در مقیاسهای سلسیوس و کلوین نمایش دهد.
یادآوری: از دبیرستان به خاطر دارید که برای روابط زیر بین مقیاسهای سلسیوس، فارنهایت و کلوین برقرار است:
ورودی
ورودی تنها شامل یک خط است که در آن عدد صحیح F که نشاندهنده دمای جسم در مقیاس فارنهایت است، آمدهاست.
خروجی
خروجی برنامهی شما باید شامل یک خط باشد که در آن، ابتدا معادل F در مقیاس سلسیوس و سپس معادل آن در مقیاس کلوین با فاصله از هم جدا شده باشند.(هردو عدد باید دقیقا با ۳ رقم اعشار نمایش داده شوند.)
مثال
نمونه ۱
ورودی
32خروجی
0.000 273.000نمونه ۲
ورودی
-210خروجی
-134.444 138.556جواب
def convert_temperature(F): C = (F - 32) * 5/9 K = C + 273 output = str(C)+ " " + str(K) print(output)
# دریافت ورودیF = float(input())convert_temperature(F)معادله درجه دو
معادله درجه دوم زیر را در نظر بگیرید،
ورودی
ورودی شامل سه خط است که به ترتیب شامل مقادیرa,b,c میباشد. تضمین میشود که هر سه ضریب همزمان صفر نباشند.
خروجی
در صورتی که معادله دو جواب متمایز دارد، دو جواب را به ترتیب صعودی چاپ کند (تا سه رقم اعشار)، در صورتی که یک جواب دارد، آن جواب را چاپ کند (تا سه رقم اعشار)، در صورتی که هیچ جواب حقیقیای ندارد، عبارت IMPOSSIBLE را چاپ کند.
نکته مهم
در این سوال شرط «aa مخالف صفر» و «bb مخالف صفر» برداشته شده است و برنامه شما باید این شرط را چک کند و در این حالت نیز باید بتواند جواب معادله را محاسبه کند
مثال
نمونه ۱
ورودی
530خروجی
-0.6000.000نمونه ۲
ورودی
03-5.4خروجی
1.800نمونه ۳
ورودی
001خروجی
IMPOSSIBLEجواب
def solve_quadratic(a, b, c): # حالت اول: معادله درجه دو (a ≠ 0) if a != 0: delta = b*b - 4*a*c if delta > 0: x1 = (-b - (delta ** 0.5)) / (2*a) x2 = (-b + (delta ** 0.5)) / (2*a) print(f"{min(x1, x2):.3f}") print(f"{max(x1, x2):.3f}") elif delta == 0: x = -b / (2*a) print(f"{x:.3f}") else: print("IMPOSSIBLE")
# حالت دوم: معادله درجه یک (a = 0, b ≠ 0) elif b != 0: x = -c / b print(f"{x:.3f}")
# حالت سوم: معادله ثابت (a = 0, b = 0) elif c == 0: print("0.000") else: print("IMPOSSIBLE")# دریافت ورودیa = float(input())b = float(input())c = float(input())solve_quadratic(a, b, c)جمع ارقام
علی تازه با برنامهنویسی آشنا شده است. برای تمرین، میخواهد برنامهای بنویسد که جمع ارقام یک عدد را محاسبه کند. به او کمک کنید تا این مسئله را حل کند.
ورودی
ورودی شامل یک خط است که در آن یک عدد صحیح n آمده است.
خروجی
در خروجی باید جمع ارقام عدد n را چاپ کنید.
مثال
نمونه ۱
ورودی
123خروجی
6نمونه ۲
ورودی
5040خروجی
9نمونه ۳
ورودی
0خروجی
0راهنمایی
برای جدا کردن ارقام یک عدد میتوانید از عملیاتهای تقسیم (/) و باقیمانده (%) استفاده کنید.
ماژول به 10 یکان عدد را به ما میدهد.
yekan = a%10همچنین تقسیم عدد به ده در واقع یک رقم از سمت راست حذف میکند.
با این فرمول مثلا اگر رقم صدگان یک عدد را بخواهیم ابتدا باید آنرا تقسیم به صد کنیم بعد ماژول به ده بگیریم

جواب
def sum_digits_math(n): # محاسبه مجموع # 123 12 1 0 # 3 2 1 total = 3+2+1 total = 0 while n > 0: digit = n % 10 # جدا کردن رقم سمت راست total = total + digit n = int(n / 10) # حذف رقم سمت راست
# چاپ نتیجه print(total)
n = int(input())sum_digits_math(n) # راه حل دوماتل متل kتوله
حسنی و n−1 نفر از دوستانش دور یک دایره نشسته و شروع به انجام بازی اتلمتل kتوله میکنند. شیوه انجام بازی این است که حسنی به عنوان نفر اول میگوید “سلام!”. بعد از آن در هر مرحله نفر k تا جلوتر نفر قبلی میگوید “سلام!”. این روال ادامه دارد تا دوباره نوبت حسنی شود و آن موقع بازی تمام میشود.
حالا حسنی میخواهد بداند که این بازی چند مرحله طول میکشد و از آنجا که خیلی سرگرم بازی شده، از شما میخواهد تا جواب را به او بگویید.
ورودی
در خط اول ورودی n و k آمده است.
خروجی
در تنها خط خروجی تعداد مراحلی که طول میکشد تا دوباره نوبت حسنی شود را چاپ کنید.
مثال
نمونه ۱
ورودی
5 2خروجی
5اگر افراد دور دایره را از 11 تا 55 شمارهگذاری کنیم به طوری که حسنی شماره 11 را بگیرد طبق چنین روندی دوباره نوبت حسنی میشود:
نمونه ۲
ورودی
6 2خروجی
3در این حالت افرادی که سلام میکنند چنین شمارههایی را دارند:
نمونه ۳
ورودی
6 6خروجی
1جواب
# Get input: number of people (n) and skip count (k)n, k = map(int, input().split())
# Initialize variablest = 1 # Current positiond = 0 # Counter for steps
# First movet += kd += 1
# Keep moving until we get back to position 1while t % n != 1: t += k d += 1
# Print resultprint(d)اعداد پالیندروم
مسئول خزانه بانک مرکزی اسپانیا، میخواهد برای جلوگیری از سرقت بانک رمز گاوصندوقها را عوض کند. او به دلیل علاقه زیاد به اعداد پالیندروم میخواهد حتما رمزی که میگذارد یک عدد پالیندروم باشد. اعداد پالیندروم در ریاضی اعدادی هستند که چه از چپ خوانده شوند و چه از راست، یک جور خوانده میشوند. مانند 1242112421 یا 45544554. حال شما باید به او کمک کنید و تعیین کنید که عددی که او به شما پیشنهاد میکند یک پالیندروم هست یا نه.
ورودی
در تنها خط ورودی یک عدد حسابی داده میشود.
خروجی
در تنها خط خروجی اگر عدد وارد شده یک پالیندروم باشد، عبارت زیر را چاپ کنید:
The number is a palindromeو در غیر این صورت عبارت زیر باید چاپ شود:
The number is not a palindromeمثال
نمونه ۱
ورودی
12321خروجی
The number is a palindromeنمونه ۲
ورودی
2342خروجی
The number is not a palindromeجواب
مشابه سوال جمع ارقامه. فقط اینور یه متغیر تعریف میکنیم و هر رقمی که جدا کردیم توی این متغیر اضافه میکنیم با توجه به ارزش مکانیش.
البته چون این یه حلقه است پس فقط کافیه در ده ضرب کنیم

# Get input numberb = int(input())c = b # Keep original number
# Calculate reverse of the numbera = 0while b > 0: a = a * 10 + b % 10 # Get last digit and add to reversed number b = int(b / 10) # Remove last digit from original number
# Check if original number equals its reverseif c == a: print("The number is a palindrome")else: print("The number is not a palindrome")جاده کشی
پویان یک نوجوان تپل است که تصمیم گرفته است با جادهکشی، وزن خود را کاهش دهد.
زمین مربعی بزرگی به پویان دادهاند که در آن جادهکشی کند. پویان میخواهد n جاده در این زمین بکشد. هر یک از جادهها بصورت خطی افقی یا عمودی داخل مربع است. (میتوان آن را به شکل خطی موازی با یکی از اضلاع مربع در نظر گرفت.) او هیچ گاه دو جاده را روی هم نمیکشد.
پویان این عمل جادهکشی را خستهکننده یافت و برای جذاب کردنش، تصمیم گرفت طوری افقی یا عمودی بودن جادهها را انتخاب کند که در انتها زمین به بیشترین تعداد قسمت ممکن تقسیم شود. برای مثال اگر n برابر ۳ باشد و او سه جاده افقی بکشد، زمین به ۴ قسمت تقسیم میشود. ولی اگر او یک جاده افقی و دو جاده عمودی بکشد، زمین به ۶ بخش تقسیم میشود.
با ورودی گرفتن عدد n، بگویید بیشترین تعداد قسمتهای ممکن با n جاده چقدر است.
ورودی
در تنها سطر ورودی عدد n آمده است که نمایانگر تعداد جادههاییست که پویان میخواهد بکشد.1≤n≤1001≤n≤100
خروجی
تنها سطر خروجی باید شامل تنها یک عدد باشد که برابر با بیشترین تعداد قسمتهای ممکن برای زمین پس از جادهکشی پویان است.
مثال
نمونه
ورودی
3خروجی
6جواب
# Get input numberm = int(input())
# Check if number is evenif m % 2 == 0: # If even, calculate (m/2 + 1)^2 result = (m//2 + 1) * (m//2 + 1)else: # If odd, calculate (m/2 + 1)^2 + (m/2 + 1) result = (m//2 + 1) ** 2 + (m//2 + 1)
print(result)تیم تدریسیاران درس - © ۱۴۰۳