اعداد و تبدیل نوع داده در برنامه نویسی پایتون 

4 سال پیش
اعداد و تبدیل نوع داده در برنامه نویسی پایتون 

اعداد و تبدیل نوع داده در برنامه نویسی پایتون 

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، با اعداد و تبدیل نوع در برنامه نویسی پایتون، نحوه تبدیل از یک نوع داده به نوع دیگر و عملیات ریاضی پشتیبانی شده در پایتون، آشنا خواهید شد.

نوع داده عددی در  برنامه نویسی پایتون

پایتون از اعداد صحیح، اعداد ممیز شناور و اعداد مختلط پشتیبانی می کند. آنها به عنوان کلاسهای int ،float و complex در پایتون تعریف می شوند.

پیشنهاد ویژه : پکیج آموزش پروژه محور پایتون

اعداد صحیح و ممیز شناور با وجود یا عدم وجود یک اعشار از یکدیگر تمیز داده می شوند. به عنوان مثال، ۵ یک عدد صحیح است در حالی که ۵٫۰ یک شماره ممیز شناور است.

اعداد مختلط به صورت x + yj نوشته می شوند، جایی که x قسمت حقیقی است و y قسمت موهومی است.

ما می توانیم از تابع ()type استفاده کنیم تا بدانیم متغیر متعلق به کدام کلاس است و از تابع ()isinstance برای بررسی اینکه متغیر متعلق به کلاس خاصی است یا خیر استفاده می شود.

بیایید به مثال زیر دقت کنیم:

a = 5

print(type(a))

print(type(5.0))

c = 5 + 3j
print(c + 3)

print(isinstance(c, complex))

 

خروجی

<class 'int'>
<class 'float'>
(۸+۳j)
True

 

در حالی که اعداد صحیح می توانند از هر طولی برخوردار باشند، اما یک عدد با ممیز شناور دقیقاً تا ۱۵ رقم اعشار صحیح است.

اعدادی که هر روز با آنها سروکار داریم از سیستم اعداد اعداد دهدهی (پایه ۱۰، Decimal) هستند. اما برنامه نویس ها باید با سیستم های عددی باینری (دودویی) (پایه ۲)، هگزادسیمال یا شانزده شانزدهی (پایه ۱۶) و اکتال یا هشت ‌هشتی (پایه ۸) کار کنند.

در پایتون می توانیم این اعداد را با قرار دادن پیشوند مناسب قبل از آن عدد نشان دهیم. در جدول زیر این پیشوندها را نوشته شده اند.

 

سیستم عددی

پیشوند

باینری (پایه ۲)

‘۰b’ or ‘0B’

اکتال(پایه ۸)

‘۰o’ or ‘0O’

هگزادسیمال (پایه ۱۶)

‘۰x’ or ‘0X’

در اینجا چند مثال آورده شده است

# Output: 107
print(0b1101011)

# Output: 253 (251 + 2)
print(0xFB + 0b10)

# Output: 13
print(0o15)

 

خروجی

۱۰۷
۲۵۳
۱۳

 

 

تبدیل نوع در پایتون

می توان یک نوع داده را به نوع دیگر تبدیل کنیم. این کار به coercion نیز معروف است.

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

>>> 1 + 2.0
۳٫۰

 

در بالا می توانیم ببینیم که ۱ (عدد صحیح) با ۲٫۰ (عدد شناور) جمع بسته می شود.

همچنین می توانیم از توابع داخلی مانند ()int() ،float و ()complex برای تبدیل صریح بین انواع استفاده کنیم. این توابع حتی می توانند از رشته ها تبدیل شوند.

>>> int(2.3)
۲
>>> int(-2.8)
-۲
>>> float(5)
۵٫۰
>>> complex('3+5j')
(۳+۵j)

 

هنگام تبدیل از عدد ممیز شناور به عدد صحیح، عدد کوتاه می شود (قسمت اعشاری حذف می شوند).

 

