رفتن به محتوا

جلسه اول

به نام خدا

درسنامه

آموزش جامع انواع داده (Types) در پایتون

۱. مقدمه

در پایتون، هر مقداری دارای یک نوع داده (Type) است که مشخص می‌کند:

  • چگونه در حافظه ذخیره شود
  • چه عملیاتی روی آن مجاز است
  • چگونه با سایر داده‌ها تعامل کند

۲. انواع اصلی داده‌ها (Basic Types)

۲.۱. اعداد صحیح (Integer)

age = 25
temperature = -5
count = 0

۲.۲. اعداد اعشاری (Float)

price = 19.99
temperature = -2.5
weight = 65.0

۲.۳. رشته‌ها (String)

name = "Sara"
message = 'Hello World'
number_as_string = "123"

۳. عملیات‌های ریاضی و نوع نتیجه

۳.۱. عملیات با اعداد صحیح

a = 10
b = 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 به Int
text_number = "123"
number = int(text_number) # 123
# Float به Int
x = 10.7
y = int(x) # 10 (قسمت اعشار حذف می‌شود)
تبدیل به اعشاری (float)
# String به Float
price = "19.99"
number = float(price) # 19.99
# Int به Float
x = 10
y = float(x) # 10.0
تبدیل به رشته (str)
age = 25
message = "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.2
final_price = price - discount
print("Original price: " + str(price) )
print("Discount: " + str(discount) )
print("Final price: " + str(final_price) )

۷. نکات مهم

  1. همیشه قبل از عملیات، از یکسان بودن نوع داده‌ها مطمئن شوید
  2. برای نمایش اعداد در متن، آنها را به string تبدیل کنید
  3. تابع input همیشه string برمی‌گرداند
  4. تقسیم (/) همیشه float برمی‌گرداند
  5. برای تبدیل string به عدد، فقط کاراکترهای عددی مجاز هستند

آموزش حلقه (While) در پایتون

مقدمه

حلقه while در پایتون شبیه به دستور if است، با این تفاوت که کد داخل آن تا زمانی که شرط برقرار باشد، به طور مداوم اجرا می‌شود.

ساختار پایه

while condition:
# code to be executed

توضیح عملکرد

حلقه while تا زمانی که شرط آن True باشد، به اجرای کدهای داخل خود ادامه می‌دهد. به محض اینکه شرط False شود، از حلقه خارج می‌شود.

مثال ۱: محاسبه خطا

error = 50.0
while error > 1:
error = error / 4
print(f"Error value: {error}")

خروجی:

Error value: 12.5
Error value: 3.125
Error value: 0.78125

مثال ۲: تصحیح انحراف

offset = 8
while offset != 0:
print("Correcting...")
offset = offset - 1
print(f"Current offset: {offset}")

خروجی:

Correcting...
Current offset: 7
Correcting...
Current offset: 6
Correcting...
Current offset: 5
...

نکات مهم

  1. حلقه بی‌نهایت: اگر شرط حلقه همیشه True باشد، حلقه به صورت بی‌نهایت اجرا می‌شود. برای مثال:
while True:
print("This loop will never stop!")
  1. توقف برنامه: برای توقف برنامه، می‌توانید از کلیدهای Ctrl + C استفاده کنید.

  2. به‌روزرسانی شرط: همیشه مطمئن شوید که در داخل حلقه، متغیری که در شرط استفاده می‌شود تغییر می‌کند، در غیر این صورت حلقه بی‌نهایت خواهد شد.

کاربردهای عملی

  • کنترل سیستم‌ها
  • محاسبات تکراری
  • ==مهم ترین نکته: پردازش داده‌ها تا رسیدن به یک شرط خاص==
  • خواندن ورودی از کاربر تا دریافت مقدار صحیح

تمرین پیشنهادی

سعی کنید برنامه‌ای بنویسید که عددی را از کاربر دریافت کند و تا زمانی که عدد وارد شده منفی است، درخواست ورود عدد جدید کند.

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 = 0
while counter < 10:
if counter % 2 == 0:
print(counter)
counter = counter + 1

تفاوت‌های اصلی for و while

در for اگر دقت کنید ما یک بخش داریم که به شمارش تعداد بار کار انجام شده کمک می کند. در حالی که در while ما میخواهیم کاری را انقدر انجام دهیم تا یک چیزی مانع آن شود.

مثال: دکمه ویس تلگرام

فرض کنید ما برنامه نویس تلگرام هستیم. و میخواهیم تا زمانی که انگشت روی دکمه میکروفون نگه داشته میشود صدا ضبط شب شود.

is_voice_button_pushed = true
while 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 مخالف صفر» برداشته شده است و برنامه شما باید این شرط را چک کند و در این حالت نیز باید بتواند جواب معادله را محاسبه کند

مثال

نمونه ۱

ورودی
5
3
0
خروجی
-0.600
0.000

نمونه ۲

ورودی
0
3
-5.4
خروجی
1.800

نمونه ۳

ورودی
0
0
1
خروجی
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 variables
t = 1 # Current position
d = 0 # Counter for steps
# First move
t += k
d += 1
# Keep moving until we get back to position 1
while t % n != 1:
t += k
d += 1
# Print result
print(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 number
b = int(input())
c = b # Keep original number
# Calculate reverse of the number
a = 0
while 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 reverse
if 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 number
m = int(input())
# Check if number is even
if 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)

تیم تدریس‌یاران درس - © ۱۴۰۳