نمایش داده‌ها#

ویدئوی جلسه

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


فرمت‌های اولیه‌ی داده: اعداد صحیح و اعشاری#

در برنامه‌نویسی، داده‌ها در فرمت‌های مختلفی ذخیره می‌شوند. دو نوع رایج از این فرمت‌ها، اعداد صحیح (int) و اعداد اعشاری (float) هستند:

اعداد صحیح (int)#

اعداد صحیح (int) در پایتون، اعدادی هستند که بخش اعشاری ندارند و می‌توانند مثبت، منفی یا صفر باشند. برای مثال:

a = 10    # عدد صحیح مثبت
b = -5    # عدد صحیح منفی
c = 0     # صفر

این اعداد در حافظه به صورت باینری (پایه‌ی ۲) ذخیره می‌شوند. برای مثال، عدد 10 در مبنای ۲ به صورت 1010 نمایش داده می‌شود.


تابع bin: نمایش باینری اعداد#

تابع bin در پایتون، نمایش باینری یک عدد صحیح را به صورت یک رشته برمی‌گرداند. این تابع برای بررسی نحوه‌ی ذخیره‌سازی اعداد در حافظه بسیار مفید است.

مثال:

num = 10
binary = bin(num)
print(binary)  # خروجی: '0b1010'
0b1010
  • در خروجی، پیشوند 0b نشان‌دهنده‌ی این است که عدد به صورت باینری نمایش داده شده است.

  • عدد 10 در مبنای ۲ برابر با 1010 است.

اپراتورهای بیتی (Bitwise Operators)#

اپراتورهای بیتی، عملیات‌هایی هستند که مستقیماً روی بیت‌های اعداد انجام می‌شوند. این اپراتورها در کار با داده‌های سطح پایین، بهینه‌سازی کدها و برخی الگوریتم‌ها (مانند رمزنگاری) کاربرد دارند.

انواع اپراتورهای بیتی:

  • AND (&)

هر دو بیت باید 1 باشند تا نتیجه 1 شود.

a = 10  # 1010
b = 4   # 0100
result = a & b
print(result)  # خروجی: 0 (0000)
0
  • OR (|)

اگر حداقل یکی از بیت‌ها 1 باشد، نتیجه 1 می‌شود.

a = 10  # 1010
b = 4   # 0100
result = a | b
print(result)  # خروجی: 14 (1110)
14
  • XOR (^)

اگر دو بیت متفاوت باشند، نتیجه 1 می‌شود.

a = 10  # 1010
b = 6   # 0110
result = a ^ b
print(result, bin(result) )  # خروجی: 12 (1100)
12 0b1100
  • شیفت به چپ (<<):

بیت‌ها را به تعداد مشخصی به چپ منتقل می‌کند و بیت‌های جدید را با صفر پر می‌کند.

a = 10  # 1010
result = a << 2
print(result)  # خروجی: 40 (101000)
40
  • شیفت به راست (>>)

بیت‌ها را به تعداد مشخصی به راست منتقل می‌کند و بیت‌های جدید را با صفر پر می‌کند.

a = 10  # 1010
result = a >> 2
print(result)  # خروجی: 2 (0010)
2

مثالهای کاربردی#

  • مثال ۱: بررسی زوج یا فرد بودن عدد با استفاده از اپراتور AND

اگر آخرین بیت عدد 1 باشد، عدد فرد است.

num = 7
if num & 1:
    print('عدد فرد است')  # خروجی: عدد فرد است
else:
    print('عدد زوج است')
عدد فرد است
  • مثال ۲: استفاده از شیفت به چپ برای ضرب در ۲

num = 5
result = num << 1
print(result)  # خروجی: 10
10

اعداد اعشاری (float):#

این اعداد دارای بخش اعشاری هستند و به دلیل محدودیت‌های حافظه، با دقت محدود در کامپیوتر نمایش داده می‌شوند. مثلاً 3.14، -0.001 و 2.0 اعداد اعشاری هستند.

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

همچنین شناختن توابع زیر در پایتون می‌تواند مفید باشد:

Note

قالبهای دیگری هم در پایتون برای نمایش اعداد غیر صحیح وجود دارد:


ساخت قالب جدید داده‌ها#

معمولا داده‌هایی که ما نیاز به توصیف آن‌ها داریم از کنار هم قرار گرفتن داده‌هایی از جنسهای اولیه تشکیل میشود. برای این کار، خودمان باید قالب جدیدی را با کمک class پیاده سازی کنیم.

اعداد مختلط را به عنوان یک نمونه‌ی ساده در اینجا بررسی می‌کنیم.

اعداد مختلط (Complex Numbers) اعدادی هستند که از دو بخش تشکیل شده‌اند: یک بخش حقیقی (Real) و یک بخش موهومی (Imaginary). این اعداد به شکل a + bi نمایش داده می‌شوند، که در آن a بخش حقیقی و b بخش موهومی است. برای مثال، 3 + 4i یک عدد مختلط است.

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


ایجاد کلاس ComplexNumber#

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

کد کلاس ComplexNumber#

import math
class ComplexNumber:
  def __init__(self , r , i ):
    if type(i) is str:
      print('i shoudl be a number')
    else:
      self.I = i
      self.R = r

  def Size(self):
    ret = math.sqrt(self.I*self.I + self.R*self.R)
    return ret

  def __mul__(self , other ):
    ret = ComplexNumber( self.R*other.R - self.I * other.I , self.R*other.I+self.I*other.R)
    return ret

  def __repr__(self):
    return str(self)

  def __str__(self):
    ret = f'{self.R}{"+" if self.I>0 else "-"}i{abs(self.I)}'
    return ret

توضیحات متدهای کلاس#

متد init:#
  • این متد سازنده‌ی کلاس است و برای مقداردهی اولیه به بخش‌های حقیقی و موهومی عدد مختلط استفاده می‌شود.

  • اگر بخش موهومی یک رشته (str) باشد، پیام خطا نمایش داده می‌شود.

متد Size#

این متد اندازه‌ی عدد مختلط را محاسبه می‌کند. اندازه‌ی یک عدد مختلط به صورت $\sqrt(a^2 + b^2)$ محاسبه می‌شود.

متد mul#

این متد امکان ضرب دو عدد مختلط را فراهم می‌کند. ضرب دو عدد مختلط به صورت زیر انجام می‌شود:

\[(a+bi)\times(c+di) = (ac-bd)+(ad+bc)i\]
متد repr#

این متد نمایش رسمی عدد مختلط را برمی‌گرداند. در اینجا از متد str استفاده شده است.

متد str:#

این متد نمایش زیبای عدد مختلط را به شکل a + bi یا a - bi برمی‌گرداند.


مثالها#

# ایجاد دو عدد مختلط
num1 = ComplexNumber(3, 4)
num2 = ComplexNumber(1, -2)

# نمایش اعداد
print(num1)  # خروجی: 3+i4
print(num2)  # خروجی: 1-i2

# محاسبه اندازه
print(num1.Size())  # خروجی: 5.0

# ضرب دو عدد مختلط
result = num1 * num2
print(result)  # خروجی: 11-i2
3+i4
1-i2
5.0
11-i2

سوالات#

  • کلاس نوشته شده برای اعداد مختلط را بر اساس مختصات قطبی بازنویسی کنید

  • می‌دانیم در الکترواستاتیک میدان الکتریکی را با دانستن پتانسیل الکتریکی در هر نقطه به دست آورد. یک کلاس به نام ELectricalField بنوسید که با گرفتن تابع پتانسیل الکتریکی، میدان الکتریکی و بار الکتریکی در هر نقطه را بتواند محاسبه کند.

Note

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