INTRODUCTION
FLOW CONTROL
FUNCTIONS
DATATYPES
OBJECT & CLASS
ADVANCED TOPICS
BỔ SUNG
PYTHON CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Kiểu dữ liệu number trong Python

Trong bài này mình sẽ giới thiệu kiểu dữ liệu Number trong Python, tìm hiểu về các loại number khác nhau được sử dụng trong Python, cách chuyển đổi từ loại dữ liệu này sang loại dữ liệu khác và các hoạt động toán học được hỗ trợ trong Python.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Nói đến Number thì chắc ai cũng biết đây là kiểu số. Tuy nhiên, chúng ta có rất nhiều loại số khác nhau như số nguyên (int), số thực (float), số phức (complex number). Vì vậy bạn phải nắm vững cách chuyển đổi giữa chúng.

1. Number trong Python là gì?

Number là một nhóm dữ liệu thường dùng trong Python, nó dùng để lưu trữ hầu hết các kiểu về số như số thực, số phức, số nguyên.

Python hỗ trợ số nguyên, số thực và số phức. Chúng được định nghĩa trong các lớp int, float và lớp complex của Python.

Bài viết này được đăng tại [free tuts .net]

Integer và float được phân biệt bằng dấu chấm động (.). Nếu một số có dấu chấm động là kiểu float, ngược lại là kiểu int.

Ví dụ: Số 5 thuộc kiểu int, trong khi 5.0 thuộc kiểu float.

Số phức được viết dưới dạng x + yj, trong đó x là phần thực và y là phần ảo.

Chúng ta có thể sử dụng hàm type() để biết một biến đang thuộc lớp nào, và hàm isinstance() để kiểm tra xem nó có thuộc về một lớp cụ thể nào đó không.

Ví dụ
# Output: <class 'int'>
print(type(a))

# Output: <class 'float'>
print(type(5.0))

# Output: (8+3j)
c = 5 + 3j
print(c + 3)

# Output: True
print(isinstance(c, complex))

Trong khi số nguyên có thể có độ dài bất kỳ, số dấu phẩy động chỉ chính xác tối đa 15 vị trí thập phân (vị trí thứ 16 không chính xác).

Các số chúng ta xử dụng hàng ngày là hệ thống số thập phân (cơ sở 10). Nhưng các lập trình viên máy tính (nói chung là lập trình viên nhúng) cần phải làm việc với các hệ thống số nhị phân (cơ sở 2), hệ thập lục phân (cơ sở 16) và số bát phân (cơ sở 8).

Trong Python, chúng ta có thể biểu diễn các số này bằng cách đặt một tiền tố thích hợp trước số đó. Bảng sau liệt kê các tiền tố này.

Number System Prefix
Binary '0b' or '0B'
Octal '0o' or '0O'
Hexadecimal '0x' or '0X'

Dưới đây là một vài ví dụ cách sử dụng các tiền tố prefix:

# Output: 107
print(0b1101011)

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

# Output: 13
print(0o15)

Khi bạn chạy chương trình này thì sẽ cho kết quả như sau:

107
253
13

Chúng ta có thể chuyển đổi một từ cơ số này sang cơ số khác. Điều này còn được gọi là chuyển đổi cơ số.

Ví dụ: Các phép toán như phép cộng, phép trừ số nguyên sẽ tự động chuyển đổi cơ số sang kiểu float nếu một trong các toán hạng là float.

>>> 1 + 2.0
3.0

Như ví dụ trên bạn thấy 1 là kiểu số nguyên, 2.0 là kiểu số động và khi thực hiện phép toán thì kết quả sẽ mang kiểu số động.

Bạn cũng có thể sử dụng các hàm dựng sẵn như int (), float ()comlex () để chuyển đổi các kiểu dữ liệu một cách rõ ràng. Các hàm này thậm chí có thể chuyển đổi từ các chuỗi sang số và số sang chuỗi.

>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)

2. Số thập phân trong Python

Lớp built-in trong Python có thể thực hiện một vài phép toán khiến chúng ta ngạc nhiên. Chúng ta đều biết rằng tổng của 1.1 và 2.2 là 3.3, tuy nhiên khi sử dụng toán tử so sánh bằng (==) thì điều đó là không đúng trong Python.

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

Chúng ta đang sai ở đâu?

Nó chỉ ra rằng các số dấu phẩy động được triển khai trong phần cứng máy tính dưới dạng phân số nhị phân, vì máy tính chỉ hiểu nhị phân (0 và 1). Vì lý do này, hầu hết các phân số thập phân mà chúng ta biết không thể được lưu trữ chính xác trong máy tính.

Hãy lấy một ví dụ. Chúng ta không thể biểu thị phân số 1/3 dưới dạng số thập phân. Điều này sẽ cung cấp cho 0.33333333 ... dài vô hạn và chúng ta chỉ có thể ước chừng nó.

Hóa ra phân số thập phân 0,1 sẽ dẫn đến phân số nhị phân dài vô hạn 0,000110011001100110011 ... và máy tính của chúng ta chỉ lưu trữ một số hữu hạn của nó.

Điều này sẽ chỉ xấp xỉ 0,1 nhưng không bao giờ bằng nhau. Do đó, đó là giới hạn của phần cứng máy tính của chúng tôi và không phải là lỗi trong Python.

>>> 1.1 + 2.2
3.3000000000000003

Để khắc phục vấn đề này, chúng ta có thể sử dụng mô-đun decimal.

