<!DOCTYPE html>
	<html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
	<head>
<title>&#91;Python Cơ Bản&#93; Phần 7&#x3A; Các kiểu dữ liệu trong Python &#40;tt&#41;</title>
<meta name="description" content="&#91;Python Cơ Bản&#93; Phần 7&#x3A; Các kiểu dữ liệu trong Python &#40;tt&#41; - Savefile - Tin Tức -...">
<meta name="author" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG">
<meta name="copyright" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG [webmaster@tinhocdct.xyz]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.0">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="&#91;Python Cơ Bản&#93; Phần 7&#x3A; Các kiểu dữ liệu trong Python &#40;tt&#41;">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;tinhocdct.xyz&#x002F;savefile&#x002F;hoat-dong-chuyen-mon&#x002F;python-co-ban-phan-7-cac-kieu-du-lieu-trong-python-tt-121.html">
<meta property="og:site_name" content="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG">
<meta property="og:url" content="https://tinhocdct.xyz/hoat-dong-chuyen-mon/python-co-ban-phan-7-cac-kieu-du-lieu-trong-python-tt-121.html">
<link rel="shortcut icon" href="https://tinhocdct.xyz/favicon.ico">
<link rel="canonical" href="https://tinhocdct.xyz/hoat-dong-chuyen-mon/python-co-ban-phan-7-cac-kieu-du-lieu-trong-python-tt-121.html">
<link rel="alternate" href="https://tinhocdct.xyz/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tin-tuc/" title="Tin Tức - TIN TỨC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/thong-cao-bao-chi/" title="Tin Tức - THÔNG BÁO" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/ban-tin-noi-bo/" title="Tin Tức - BẢN TIN NỘI BỘ" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tin-cong-nghe/" title="Tin Tức - CÔNG NGHỆ - KHOA HỌC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/thu-thuat/" title="Tin Tức - THỦ THUẬT" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tien-ich/" title="Tin Tức - TIỆN ÍCH" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/ai/" title="Tin Tức - AI" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/khoa-hoc/" title="Tin Tức - KHOA HỌC" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-chuyen-mon/" title="Tin Tức - HOẠT ĐỘNG CHUYÊN MÔN" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-cong-doan/" title="Tin Tức - CÔNG ĐOÀN" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/hoat-dong-doan-the/" title="Tin Tức - ĐOÀN THỂ" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tuyen-sinh-huong-nghiep/" title="Tin Tức - TUYỂN SINH - HƯỚNG NGHIỆP" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/tuyen-sinh-2025/" title="Tin Tức - TUYỂN SINH 2025" type="application/rss+xml">
<link rel="alternate" href="https://tinhocdct.xyz/rss/lich-cong-tac-tuan/" title="Tin Tức - Lịch công tác tuần" type="application/rss+xml">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/jquery/jquery.min.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/language/vi.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/assets/js/global.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/news.js">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/main.js">
<link rel="preload" as="script" href="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1816161148536198">
<link rel="preload" as="script" href="https://tinhocdct.xyz/themes/default/js/bootstrap.min.js">
<link rel="StyleSheet" href="https://tinhocdct.xyz/assets/css/font-awesome.min.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/bootstrap.non-responsive.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/style.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://tinhocdct.xyz/themes/default/css/news.css">
<style>
	body{background: #fff;}
</style>
	</head>
	<body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG</h2>
		<p class="pull-right"><a title="TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG" href="https://tinhocdct.xyz/">https://tinhocdct.xyz</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>&#91;Python Cơ Bản&#93; Phần 7&#x3A; Các kiểu dữ liệu trong Python &#40;tt&#41;</h1>
		<ul class="list-inline">
			<li>Thứ ba - 25/05/2021 06:07</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
			Trong phần trước, chúng ta đã tìm hiểu đến kiểu List trong Python. Ở phần này chúng ta tìm hiểu thêm các kiểu còn lại trong Python nhe.
		</div>
				<div class="imghome">
			<img alt="Python" src="https://tinhocdct.xyz/uploads/news/2021_05/hinh-1.png" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<h2 id="mcetoc_1bth5hjlu0"><strong>5. Tuple</strong></h2>

<p>Tuple trong Python là một chuỗi các phần tử có thứ tự giống như list. Sự khác biệt giữa list và tuple là chúng ta không thể thay đổi các phần tử trong tuple khi đã gán, nhưng trong list thì các phần tử có thể thay đổi.</p>

<p>Tuple thường được sử dụng cho các dữ liệu không cho phép sửa đổi và nhanh hơn list vì nó không thể thay đổi tự động. Một tuple được định nghĩa bằng dấu ngoặc đơn (), các phần tử trong tuple cách nhau bằng dấu phẩy (,).</p>

<p>Ví dụ:</p>

<pre id="pre79">
<code>t = (10, &quot;quan tri mang&quot;, 2j)</code></pre>

<p>Bạn có thể sử dụng toán tử cắt &#91;&#93; để trích xuất phần tử trong tuple nhưng không thể thay đổi giá trị của nó.</p>

<pre id="pre80">
<code>t = (10, &quot;quan tri mang&quot;, 2j)
#t&#91;0:2&#93; = (10, &#039;quan tri mang&#039;)
print(&quot;t&#91;0:2&#93; = &quot;, t&#91;0:2&#93;)</code></pre>

<p>Chạy code trên ta được kết quả:</p>

<pre id="pre81">
<code>t&#91;0:2&#93; = (10, &#039;quan tri mang&#039;)</code></pre>

<h3 id="mcetoc_1ck9tof5c0"><em><strong>Tuple hơn list ở điểm nào?</strong></em></h3>

<p>Vì tuple và list khá giống nhau, nên chúng thường được sử dụng trong những tình huống tương tự nhau. Tuy nhiên, tuple vẫn có những lợi thế nhất định so với list, như:</p>

<ul>
	<li>Tuple thường được sử dụng cho các kiểu dữ liệu không đồng nhất (khác nhau) và list thường sử dụng cho các kiểu dữ liệu (đồng nhất) giống nhau.</li>
	<li>Vì tuple không thể thay đổi, việc lặp qua các phần tử của tuple nhanh hơn so với list. Vì vậy, trong trường hợp này tuple chiếm ưu thế về hiệu suất hơn list một chút.</li>
	<li>Tuple chứa những phần tử không thay đổi, có thể được sử dụng như key cho dictionary. Với list, điều này không thể làm được.</li>
	<li>Nếu có dữ liệu không thay đổi việc triển khai nó như một tuple sẽ đảm bảo rằng dữ liệu đó được bảo vệ chống ghi (write-protected).</li>
</ul>

<h3 id="mcetoc_1ck9tof5c1"><em><strong>Tạo một tuple</strong></em></h3>

<p>Tuple được tạo bằng cách đặt tất cả các phần tử của nó trong dấu ngoặc đơn (), phân tách bằng dấu phẩy. Bạn có thể bỏ dấu ngoặc đơn nếu muốn, nhưng nên thêm nó vào cho code rõ ràng hơn.</p>

<p>Tuple không bị giới hạn số lượng phần tử và có thể có nhiều kiểu dữ liệu khác nhau như số nguyên, số thập phân, list, string,...</p>

<pre id="pre82">
<code># Tuple rỗng
# Output: ()
my_tuple = ()
print(my_tuple)

# tuple số nguyên
# Output: (2, 4, 16, 256)
my_tuple = (2, 4, 16, 256)
print(my_tuple)

# tuple có nhiều kiểu dữ liệu
# Output: (10, &quot;Quantrimang.com&quot;, 3.5)
my_tuple = (10, &quot;Quantrimang.com&quot;, 3.5)
print(my_tuple)

# tuple lồng nhau
# Output: (&quot;QTM&quot;, &#91;2, 4, 6&#93;, (3, 5, 7))
my_tuple = (&quot;QTM&quot;, &#91;2, 4, 6&#93;, (3, 5, 7))
print(my_tuple)

# tuple có thể được tạo mà không cần dấu ()
# còn gọi là đóng gói tuple
# Output: (10, &quot;Quantrimang.com&quot;, 3.5)

my_tuple = 10, &quot;Quantrimang.com&quot;, 3.5
print(my_tuple)

# mở gói (unpacking) tuple cũng có thể làm được
# Output:
# 10
# Quantrimang.com
# 3.5
a, b, c = my_tuple
print(a)
print(b)
print(c) </code></pre>

<p>Tạo tuple chỉ có một phần tử hơi phức tạp chút, nếu bạn tạo theo cách thông thường là cho phần tử đó vào trong cặp dấu () là chưa đủ, cần phải thêm dấu phẩy để chỉ ra rằng, đây là tuple.</p>

<pre id="pre83">
<code># tạo tuple chỉ với ()
# Output: &lt;class &#039;str&#039;&gt;
my_tuple = (&quot;Quantrimang.com&quot;)
print(type(my_tuple))

# khi thêm dấu phẩy vào cuối
# Output: &lt;class &#039;tuple&#039;&gt;
my_tuple = (&quot;Quantrimang.com&quot;,) 
print(type(my_tuple))

# dấu () là tùy chọn, bạn có thể bỏ nếu thích
# Output: &lt;class &#039;tuple&#039;&gt;
my_tuple = &quot;Quantrimang.com&quot;,
print(type(my_tuple))</code></pre>

<h3 id="mcetoc_1ck9tof5c2"><em><strong>Truy cập vào các phần tử của tuple</strong></em></h3>

<p>Có nhiều cách khác nhau để truy cập vào các phần tử của một tuple, khá giống với list, nên mình không lấy ví dụ cụ thể, các bạn có thể xem lại phần list nha.</p>

<p><strong>Index:&nbsp;</strong>Sử dụng toán tử index &#91;&#93; để truy cập vào phần tử trong tuple với index bắt đầu bằng 0. Nghĩa là nếu tuple có 6 phần tử thì index của nó sẽ bắt đầu từ 0 đến 5. Nếu cố gắn truy cập đến index 6, 7 thì sẽ tạo lỗi IndexError. Index bắt buộc phải là số nguyên, mà không thể là số thập phân hay bất kỳ kiểu dữ liệu nào khác, nếu không sẽ tạo lỗi TypeError. Những tuple lồng nhau được truy cập bằng cách sử dụng index lồng nhau:</p>

<pre id="pre84">
<code># tuple lồng nhau
n_tuple = (&quot;Quantrimang.com&quot;, &#91;2, 6, 8&#93;, (1, 2, 3))

# index lồng nhau
# Output: &#039;r&#039;
print(n_tuple&#91;0&#93;&#91;5&#93;)

# index lồng nhau
# Output: 8
print(n_tuple&#91;1&#93;&#91;2&#93;)</code></pre>

<p><strong>Index âm:&nbsp;</strong>Python cho phép lập chỉ mục âm cho các đối tượng dạng chuỗi. Index -1 tham chiếu đến phần tử cuối cùng, -2 là thứ 2 tính từ cuối tính lên.</p>

<p><strong>Cắt lát:</strong>&nbsp;Có thể truy cập đến một loạt phần tử trong tuple bằng cách sử dụng toán tử cắt lát : (dấu 2 chấm).</p>

<h3 id="mcetoc_1ck9tof5c3"><em><strong>Thay đổi một tuple</strong></em></h3>

<p>Không giống như list, tuple không thể thay đổi. Điều này có nghĩa là các phần tử của một tuple không thể thay đổi một khi đã được gán. Nhưng, nếu bản thân phần tử đó là một kiểu dữ liệu có thể thay đổi (như list chẳng hạn) thì các phần tử lồng nhau có thể được thay đổi. Chúng ta cũng có thể gán giá trị khác cho tuple (gọi là gán lại - reassignment).</p>

<pre id="pre85">
<code>my_tuple = (1, 3, 5, &#91;7, 9&#93;)

# không thể thay đổi phần tử của tuple
# Nếu bạn bỏ dấu # ở dòng 8
# Bạn sẽ nhận được lỗi:
# TypeError: &#039;tuple&#039; object does not support item assignment

#my_tuple&#91;1&#93; = 9

# Nhưng phần tử có index 3 trong tuple là list
# list có thể thay đổi, nên phần tử đó có thể thay đổi
# Output: (1, 3, 5, &#91;8, 9&#93;)
my_tuple&#91;3&#93;&#91;0&#93; = 8
print(my_tuple)

# Nếu cần thay đổi tuple hãy gán lại giá trị cho nó
# Output: (&#039;q&#039;, &#039;u&#039;, &#039;a&#039;, &#039;n&#039;, &#039;t&#039;, &#039;r&#039;, &#039;i&#039;, &#039;m&#039;, &#039;a&#039;, &#039;n&#039;, &#039;g&#039;)
my_tuple = (&#039;q&#039;, &#039;u&#039;, &#039;a&#039;, &#039;n&#039;, &#039;t&#039;, &#039;r&#039;, &#039;i&#039;, &#039;m&#039;, &#039;a&#039;, &#039;n&#039;, &#039;g&#039;)
print(my_tuple)</code></pre>

<p>Bạn có thể dùng toán tử + để nối 2 tuple, toán tử * để lặp lại tuple theo số lần đã cho. Cả + và * đều cho kết quả là một tuple mới.</p>

<pre id="pre86">
<code># Nối 2 tuple
# Output: (2, 4, 6, 3, 5, 7)
print((2, 4, 6) + (3, 5, 7))

# Lặp lại tuple
# Output: (&#039;Quantrimang.com&#039;, &#039;Quantrimang.com&#039;, &#039;Quantrimang.com&#039;)
print((&quot;Quantrimang.com&quot;,) * 3)</code></pre>

<h3 id="mcetoc_1ckbiu1pk0"><em><strong>Xóa tuple</strong></em></h3>

<p>Các phần tử trong tuple không thể thay đổi nên chúng ta cũng không thể xóa, loại bỏ phần tử khỏi tuple. Nhưng việc xóa hoàn toàn một tuple có thể thực hiện được với từ khóa del như dưới đây:</p>
&nbsp;

<pre id="pre87">
<code>QTM = &#91;&#039;q&#039;,&#039;u&#039;,&#039;a&#039;,&#039;n&#039;,&#039;t&#039;,&#039;r&#039;,&#039;i&#039;,&#039;m&#039;,&#039;a&#039;,&#039;n&#039;,&#039;g&#039;,&#039;.&#039;,&#039;c&#039;,&#039;o&#039;,&#039;m&#039;&#93;

# Không thể xóa phần tử của tuple
# Nếu bạn bỏ dấu # ở dòng 8,
# sẽ tạo ra lỗi:
# TypeError: &#039;tuple&#039; object doesn&#039;t support item deletion

#del QTM&#91;3&#93;

# Có thể xóa toàn bộ tuple
# Kết quả chạy code sẽ hiện ra lỗi:
# NameError: name &#039;my_tuple&#039; is not defined
del QTM
QTM</code></pre>

<h3 id="mcetoc_1ckbiu1pk1"><em><strong>Phương thức và hàm dùng với tuple trong Python</strong></em></h3>

<p>Phương thức thêm phần tử và xóa phần tử không thể sử dụng với tuple, chỉ có 2 phương thức sau là dùng được:</p>

<ul>
	<li><strong>count(x)</strong>: Đếm số phần tử x trong tuple.</li>
	<li><strong>index(x)</strong>: Trả về giá trị index của phần tử x đầu tiên mà nó gặp trong tuple.</li>
</ul>

<pre id="pre88">
<code>QTM = &#91;&#039;q&#039;,&#039;u&#039;,&#039;a&#039;,&#039;n&#039;,&#039;t&#039;,&#039;r&#039;,&#039;i&#039;,&#039;m&#039;,&#039;a&#039;,&#039;n&#039;,&#039;g&#039;,&#039;.&#039;,&#039;c&#039;,&#039;o&#039;,&#039;m&#039;&#93;

# Count
# Output: 2
print(QTM.count(&#039;m&#039;))

# Index
# Output: 3
print(QTM.index(&#039;n&#039;))</code></pre>

<p>Các hàm dùng trong tuple khá giống với list, gồm có:</p>

<ul>
	<li><strong>all()</strong>: Trả về giá trị True nếu tất cả các phần tử của tuple là true hoặc tuple rỗng.</li>
	<li><strong>any()</strong>: Trả về True nếu bất kỳ phần tử nào của tuple là true, nếu tuple rỗng trả về False.</li>
	<li><strong>enumerated()</strong>: Trả về đối tượng enumerate (liệt kê), chứa cặp index và giá trị của tất cả phần tử của tuple.</li>
	<li><strong>len()</strong>: Trả về độ dài (số phần tử) của tuple.</li>
	<li><strong>max()</strong>: Trả về phần tử lớn nhất của tuple.</li>
	<li><strong>min()</strong>: Trả về phần tử nhỏ nhất của tuple.</li>
	<li><strong>sorted()</strong>: Lấy phần tử trong tuple và trả về list mới được sắp xếp (tuple không sắp xếp được).</li>
	<li><strong>sum()</strong>: Trả về tổng tất cả các phần tử trong tuple.</li>
	<li><strong>tuple()</strong>: Chuyển đổi những đối tượng có thể lặp (list, string, set, dictionary) thành tuple.</li>
</ul>

<h3 id="mcetoc_1ckbiu1pk2"><em><strong>Kiểm tra phần tử trong tuple</strong></em></h3>

<p>Bạn có thể kiểm tra xem một phần tử đã tồn tại trong tuple hay chưa với từ khóa in.</p>

<pre id="pre89">
<code>QTM = &#91;&#039;q&#039;,&#039;u&#039;,&#039;a&#039;,&#039;n&#039;,&#039;t&#039;,&#039;r&#039;,&#039;i&#039;,&#039;m&#039;,&#039;a&#039;,&#039;n&#039;,&#039;g&#039;,&#039;.&#039;,&#039;c&#039;,&#039;o&#039;,&#039;m&#039;&#93;

# Kiểm tra phần tử
# Output: True
print(&#039;a&#039; in QTM)

# Output: False
print(&#039;b&#039; in QTM)

# Not in operation
# Output: False
print(&#039;g&#039; not in QTM)</code></pre>

<h3 id="mcetoc_1ckbiu1pk3"><em><strong>Lặp qua các phần tử của tuple trong Python</strong></em></h3>

<p>Sử dụng vòng lặp for để lặp qua các phần tử trong tuple.</p>

<pre id="pre90">
<code>for ngon_ngu in (&#039;Python&#039;,&#039;C++&#039;,&#039;Web&#039;):
print(&quot;Tôi thích lập trình&quot;,ngon_ngu)</code></pre>

<p>Kết quả trả về sẽ như sau:</p>

<pre id="pre91">
<code>Tôi thích lập trình Python
Tôi thích lập trình C++
Tôi thích lập trình Web</code></pre>

<h2 id="mcetoc_1bth5unee5"><strong>6. Set</strong></h2>

<p>Set trong Python là tập hợp các phần tử duy nhất, không có thứ tự. Các phần tử trong set phân cách nhau bằng dấu phẩy và nằm trong dấu ngoặc nhọn {}. Nhớ kỹ rằng các phần tử trong set không có thứ tự. Nhưng các phần tử trong set có thể thay đổi, có thể thêm hoặc xóa phần tử của set. Set có thể được sử dụng để thực hiện các phép toán như tập hợp, giao,...</p>

<h3 id="mcetoc_1ckbrm6v60"><em><strong>Cách tạo set</strong></em></h3>

<p>Set được tạo bằng cách đặt tất cả các phần tử trong dấu ngoặc nhọn, phân tách bằng dấu phẩy hoặc sử dụng hàm set(). Set không giới hạn số lượng phần tử, nó có thể chứa nhiều kiểu biến khác nhau, nhưng không thể chứa phần tử có thể thay đổi được như list, set hay dictionary.</p>

<p>Ví dụ về set:</p>

<pre id="pre92">
<code>a = {5,2,3,1,4}</code></pre>

<p>Nếu thực hiện lệnh in như sau:</p>

<pre id="pre93">
<code>print(&quot;a=&quot;, a)</code></pre>

<p>Bạn sẽ nhận được kết quả:</p>

<pre id="pre94">
<code>a = {1, 2, 3, 4, 5}</code></pre>

<p>Set với nhiều kiểu dữ liệu hỗn hợp như sau:</p>

<pre id="pre95">
<code>my_set = {1.0, &quot;Xin chào&quot;, (1, 2, 3)}

#Output: QTM_Set= {&#039;Xin chào&#039;, 1.0, (1, 2, 3)}
print(&quot;QTM_Set=&quot;,my_set)</code></pre>

<p>Tạo set rỗng có chút khó khăn. Cặp dấu {} sẽ tạo một dictionary trong Python. Để tạo set không có phần tử nào, ta sử dụng hàm set() mà không có đối số nào.</p>

<pre id="pre96">
<code># initialize a with {}
qtm = {}

# Kiểm tra kiểu dữ liệu của qtm
# Output: &lt;class &#039;dict&#039;&gt;
print(type(qtm))

# Khởi tạo qtm với set()
qtm = set()

# Kiểm tra kiểu dữ liệu của qtm
# Output: &lt;class &#039;set&#039;&gt;
print(type(qtm))</code></pre>

<h3 id="mcetoc_1ckbrm6v71"><em><strong>Làm sao để thay đổi set trong Python</strong></em></h3>

<p>Vì set là tập hợp các phần tử không có thứ tự nên chỉ mục chả có ý nghĩa gì với set. Do đó toán tử cắt &#91;&#93; sẽ không làm việc trên set. Nếu cố tình dùng, bạn sẽ nhận được thông báo lỗi như dưới đây:</p>

<pre id="pre97">
<code>&gt;&gt;&gt; a&#91;1&#93;
Traceback (most recent call last):
File &quot;&lt;pyshell#2&gt;&quot;, line 1, in &lt;module&gt;
a&#91;1&#93;
TypeError: &#039;set&#039; object does not support indexing</code></pre>

<p>Để thêm một phần tử vào set, bạn sử dụng add() và để thêm nhiều phần tử dùng update(). Update() có thể nhận tuple, list, strring và set làm đối số. Trong mọi trường hợp, Set có giá trị duy nhất, các bản sao sẽ tự động bị loại bỏ.</p>

<pre id="pre98">
<code># Khởi tạo my_set
my_set = {1,3}
print(my_set)

# Nếu bỏ dấu # ở dòng 9,
# Bạn sẽ nhận được lỗi
# TypeError: &#039;set&#039; object does not support indexing

#my_set&#91;0&#93;

# Thêm phần tử
# Output: {1, 2, 3}
my_set.add(2)
print(my_set)

# Thêm nhiều phần tử vào set
# Output: {1, 2, 3, 4}
my_set.update(&#91;2,3,4&#93;)
print(my_set)

# Thêm list và set
# Output: {1, 2, 3, 4, 5, 6, 8}
my_set.update(&#91;4,5&#93;, {1,6,8})
print(my_set)</code></pre>

<h3 id="mcetoc_1ckbrm6v72"><em><strong>Xóa phần tử khỏi set</strong></em></h3>

<p>Bạn dùng discard() và remove() để xóa phần tử cụ thể khỏi set. Khi phần tử cần xóa không tồn tại trong set thì discard() không làm gì cả, còn remove() sẽ báo lỗi.</p>

<pre id="pre99">
<code># Khởi tạo my_set
my_set = {1, 3, 4, 5, 6}
print(my_set)

# Xóa phần tử bằng discard()
# Output: {1, 3, 5, 6}
my_set.discard(4)
print(my_set)

# Xóa bằng remove()
# Output: {1, 3, 5}
my_set.remove(6)
print(my_set)

# Xóa phần tử không có 
# trong set bằng discard()
# Output: {1, 3, 5}
my_set.discard(2)
print(my_set)

# Xóa phần tử không có 
# trong set bằng remove()
# Nếu bạn bỏ dấu # ở dòng 27,
# bạn sẽ nhận được lỗi.
# Output: KeyError: 2

#my_set.remove(2)</code></pre>

<p>Bạn có thể xóa và trả lại một mục bằng phương thức pop(). Set không có thứ tự, không có cách nào để xác định phần tử nào sẽ bị xóa, điều này diễn ra hoàn toàn ngẫu hứng. Việc xóa hoàn toàn set được thực hiện bằng cách dùng clear().</p>

<pre id="pre100">
<code># Khởi tạo my_set
# Output: set of unique elements
my_set = set(&quot;Quantrimang.com&quot;)
print(my_set)

# xóa phần tử bằng pop()
# Output: phần tử bị xóa ngẫu nhiên
print(my_set.pop())

# xóa phần tử khác bằng pop()
# Output: phần tử bị xóa ngẫu nhiên
my_set.pop()
print(my_set)

# clear my_set
#Output: set()
my_set.clear()
print(my_set)</code></pre>

<h3 id="mcetoc_1ckbrm6v73"><em><strong>Các toán tử set trong Python</strong></em></h3>

<p>Set thường được sử dụng để chứa các toán tử tập hợp như hợp, giao, hiệu, bù. Có cả phương thức và toán tử để thực hiện những phép toán tập hợp này.</p>

<p>Ta sẽ sử dụng 2 tập hợp dưới đây:</p>

<pre id="pre101">
<code>&gt;&gt;&gt; A = {1, 2, 3, 4, 5}
&gt;&gt;&gt; B = {4, 5, 6, 7, 8}</code></pre>

<p><strong>Hợp của A và B</strong>&nbsp;là tập hợp tất cả các phần tử của A và B. Hợp được biểu diễn bằng cách sử dụng toán tử | hoặc sử dụng phương thức union().</p>

<pre id="pre102">
<code># Khởi tạo A và B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# sử dụng toán tử | 
# Output: {1, 2, 3, 4, 5, 6, 7, 8}
print(A | B)

# sử dụng hàm union()
# Output: Như trên
print(A.union(B))
print(B.union(A))</code></pre>

<p><strong>Giao của A và B</strong>&nbsp;là tập hợp những phần tử chung của A và B. Để tìm giao của A và B ta có thể dùng toán tử &amp; hoặc hàm intersection().</p>

<pre id="pre103">
<code># khởi tạo A và B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# sử dụng &amp; 
# Output: {4, 5}
print(A &amp; B)

# sử dụng intersection()
# Output: {4, 5}
print(A.intersection(B))
print(B.intersection(A))</code></pre>

<p><strong>Hiệu của A và B</strong>&nbsp;(A-B) là tập hợp phần tử chỉ có trong A, không có trong B. Hiệu của B và A (B-A) là tập hợp phần tử chỉ có trong B không có trong A. Có thể sử dụng toán tử - hoặc hàm difference() để thực hiện phép toán tập hợp này.</p>

<pre id="pre104">
<code># Khởi tạo A và B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# Sử dụng toán tử - trên A
# Output: {1, 2, 3}
print(A - B)
# Sử dụng hàm difference() trên A
# Output: {1, 2, 3}
print(A.difference(B))

# Sử dụng toán tử - trên B
# Output: {8, 6, 7}
print(B - A)

# Sử dụng difference() trên B
# Output: {8, 6, 7}
print(B.difference(A))</code></pre>

<p>Bù của A và B là tập hợp những phần tử có trong A và B nhưng không phải phần tử chung của hai tập hợp này. Bạn có thể dùng toán tử ^ hoặc hàm symmetric_difference() để thực hiện phép bù.</p>

<pre id="pre105">
<code># Khởi tạo A và B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# Sử dụng toán tử ^
# Output: {1, 2, 3, 6, 7, 8}
print(A ^ B)
# Sử dụng symmetric_difference() trên A
# Output: {1, 2, 3, 6, 7, 8}
print(A.symmetric_difference(B))</code></pre>

<h3 id="mcetoc_1ckbrm6v74"><em><strong>Các phương thức dùng trên set</strong></em></h3>

<table border="1">
	<tbody>
		<tr>
			<td><strong>Phương thức</strong></td>
			<td><strong>Mô tả</strong></td>
		</tr>
		<tr>
			<td>add()</td>
			<td>Thêm một phần tử vào set.</td>
		</tr>
		<tr>
			<td>clear()</td>
			<td>Xóa tất cả phần tử của set.</td>
		</tr>
		<tr>
			<td>copy()</td>
			<td>Trả về bản sao chép của set.</td>
		</tr>
		<tr>
			<td>difference()</td>
			<td>Trả về set mới chứa những phần tử khác nhau của 2 hay nhiều set.</td>
		</tr>
		<tr>
			<td>difference_update()</td>
			<td>Xóa tất cả các phần tử của set khác từ set này.</td>
		</tr>
		<tr>
			<td>discard()</td>
			<td>Xóa phần tử nếu nó có mặt trong set.</td>
		</tr>
		<tr>
			<td>intersection()</td>
			<td>Trả về set mới chứa phần tử chung của 2 set.</td>
		</tr>
		<tr>
			<td>intersection_update()</td>
			<td>Cập nhật set với phần tử chung của chính nó và set khác.</td>
		</tr>
		<tr>
			<td>isdisjoint()</td>
			<td>Trả về True nếu 2 set không có phần tử chung.</td>
		</tr>
		<tr>
			<td>issubset()</td>
			<td>Trả về True nếu set khác chứa set này.</td>
		</tr>
		<tr>
			<td>issuperset()</td>
			<td>Trả về True nếu set này chưa set khác.</td>
		</tr>
		<tr>
			<td>pop()</td>
			<td>Xóa và trả về phần tử ngẫu nhiên, báo lỗi KeyError nếu set rỗng.</td>
		</tr>
		<tr>
			<td>remove()</td>
			<td>Xóa phần tử từ set. Nếu phần tử đó không có trong set sẽ báo lỗi KeyError.</td>
		</tr>
		<tr>
			<td>symmetric_difference()</td>
			<td>Trả về set mới chứa những phần tử không phải là phần tử chung của 2 set.</td>
		</tr>
		<tr>
			<td>symmetric_difference_update()</td>
			<td>Cập nhật set với những phần tử khác nhau của chính nó và set khác.</td>
		</tr>
		<tr>
			<td>union()</td>
			<td>Trả về set mới là hợp của 2 set.</td>
		</tr>
		<tr>
			<td>update()</td>
			<td>Cập nhật set với hợp của chính nó và set khác.</td>
		</tr>
	</tbody>
</table>

<h3 id="mcetoc_1ckbud0g60"><em><strong>Kiểm tra phần tử trong set</strong></em></h3>

<p>Bạn có thể kiểm tra một đối tượng xem nó có nằm trong set không, sử dụng từ khóa in.</p>

<pre id="pre106">
<code># Khởi tạo my_set
my_set = set(&quot;Quantrimang.com&quot;)

# Kiểm tra xem Q có trong my_set không
# Output: True
print(&#039;Q&#039; in my_set)

# Kiểm tra xem q có trong my_set không
# Output: False
print(&#039;q&#039; in my_set)</code></pre>

<h3 id="mcetoc_1ckbud0g61"><em><strong>Lặp qua phần tử của set</strong></em></h3>

<p>Sử dụng vòng lặp for để lặp qua các phần tử của set.</p>

<pre id="pre107">
<code>for letter in set(&quot;Python&quot;):
print(letter)</code></pre>

<p>Chạy code trên bạn nhận được kết quả như sau:</p>

<pre id="pre108">
<code>t
y
P
h
o
n</code></pre>

<h3 id="mcetoc_1ckbud0g62"><em><strong>Hàm thường dùng trên set</strong></em></h3>

<p>Các hàm thường dùng trên set bao gồm all(), any(), enumerate(), len(), max(), min(), sorted(), sum(). Chức năng của những hàm này khá giống với khi bạn sử dụng trên list, tuple, bạn có thể tham khảo thêm nếu chưa rõ nha.</p>

<h3 id="mcetoc_1ckbud0g63"><em><strong>Frozenset trong Python</strong></em></h3>

<p>Frozenset là một lớp mới, có đặc điểm của một set, nhưng phần tử của nó không thể thay đổi được sau khi gán. Để dễ hình dung thì tuple là list bất biến còn frozenset là set bất biến.</p>

<p>Các set có thể thay đổi được nhưng không thể băm (hash) được, do đó không thể sử dụng set để làm key cho dictionary. Nhưng frozenset có thể băm được nên có thể dùng như các key cho dictionary.</p>

<p>Frozenset có thể tạo bằng hàm frozenset(). Kiểu dữ liệu này hỗ trợ các phương thức như copy(), difference(), intersection(), isdisjoint(), issubset(), issuperset(), symmetric_difference() và union(). Vì không thể thay đổi nên phương thức add() hay remove() không sử dụng được trên frozenset.</p>

<h2 id="mcetoc_1bth6iuio6"><strong>7. Dictionary</strong></h2>

<p>Dictionary là tập hợp các cặp khóa giá trị không có thứ tự. Nó thường được sử dụng khi chúng ta có một số lượng lớn dữ liệu. Các dictionary được tối ưu hóa để trích xuất dữ liệu với điều kiện bạn phải biết được khóa để lấy giá trị.</p>

<h3 id="mcetoc_1cn0q4mql0"><em><strong>Cách tạo dictionary trong Python</strong></em></h3>

<p>Trong Python, dictionary được định nghĩa trong dấu ngoặc nhọn {} với mỗi phần tử là một cặp theo dạng key:value. Key và value này có thể là bất kỳ kiểu dữ liệu nào. Bạn cũng có thể tạo dictionary bằng cách sử dụng hàm dict() được tích hợp sẵn.</p>

<p>Ví dụ:</p>

<pre id="pre109">
<code>dict1 = {} #dictionary rỗng
#dict2 là dictionary với các khóa nguyên
dict2 = {1: &#039;Quantrimang.com&#039;,2: &#039;Công nghệ&#039;}
#Tạo dictionary với khóa hỗn hợp
dict3 = {&#039;tên&#039;: &#039;QTM&#039;, 1: &#91;1, 3, 5&#93;}
#Tạo dictionary bằng dict()
dict4 = dict({1:&#039;apple&#039;, 2:&#039;ball&#039;})
#Tạo dictionary từ chuỗi với mỗi mục là một cặp
dict5 = dict(&#91;(1,&#039;QTM&#039;), (2,&#039;CN&#039;)&#93;)</code></pre>

<p>Khi thực hiện kiểm tra kiểu dữ liệu của d ta được kết quả:</p>

<pre id="pre110">
<code>&gt;&gt;&gt; type(dict2)
&lt;class &#039;dict&#039;&gt;</code></pre>

<h3 id="mcetoc_1cn0q4mql1"><em><strong>Truy cập phần tử của dictionary</strong></em></h3>

<p>Các kiểu dữ liệu lưu trữ khác sử dụng index để truy cập vào các giá trị thì dictionary sử dụng các key. Key có thể được sử dụng trong cặp dấu ngoặc vuông hoặc sử dụng get().</p>

<p>Sử dụng khóa để trích xuất dữ liệu:</p>

<pre id="pre111">
<code>#khai báo và gán giá trị dict2
dict2 = {1: &#039;Quantrimang.com&#039;,&#039;quantrimang&#039;: &#039;Công nghệ&#039;} 
print(type(dict2)) #in kiểu dữ liệu của dict2
#trích xuất dữ liệu bằng khóa rồi in
print(&quot;dict2&#91;1&#93; = &quot;, dict2&#91;1&#93;) 
print(&quot;dict2&#91;quantrimang&#93; = &quot;,dict2&#91;&#039;quantrimang&#039;&#93;)</code></pre>

<p>Chạy đoạn code trên ta sẽ được kết quả:</p>

<pre id="pre112">
<code>&lt;class &#039;dict&#039;&gt;
dict2&#91;1&#93; = Quantrimang.com
dict2&#91;quantrimang&#93; = Công nghệ</code></pre>

<h3 id="mcetoc_1cn0q4mql2"><em><strong>Thay đổi, thêm phần tử cho dictionary</strong></em></h3>

<p>Dictionary có thể thay đổi, nên có thể thêm phần tử mới hoặc thay đổi giá trị của các phần tử hiện có bằng cách sử dụng toán tử gán. Nếu key đã có, giá trị sẽ được cập nhật, nếu là một cặp key: value mới thì sẽ được thêm thành phần tử mới.</p>
&nbsp;

<pre id="pre113">
<code>dict2 = {1: &#039;Quantrimang.com&#039;,&#039;quantrimang&#039;: &#039;Công nghệ&#039;}

#cập nhật giá trị
dict2&#91;&#039;quantrimang&#039;&#93; = &#039;Quản trị mạng&#039;

#output: {1: &#039;Quantrimang.com&#039;, &#039;quantrimang&#039;: &#039;Quản trị mạng&#039;}
print(dict2)

#thêm phần tử mới
dict2&#91;2&#93; = &#039;Python&#039;

#output: {1: &#039;Quantrimang.com&#039;, &#039;quantrimang&#039;: &#039;Quản trị mạng&#039;, 2: &#039;Python&#039;}
print(dict2)</code></pre>

<h3 id="mcetoc_1cn0q4mql3"><em><strong>Xóa phần tử từ dictionary</strong></em></h3>

<p>Bạn có thể xóa phần tử cụ thể của dictionary bằng cách sử dụng pop(), nó sẽ phần tử có key đã cho và trả về giá trị của phần tử. popitem() có thể xóa và trả về một phần tử tùy ý dưới dạng (key, value). Tất cả các phần tử trong dictionary có thể bị xóa cùng lúc bằng cách dùng clear(). Ngoài ra, từ khóa del cũng có thể dùng để xóa một phần tử hoặc toàn bộ dictionary.</p>

<pre id="pre114">
<code># tạo dictionary
binh_phuong = {1:1, 2:4, 3:9, 4:16, 5:25}

# xóa phần tử số 4
# Output: 16
print(binh_phuong.pop(4))

# Output: {1: 1, 2: 4, 3: 9, 5: 25}
print(binh_phuong)

# xóa phần tử cụ thể
del binh_phuong&#91;2&#93;

# output: {1: 1, 3: 9, 5: 25}
print(binh_phuong)

# xóa phần tử bất kỳ
# Output: (5, 25)
print(binh_phuong.popitem())

# Output: {1: 1, 3: 9}
print(binh_phuong)

# xóa tất cả phần tử
binh_phuong.clear()

# output: {}
print(binh_phuong)

# xóa dictionary binh_phuong
del binh_phuong

# tạo lỗi nếu bỏ # ở lệnh sau
# print(squares)</code></pre>

<h3 id="mcetoc_1cn0q4mql4"><em><strong>Các phương thức và hàm cho dictionary</strong></em></h3>

<p>Đây là những phương thức thường dùng với dictionary:</p>

<table border="1">
	<tbody>
		<tr>
			<th scope="col">Method</th>
			<th scope="col">Mô tả</th>
		</tr>
		<tr>
			<td>clear()</td>
			<td>Xóa tất cả phần tử của dictionary.</td>
		</tr>
		<tr>
			<td>copy()</td>
			<td>Trả về một bản sao shollow copy của dictionary.</td>
		</tr>
		<tr>
			<td>fromkeys(seq&#91;,v&#93;)</td>
			<td>Trả về dictionary mới với key từ seq và value bằng v (default là&nbsp;<code>None</code>).</td>
		</tr>
		<tr>
			<td>get(key&#91;,d&#93;)</td>
			<td>Trả về giá trị của key, nếu key không tồn tại, trả về d. (default là&nbsp;<code>None</code>).</td>
		</tr>
		<tr>
			<td>items()</td>
			<td>Trả lại kiểu xem mới của các phần tử trong dictionary (key, value).</td>
		</tr>
		<tr>
			<td>keys()</td>
			<td>Trả về kiểu xem mới của các key trong dictionary.</td>
		</tr>
		<tr>
			<td>pop(key&#91;,d&#93;)</td>
			<td>Xóa phần tử bằng key và trả về giá trị hoặc d nếu key không tìm thấy. Nếu d không được cấp, key không tồn tại thì sẽ tạo lỗi&nbsp;<code>KeyError</code>.</td>
		</tr>
		<tr>
			<td>popitem()</td>
			<td>Xóa và trả về phần tử bất kỳ ở dạng (key, value). Tạo lỗi&nbsp;<code>KeyError</code>&nbsp;nếu dictionary rỗng.</td>
		</tr>
		<tr>
			<td>setdefault(key,&#91;,d&#93;)</td>
			<td>Nếy key tồn tại trả về value của nó, nếu không thêm key với value là d và trả về d (default là&nbsp;<code>None</code>).</td>
		</tr>
		<tr>
			<td>update(&#91;other&#93;)</td>
			<td>Cập nhật dictionary với cặp key/value từ&nbsp;other, ghi đè lên các key đã có.</td>
		</tr>
		<tr>
			<td>values()</td>
			<td>Trả về kiểu view mới của value trong dictionary.</td>
		</tr>
	</tbody>
</table>

<p>Các hàm tích hợp như all(), any(), len(), cmp(), sorted(),... thường được sử dụng với dictionary để thực hiện những nhiệm vụ khác nhau.</p>

<h3 id="mcetoc_1cn0sed5p0"><em><strong>Dictionary comprehension trong Python</strong></em></h3>

<p>Dictionary comprehension là cách đơn giản, rút gọn để tạo dictionary mới từ một vòng lặp trong Python. Câu lệnh sẽ bao gồm một cặp biểu thức (key:value) cùng câu lệnh for, tất cả đặt trong dấu {}. Dưới đây là ví dụ tạo dictionary với mỗi pahàn tử là một cặp số và lập phương của nó.</p>

<pre id="pre115">
<code>lap_phuong = {x: x*x*x for x in range(6)}

# Output: {0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125}
print(lap_phuong)</code></pre>

<p>Chương trình trên tương đương với</p>

<pre id="pre116">
<code>lap_phuong = {}
for x in range(6):
lap_phuong&#91;x&#93; = x*x*x
print(lap_phuong)</code></pre>

<p>Bạn cũng có thể sử dụng lệnh if trong dictionary comprehension. Lệnh if có thể lọc những phần tử trong dictionary hiện có để tạo thành dictionary mới như ví dụ dưới đây:</p>

<pre id="pre117">
<code>lap_phuong_chan = {x: x*x*x for x in range (10) if x%2==0}
# output: {0: 0, 2: 8, 4: 64, 6: 216, 8: 512}
print(lap_phuong_chan)</code></pre>

<h3 id="mcetoc_1cn0sed5p1">Kiểm tra và lặp qua phần tử trong dictionary</h3>

<p>Bạn chỉ có thể kiểm tra key của phần tử đã có trong dictionary hay chưa bằng cách dùng in, và không thể làm điều đó với value.</p>

<pre id="pre118">
<code>lap_phuong = {0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125}
#output: True
print (2 in lap_phuong)
#output: False
print (9 in lap_phuong)
#output: False
print (5 not in lap_phuong)</code></pre>

<p>Bạn có thể sử dụng vòng lặp for để lặp qua key của các phần tử trong dictionary.</p>

<pre id="pre119">
<code>lap_phuong = {0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125}
for i in lap_phuong
print(lap_phuong&#91;i&#93;)</code></pre>

<p>Chạy code trên, các giá trị tương ứng với từng key sẽ được in ra màn hình theo thứ tự của key.</p>

<h2 id="mcetoc_1cf9ja1n18"><strong>8. Chuyển đổi giữa các kiểu dữ liệu</strong></h2>

<p>Chúng ta có thể chuyển đổi giữa các kiểu dữ liệu khác nhau bằng cách sử dụng hàm chuyển đổi kiểu khác nhau như int() (kiểu số nguyên), float() số thập phân, str() chuỗi,...</p>

<p><strong>Ví dụ:</strong></p>

<pre id="pre120">
<code>&gt;&gt;&gt; float(11)
11.0</code></pre>

<p>Chuyển đổi từ kiểu float sang kiểu int sẽ bị giảm giá trị (làm cho nó gần với số không hơn).</p>

<p><strong>Ví dụ:</strong></p>

<pre id="pre121">
<code>int(18.6)
18</code></pre>

<p>Chuyển đổi từ string sang hoặc ngược lại phải có các giá trị tương thích.</p>

<p>Bạn có thể thực hiện chuyển đổi chuỗi này sang chuỗi khác:</p>

<pre id="pre122">
<code>&gt;&gt;&gt; set(&#91;2,4,6&#93;)
{2,4,6}
&gt;&gt;&gt; tuple({3,5,7})
(3,5,7)
&gt;&gt;&gt; list(&#039;quantrimang&#039;)
&#91;&#039;q&#039;, &#039;u&#039;, &#039;a&#039;, &#039;n&#039;, &#039;t&#039;, &#039;r&#039;, &#039;i&#039;, &#039;m&#039;, &#039;a&#039;, &#039;n&#039;, &#039;g&#039;&#93;</code></pre>

<p>Để chuyển đổi sang dictionary, mỗi phần tử phải là một cặp như ví dụ dưới đây:</p>

<pre id="pre123">
<code>&gt;&gt;&gt; dict(&#91;&#91;2,4&#93;,&#91;1,3&#93;&#93;)
{2: 4, 1: 3}
&gt;&gt;&gt; dict(&#91;(3,9),(4,16)&#93;)
{3: 9, 4: 16}</code></pre>

<h2 id="mcetoc_1bs0qd2em1"><strong>9. Bước đầu tiên hướng tới lập trình</strong></h2>

<p>Tất nhiên, chúng ta có thể sử dụng Python cho những tác vụ phức tạp hơn là thêm vài phần tử vào chuỗi. Ví dụ, có thể viết một chuỗi con của dãy Fibonacci (dãy vô hạn các số tự nhiên bắt đầu bằng hai phần tử 0 và 1 hoặc 1 và 1, các phần tử sau đó được thiết lập bằng cách cộng hai phần tử trước nó lại) như sau:</p>

<pre id="pre124">
<code>&gt;&gt;&gt; # Dãy Fibonacci:
... # tổng của hai phần tử tạo nên phần tử tiếp theo
... a, b = 0, 1
&gt;&gt;&gt; while b &lt; 10:
... print(b)
... a, b = b, a+b
...
1
1
2
3
5
8</code></pre>

<p>Ví dụ này giới thiệu một số tính năng mới:</p>

<ul>
	<li><strong>Dòng đầu tiên chứa một phép gán kép:</strong>&nbsp;Biến a và b đồng thời nhận được giá trị 0 và 1. Dòng cuối cùng, nó được sử dụng lại, thể hiện rằng các biểu thức ở phía bên phải sẽ được tính (ở đây là cộng tổng a và b) trước khi bất kỳ hành động gán nào được diễn ra. Biểu thức bên phải được tính từ trái sang phải</li>
	<li><strong>Vòng lặp while sẽ được thực thi nếu điều kiện (ở đây là b&lt;10) vẫn đúng:</strong>&nbsp;Trong Python, cũng giống C, bất kỳ giá trị số nguyên khác 0 nào cũng đúng, 0 là sai. Điều kiện có thể là một chuỗi, danh sách, thậm chí một chuỗi tuần tự hay bất cứ thứ gì có độ dài khác 0 đều đúng, chuỗi rỗng sẽ sai. Phép kiểm tra trong ví dụ trên là một so sánh khá đơn giản. Các toán tử so sánh chuẩn được viết giống như C: &lt; (nhỏ hơn), &gt; (lớn hơn), == (bằng), &lt;=, &gt;= và != (không bằng/khác).</li>
	<li><strong>Thân của vòng lặp được viết thụt vào trong:</strong>&nbsp;Thụt đầu dòng là cách mà Python nhóm các lệnh. Tại dấu nhắc lệnh, bạn có thể nhấn tab hoặc phím cách để thụt lề. Một trình soạn thảo code sẽ hỗ trợ tốt hơn cho việc nhập những đoạn code Python phức tạp, thông thường các trình soạn thảo này đề có thụt lề tự động. Khi nhập một khối lệnh bạn phải chèn thêm một dòng trống ở cuối cùng để kết thúc khối lệnh (vì trình phân tích cú pháp không thể phân tích khi nào bạn hoàn tất dòng lệnh cuối cùng trong khối). Lưu ý là mỗi dòng trong một khối lệnh cơ bản phải được thụt vào cùng một khoảng giống nhau.</li>
	<li><strong>Hàm print() viết ra giá trị của các đối số mà nó được cung cấp:</strong>&nbsp;Nó khác với việc chỉ viết những biểu thức bạn muốn viết (như trong ví dụ dùng Python như một chiếc máy tính) theo cách xử lý nhiều đối số, số lượng dấu chấm động và chuỗi. Các chuỗi được in sẽ không có dấu ngoặc kép, một khoảng trắng được chèn vào giữa các mục, do đó, bạn có thể định dạng chúng theo ý thích, giống như thế này:</li>
</ul>

<pre id="pre125">
<code>&gt;&gt;&gt; i = 256*256
&gt;&gt;&gt; print(&#039;The value of i is&#039;, i)
The value of i is 65536</code></pre>

<p>Có thể sử dụng thêm đối số end cho hàm print() để tránh thêm dòng mới trong kết quả đầu ra hoặc kết thúc kết quả với một chuỗi khác:</p>

<pre id="pre126">
<code>&gt;&gt;&gt; a, b = 0, 1
&gt;&gt;&gt; while b &lt; 1000:
... print(b, end=&#039;,&#039;)
... a, b = b, a+b
...
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,</code></pre>

<p>Đến đây các bạn đã bắt đầu hình dung được phần nào về Python rồi đúng không? Hãy cùng chờ đón những bài học tiếp theo về các câu lệnh, cấu trúc dữ liệu trong Python nhé.<br  />
<br  />
<em>Phần sau:</em>&nbsp;<br  />
<em>Phần trước:</em>&nbsp;<a href="http://tinhocdct.xyz/hoat-dong-chuyen-mon/python-co-ban-phan-6-cac-kieu-du-lieu-trong-python-119.html" target="_blank">&#91;Python Cơ Bản&#93; Phần 6: Các kiểu dữ liệu trong Python</a></p>
		</div>
				<div id="author">
						<p>
				<strong>Tác giả bài viết:</strong>
				Thanh Sơn
			</p>
						<p>
				<strong>Nguồn tin:</strong>
				quantrimang.com
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://tinhocdct.xyz/hoat-dong-chuyen-mon/python-co-ban-phan-7-cac-kieu-du-lieu-trong-python-tt-121.html" title="&#91;Python Cơ Bản&#93; Phần 7&#x3A; Các kiểu dữ liệu trong Python &#40;tt&#41;">https://tinhocdct.xyz/hoat-dong-chuyen-mon/python-co-ban-phan-7-cac-kieu-du-lieu-trong-python-tt-121.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; TỔ TIN HỌC TRƯỜNG THPT ĐỖ CÔNG TƯỜNG
		</div>
		<div id="contact">
			<a href="mailto:webmaster@tinhocdct.xyz">webmaster@tinhocdct.xyz</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://tinhocdct.xyz/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
<script src="https://tinhocdct.xyz/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_is_recaptcha=0;</script>
<script src="https://tinhocdct.xyz/assets/js/language/vi.js"></script>
<script src="https://tinhocdct.xyz/assets/js/global.js"></script>
<script src="https://tinhocdct.xyz/themes/default/js/news.js"></script>
<script src="https://tinhocdct.xyz/themes/default/js/main.js"></script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1816161148536198"
     crossorigin="anonymous"></script>
<script src="https://tinhocdct.xyz/themes/default/js/bootstrap.min.js"></script>
</body>
</html>