دهدهی در پایتون

کلاس شناور توکار پایتون، محاسبات فوق‌العاده‌ای ار انجام می‌دهد  که ممکن است همه ما را متحیر کند. همه ما می دانیم که جمع ۱٫۱ و ۲٫۲ مساوی است با ۳٫۳، اما به نظر می رسد پایتون با آن مخالف است.

>>> (1.1 + 2.2) == 3.3
False

 

اما خب دلیل این کار چیست؟

به نظر می رسد که اعداد ممیز شناور در سخت افزار کامپیوتر به عنوان کسری دودویی پیاده سازی می شوند زیرا کامپیوتر فقط اعداد (۰ و ۱)باینری را می فهمد. به همین دلیل  بیشتر کسرهای اعشاری نمی توانند به طور دقیق در رایانه ما ذخیره شوند.

به عنوان مثال: ما نمی توانیم کسر ۱/۳ را به عنوان یک عدد اعشاری نشان دهیم. زیرا …۰٫۳۳۳۳۳۳۳۳ را نشان می دهد، که بی نهایت طولانی است، و ما فقط می توانیم آن را تقریبی کنیم.

به نظر می رسد که کسر اعشاری ۰٫۱ منجر به کسری دودویی بی نهایت طولانی …۰٫۰۰۰۱۱۰۰۱۱۰۰۱۱۰۰۱۱۰۰۱۱۱۱ خواهد شد  و رایانه ما فقط تعداد محدودی از آن را ذخیره می کند.

به همین دلیل ۰.۱ فقط تخمین زده شود بود اما هرگز برابر با عدد اصلی نیست. از این رو، این محدودیت سخت افزار رایانه ما است و نمی توان آن را به عنوان خطایی در پایتون دانست.

>>> 1.1 + 2.2
۳٫۳۰۰۰۰۰۰۰۰۰۰۰۰۰۰۳

 

برای غلبه بر این مسئله ، می توانیم از ماژول اعشاری (decimal) پایتون استفاده کنیم. در حالی که اعداد ممیز شناور دارای حداکثر ۱۵ رقم اعشار هستند، ماژول اعشاری دارای دقت قابل تنظیم توسط کاربر است.

بیایید تفاوت را ببینیم:

import decimal

print(0.1)

print(decimal.Decimal(0.1))

 

خروجی

۰٫۱
۰٫۱۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۵۵۵۱۱۱۵۱۲۳۱۲۵۷۸۲۷۰۲۱۱۸۱۵۸۳۴۰۴۵۴۱۰۱۵۶۲۵

 

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

همچنین دقت عدد را حفظ می کند. می دانیم ۲۵٫۵۰ کیلوگرم از ۲۵٫۵ کیلوگرم دقیق تر است زیرا دارای دو رقم اعشار است.

from decimal import Decimal as D

print(D('1.1') + D('2.2'))

print(D('1.2') * D('2.50'))

 

خروجی

۳٫۳
۳٫۰۰۰

 

به صفرهای انتهایی در مثال بالا توجه کنید.

 

ممکن است بپرسید، چرا Decimal را هر بار به جای ممیز شناور پیاده سازی نمی کنیم؟ دلیل اصلی کارایی است. عملیات ممیز شناور باید سریعتر از عملیات Decimal انجام شود.

چه زمانی از Decimal به جای ممیز شناور استفاده کنیم؟

ما به طور کلی در موارد زیر از Decimal استفاده می کنیم.

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

 

کسرهای پایتون

پایتون از طریق ماژول fractions خود عملیاتی شامل اعداد کسری را ارائه می دهد.

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

ما می توانیم اشیا را به روش های مختلف ایجاد کنیم. بیایید نگاهی به آنها بیندازیم.

import fractions

print(fractions.Fraction(1.5))

print(fractions.Fraction(5))

print(fractions.Fraction(1,3))

 

خروجی

۳/۲
۵
۱/۳

 