import decimal

# Output: 0.1
print(0.1)

# Output: Decimal('0.1000000000000000055511151231257827021181583404541015625')
print(decimal.Decimal(0.1))

Mô-đun này được sử dụng khi chúng ta muốn thực hiện các phép tính thập phân như đã học ở trường. Chúng ta biết 25,50 kg chính xác hơn 25,5 kg vì nó có hai chữ số thập phân đáng kể so với một.

from decimal import Decimal as D
# Output: Decimal('3.3')
print(D('1.1') + D('2.2'))

# Output: Decimal('3.000')
print(D('1.2') * D('2.50'))

Chúng ta có thể hỏi tại sao không thực hiện Decimal mỗi lần, thay vì float? Lý do chính là hiệu quả, float luôn luôn nhanh hơn.

3. Khi nào sử dụng Decimal thay vì float

Chúng ta thường sử dụng Decimal trong các trường hợp sau.

  • Khi đang làm cho các ứng dụng tài chính cần đại diện thập phân chính xác.
  • Khi muốn kiểm soát mức độ chính xác cần thiết.
  • Khi muốn thực hiện khái niệm về số thập phân có ý nghĩa.
  • Khi muốn các hoạt động được thực hiện như chúng ta đã làm ở trường

4. Phân số

Python cung cấp các hoạt động liên quan đến số phân số thông qua mô-đun Fraction của nó. Chúng ta có thể tạo các đối tượng Fraction theo nhiều cách khác nhau.

import fractions

# Output: 3/2
print(fractions.Fraction(1.5))

# Output: 5
print(fractions.Fraction(5))

# Output: 1/3
print(fractions.Fraction(1,3))

Trong khi tạo phân số từ kiểu float chúng ta có thể nhận được một số kết quả bất thường. Điều này là do biểu diễn số dấu phẩy động nhị phân không hoàn hảo như đã thảo luận trong phần trước.

May mắn thay, phân số cho phép chúng ta khởi tạo bằng chuỗi, đây là các tùy chọn ưa thích khi sử dụng số thập phân.

import fractions

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

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

Kiểu dữ liệu này hỗ trợ tất cả các toán tử cơ bản. Dưới đây là một vài ví dụ.

from fractions import Fraction as F

# Output: 2/3
print(F(1,3) + F(1,3))

# Output: 6/5
print(1 / F(5,6))

# Output: False
print(F(-3,10) > 0)

# Output: True
print(F(-3,10) < 0)

5. Các hàm toán học

Python cung cấp các mô-đun như math random để thực hiện các phép toán khác nhau như lượng giác, logarit, xác suất và thống kê, v.v.

Module math
import math

# Output: 3.141592653589793
print(math.pi)

# Output: -1.0
print(math.cos(math.pi))

# Output: 22026.465794806718
print(math.exp(10))

# Output: 3.0
print(math.log10(1000))

# Output: 1.1752011936438014
print(math.sinh(1))

# Output: 720
print(math.factorial(6))
Module random
import random

# Output: 16
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())

6. Lời kết

Như vậy là mình đã giới thiệu xong toàn bộ kiến thức cơ bản về xử lý number trong Python, có rất nhiều hàm bổ trợ cho number và mình sẽ trình bày nó ở một bài khác. Chúc bạn học tốt1

Cùng chuyên mục:

Phạm vi số float của Python

Phạm vi số float của Python

Bài tập Python : Pandas trong Python

Bài tập Python : Pandas trong Python

Hướng dẫn kết nối Python PostgreSQL bằng Psycopg2

Hướng dẫn kết nối Python PostgreSQL bằng Psycopg2

Kết nối cơ sở dữ liệu MySQL Python

Kết nối cơ sở dữ liệu MySQL Python

Bài tập Python: Lập trình cơ sở dữ liệu trong Python

Bài tập Python: Lập trình cơ sở dữ liệu trong Python

Tạo số ngẫu nhiên trong một phạm vi bằng Python

Tạo số ngẫu nhiên trong một phạm vi bằng Python

Bài tập Python : Tạo dữ liệu ngẫu nhiên trong Python

Bài tập Python : Tạo dữ liệu ngẫu nhiên trong Python

Bài tập Python : Matplotlib trong Python

Bài tập Python : Matplotlib trong Python

Bài tập Python: NumPy trong Python

Bài tập Python: NumPy trong Python

Bài tập Python: JSON trong Python

Bài tập Python: JSON trong Python

Bài tập Python: Lập trình hướng đối tượng (OOP) trong Python

Bài tập Python: Lập trình hướng đối tượng (OOP) trong Python

TimeDelta trong Python

TimeDelta trong Python

Chuyển chuỗi Python thành DateTime trong Python

Chuyển chuỗi Python thành DateTime trong Python

Bài tập Python: DateTime trong Python

Bài tập Python: DateTime trong Python

Bài tập Python: Tuple trong Python

Bài tập Python: Tuple trong Python

Bài tập Python: Set trong Python

Bài tập Python: Set trong Python

Bài tập Python: Dictionary trong Python

Bài tập Python: Dictionary trong Python

Bài tập Python: List trong Python

Bài tập Python: List trong Python

Bài tập Python: Cấu trúc dữ liệu trong Python

Bài tập Python: Cấu trúc dữ liệu trong Python

Bài tập Python: Chuỗi trong Python

Bài tập Python: Chuỗi trong Python

Top