در حین ایجاد Faction از ممیز شناور، ممکن است نتایج غیرمعمولی بدست آوریم. این به دلیل نمایش نامناسب اعداد ممیز شناور دودویی است که قبلا درباره آن صحبت شده است

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

import fractions
import fractions

# As float
# Output: 2476979795053773/2251799813685248
print(fractions.Fraction(1.1))

# As string
# Output: 11/10
print(fractions.Fraction('1.1'))

 

خروجی

۲۴۷۶۹۷۹۷۹۵۰۵۳۷۷۳/۲۲۵۱۷۹۹۸۱۳۶۸۵۲۴۸
۱۱/۱۰

 

این نوع داده از تمام عملیات های پایه ای ریاضی پشتیبانی می کند. در اینجا چند مثال آورده شده است.

from fractions import Fraction as F

print(F(1, 3) + F(1, 3))

print(1 / F(5, 6))

print(F(-3, 10) > 0)

print(F(-3, 10) < 0)

 

خروجی

۲/۳
۶/۵
False
True

 

ریاضیات پایتون

پایتون ماژول هایی مانند math و random  را برای انجام ریاضیات مختلف مانند مثلثات، لگاریتم ها، احتمالات و آمار و غیره ارائه می دهد.

import math

print(math.pi)

print(math.cos(math.pi))

print(math.exp(10))

print(math.log10(1000))

print(math.sinh(1))

print(math.factorial(6))

 

خروجی

۳٫۱۴۱۵۹۲۶۵۳۵۸۹۷۹۳
-۱٫۰
۲۲۰۲۶٫۴۶۵۷۹۴۸۰۶۷۱۸
۳٫۰
۱٫۱۷۵۲۰۱۱۹۳۶۴۳۸۰۱۴
۷۲۰

 

 

import random

print(random.randrange(10, 20))

x = ['a', 'b', 'c', 'd', 'e']

# Get random choice
print(random.choice(x))

# Shuffle x
random.shuffle(x)

# Print the shuffled x
print(x)

# Print random element
print(random.random())

 

وقتی برنامه فوق را اجرا می کنیم، خروجی را به صورت زیر می گیریم. (ممکن است به دلیل رفتار تصادفی مقادیر متفاوت باشد)

۱۸
e
['c', 'e', 'd', 'b', 'a']
۰٫۵۶۸۲۸۲۱۱۹۴۶۵۴۴۴۳

 

 

منبع.

لیست جلسات قبل آموزش برنامه نویسی پایتون

  1. آموزش نصب و اجرای برنامه نویسی پایتون
  2. کلیدواژه ها و شناسه های برنامه نویسی پایتون
  3. دستورات، تورفتگی ها و کامنت ها در برنامه نویسی پایتون
  4. متغیرها، ثابت ها و لیترال ها در برنامه نویسی پایتون 
  5. انواع داده ها در برنامه نویسی پایتون
  6. تبدیل نوع در برنامه نویسی پایتون
  7. ورودی، خروجی و وارد کردن در برنامه نویسی پایتون
  8. عملگرها در برنامه نویسی پایتون
  9. نام و دامنه در برنامه نویسی پایتون
  10. دستور شرطی if…else در برنامه نویسی پایتون
  11. حلقه for در برنامه نویسی پایتون
  12. حلقه while در برنامه نویسی پایتون
  13. دستورات break و continue در برنامه نویسی پایتون
  14. دستور pass در برنامه نویسی پایتون
  15. توابع در برنامه نویسی پایتون
  16. آرگومان تابع در برنامه نویسی پایتون
  17. تابع بازگشتی در برنامه نویسی پایتون
  18. تابع بی نام/ تابع لامبدا در برنامه نویسی پایتون
  19. متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون
  20. کلیدواژه global در برنامه نویسی پایتون
  21. ماژول های برنامه نویسی پایتون
  22. پکیج ها در برنامه نویسی پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه