1. Trang chủ
  2. » Giáo Dục - Đào Tạo

giáo trình LẬP TRÌNH PYTHON

100 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 100
Dung lượng 1,37 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Kiểu dữ liệu tuần tự❖Kiểu dữ liệu tuần tự trong python: những kiểu dữliệu chứa bên trong nó các dữ liệu con và thườngđược xử lý bằng cách lấy ra từng phần-tử-mộttheo thứ tự nào đó thường

Trang 1

TRƯỜNG ĐẠI HỌC THỦY LỢI Khoa Công nghệ thông tin

Trang 3

Kiểu dữ liệu tuần tự

❖Hai loại đặc trưng cơ bản trong điều khiển

➢ Sequential access: truy cập tuần tự

➢ Random access: truy cập ngẫu nhiên

❖Tuần tự: khá thông dụng trong cuộc sống, chẳng hạn

như xếp hàng, xử lý dây chuyền, lưu trữ trong băng từ,…

Trang 4

Kiểu dữ liệu tuần tự

❖Kiểu dữ liệu tuần tự trong python: những kiểu dữliệu chứa bên trong nó các dữ liệu con và thườngđược xử lý bằng cách lấy ra từng phần-tử-mộttheo thứ tự nào đó (thường là bằng vòng for)

➢ Các kiểu dữ liệu chứa bên trong nó các dữ liệu nhỏ hơn thường được gọi

4

Trang 5

Chương 5

Kiểu dữ liệu tuần tự List (danh sách)

Trang 6

Bất biến (immutable) và Khả biến (mutable)

❖Bất biến = không thay đổi, các loại dữ liệu bất biến thông dụng trong Python: bool , int , float , str , tuple và frozenset

❖Khả biến = có thể thay đổi, các loại dữ liệu khả biến thông dụng trong Python gồm: list , set , dict

❖Chúng ta vẫn thay đổi giá trị của int, tại sao nói “bất biến”

➢Python không thực sự thay đổi giá trị của int, phần mềm tạo vùng nhớ chứa giá trị mới và cho biến “trỏ” tới vùng đó

❖Ví dụ để hiểu rõ cơ chế này:

Trang 7

Giới thiệu và khai báo

❖List = dãy các đối tượng (một loại array đa năng)

❖Các phần tử con trong list không nhất thiết phải cùng kiểu dữ liệu

❖Khai báo trực tiếp: liệt kê các phần tử con đặt trong cặp ngoặc vuông ( [] ), ngăn cách bởi dấu phẩy ( , )

[1, 2, 3, 4, 5] # list 5 số nguyên

['a', 'b', 'c', 'd'] # list 4 chuỗi

[[1, 2], [3, 4]] # list 2 list con

[1, 'one', [2, 'two']] # list hỗn hợp

❖Kiểu chuỗi (str) trong python có thể xem như một list đặc biệt, bên trong gồm toàn các str độ dài 1

Trang 8

Khởi tạo list

❖Tạo list bằng constructor (hàm tạo)

l1 = list([1, 2, 3, 4]) # list 4 số nguyên

l2 = list('abc') # list 3 chuỗi con

Trang 9

So sánh 2 list: theo thứ tự từ điển

Trang 10

Phép toán, chỉ mục và cắt

❖Giữa list và str có sự tương đồng nhất định

➢List cũng hỗ trợ 3 phép toán: ghép nối (+), nhân bản (*) và kiểm tra nội dung (in)

➢List sử dụng hệ thống chỉ mục và các phép cắt phần con tương tự như str

❖Điểm khác biệt: nội dung của list có thể thay đổi

# khởi tạo list ban đầu

Trang 11

Chỉ mục, lát cắt, xóa dữ liệu với list

a = list ( 'abcde' )

print ( a ) # ['a', 'b', 'c', 'd', 'e']

a [- 1 ] = [ 0 , 5 , 9 ] # thay đổi phần tử cuối cùng

print ( a ) # ['a', 'b', 'c', 'd', [0, 5, 9]]

a [ 1 : 3 ] = [ 1 , 2 , 3 ] # thay đổi một đoạn

print ( a ) # ['a', 1, 2, 3, 'd', [0, 5, 9]]

print ( a [ 2 ::- 1 ]) # [2, 1, 'a']

a [ 2 ::- 1 ] = [ 0 ] # lỗi, đoạn ngược không thể thay đổi

del a [ 2 ::- 1 ] # xóa đoạn con từ 2 trở về đầu

print ( a ) # [3, 'd', [0, 5, 9]]

print ( a ) # lỗi, a không tồn tại

Trang 12

Các phương thức của list

❖Một số phương thức thường hay sử dụng

➢count(sub, [start, [end]]) : đếm số lần xuất hiện của sub

➢index(sub[, start[, end]]) : tìm vị trí xuất hiện của sub, phát sinh lỗi ValueError nếu không tìm thấy

➢clear (): xóa trắng list

➢append(x) : thêm x vào cuối list

➢extend(x) : thêm các phần tử của x vào cuối list

➢insert (p, x) : chèn x vào vị trí p trong list

➢pop(p) : bỏ phần tử thứ p ra khỏi list (trả về giá trị của phần tử đó), nếu không chỉ định p thì lấy phần

tử cuối

12

Trang 13

Các phương thức của list

❖Một số phương thức thường hay sử dụng

➢copy (): tạo bản sao của list (tương tự list[:])

➢remove(x) : bỏ phần tử đầu tiên trong list có giá trị x, báo lỗi ValueError nếu không tìm thấy

➢reverse() : đảo ngược các phần tử trong list

➢sort(key=None, reverse=False) : mặc định là sắp xếp các phần tử từ bé đến lớn trong list bằng cách so sánh trực tiếp giá trị

x = “Dai hoc Thuy loi”.split()

Trang 14

Các phương thức của list

❖Ví dụ:

14

Trang 15

Ví dụ về sắp xếp với list

a = [ '123' , '13' , '90' , "-1" , - 100 ]

a sort () # lỗi, vì các phần tử không cùng kiểu

a [- 1 ] = '-100' # thay đổi phần tử cuối thành dạng chuỗi

a sort () # xếp tăng dần theo so sánh chuỗi

Trang 16

Duyệt list với vòng lặp for

my_list = [ 'foo' , 'bar' , 'baz' , 'noo’ ]

# duyệt các phần tử, cách làm đơn giản nhất

for item in my_list :

print ( item )

# duyệt các phần tử theo giá trị chỉ mục

for i in range ( len ( my_list )):

Trang 17

Ví dụ về làm việc với list

# tạo và in nội dung của một list

danhsach = ["apple", "banana", "cherry"]

Trang 18

Một số thao tác thông dụng với list

Trang 19

Bài tập

1 Tính tổng các số nguyên lẻ

Nhập số nguyên dương n và danh sách gồm n số

nguyên a0, a1, …an-1 Hãy tính tổng các số nguyên

dương lẻ có trong dãy.

Trang 20

Bài tập 1

Tính tổng các số nguyên lẻ: Nhập số nguyên dương n và danh sách gồm n số nguyên a0, a1, …an-1 Hãy tính tổng các số nguyên dương lẻ có trong dãy.

20

Trang 21

Bài tập

2 Nhập n số nguyên và k (0<k<=n, n>=5)

Tổng k số hạng liên tiếp có tổng lớn nhất?

Trang 22

Bài tập 2

Nhập n số nguyên và k (0<k<=n, n>=5) Tổng k số hạng liên tiếp có tổng lớn nhất?

22

Trang 25

Bài tập 3 Sàng số nguyên tố

Eratosthenes

❖Ý tưởng thuật toán:

Sử dụng 1 danh sách List gồm N =10 7 phần tử với ý nghĩa:

Ta nhận thấy với mỗi số tự nhiên a (2,3, ,N) a sẽ không là số

nguyên tố khi và chỉ khi có thể phân tích a = i x k với i là

một số nguyên tố i<=k suy ra i<=sqrt(a)

Trang 26

Bài tập 3 Sàng số nguyên tố

Eratosthenes

26

Trang 27

Sàng số nguyên tố Eratosthenes

Trang 28

Bài tập vận dụng: Chọn số

❖ Cho dãy số nguyên gồm n số hạng Hãy chọn các

số hạng của dãy sao cho:

- Không chọn 2 số hạng kề nhau

- Tổng các số hạng được chọn là giá trị lớn nhất

Ví dụ: Dãy 1 , -2, 3 , 2 , 6 thì sẽ chọn: 1, 3, 6

28

Trang 29

Ma trận – danh sách hai chiều

Trong Python, các phần tử trong danh sách có thể

là một danh sách Một ma trận hay 1 mảng 2 chiều

được biểu diễn như một danh sách mà mỗi phần tử của nó là một danh sách biểu diễn các phần tử trên

Trang 30

Ma trận – danh sách hai chiều

Các dòng cột của ma trận được đánh chỉ số từ 0

<danh sách>[chỉ số hàng][chỉ số cột]

Ví dụ: In các phần tử của ma trận

30

Trang 31

Ma trận – danh sách hai chiều

Ví dụ: Viết chương trình nhập vào một ma trận gồm

m hàng và n cột In ra ma trận được nhập.

Trang 32

Ma trận – danh sách hai chiều

Ví dụ: Viết chương trình nhập vào một ma trận gồm

m hàng và n cột (0<=m, n<=5) In ra ma trận được nhập.

32

Trang 33

Ma trận – danh sách hai chiều

Ví dụ: Viết chương trình nhập vào một ma trận

gồm m hàng và n cột (0<=m, n<=5) In ra ma

trận được nhập.

Trang 36

Bài tập

36

Trang 37

Ma trận chuyển vị

❖ Nhập ma trận A gồm m hàng và n cột Tìm ma trận chuyển vị AT của A.

Trang 38

Ma trận chuyển vị

❖ Nhập ma trận A gồm m hàng và n cột Tìm ma trận chuyển vị AT của A.

Trang 39

Ma trận chuyển vị

Nhập ma trận A gồm m hàng và n cột Tìm ma trận chuyển vị

AT của A.

Trang 41

Bài tập

𝐶𝑚×𝑛 = 𝐴𝑚×𝑘 ∗ 𝐵𝑘×𝑛

Trang 42

𝐶𝑚×𝑛 = 𝐴𝑚×𝑘 ∗ 𝐵𝑘×𝑛

Trang 43

Danh sách của danh sách

Trang 44

Bài tập

1 Tổng các số hạng liên tiếp trong dãy có giá trị lớn nhất

2 Tạo 1 danh sách n số nguyên bằng cách tạo ngẫu nhiên

trong khoảng từ [0,10 7 ] Hãy thống kê danh sách xem mỗi

phần tử xuất hiện bao nhiêu lần?

3 Dãy con tăng dài nhất: xét dãy số a gồm n số nguyên

Trang 45

Bài tập

Dãy con tăng dài nhất: xét dãy số a gồm n số nguyên

a0,a1, ,an-1

Trang 46

Bài tập

Dãy con tăng dài nhất: xét dãy số a gồm n số nguyên

a0,a1, ,an-1

46

Trang 50

Bài tập Tìm số nguyên tố trong dãy n số nguyên (n>5)

Trang 51

Bài tập

Nhập số nguyên dương n Tạo 1 danh sách gồm

n số Fibonacci Xuất danh sách theo hàng, mỗiphần tử cách nhau 1 dấu cách “ ”

Minh họa chương trình:

Trang 52

List n số Fibinacci đầu tiên

Trang 53

Bài tập

Nhập số nguyên dương n Tạo 1 danh sách gồmcác số Fibonacci nhỏ hơn n Xuất danh sách theohàng, mỗi phần tử cách nhau 1 dấu cách “ ”

Minh họa chương trình:

Trang 54

In ra list gồm các số Fibonacci nhỏ hơn n

54

Trang 55

Chương 5

Kiểu dữ liệu tuần tự Tuple (Hàng/Bộ)

Trang 56

Tuple là một dạng readonly list

❖Tuple = dãy các đối tượng (list), nhưng không

thể bị thay đổi giá trị trong quá trình tính toán

❖Như vậy chuỗi giống tuple nhiều hơn list

❖Khai báo trực tiếp bằng cách liệt kê các phần tử

con đặt trong cặp ngoặc tròn (), ngăn cách bởi

phẩy

(1, 2, 3, 4, 5) # tuple 5 số nguyên

('a', 'b', 'c', 'd') # tuple 4 chuỗi

(1, 'one', [2, 'two']) # tuple hỗ hợp

56

Trang 57

Khai báo tuple không nhất thiết phải dùng ()

t3 = ( 1 , 'one' , [ 2 , 'two' ]) # tuple hỗn hợp

t4 = 1 , 'one' , [ 2 , 'two' ] # tuple hỗn hợp

Trang 58

Tuple và list nhiều điểm giống nhau

❖Tuple có thể tạo bằng constructor hoặc generator

(bộ sinh) – một cách viết tương tự list

comprehension

❖Tuple hỗ trợ 3 phép toán: +, *, in

❖Tuple cho phép sử dụng chỉ mục và cắt

❖Các phương thức thường dùng của tuple

➢count(v): đếm số lần xuất hiện của v trong

Trang 59

Bộ sinh của tuple chỉ dùng được 1 lần

# t0 viết giống như bộ suy diễn danh sách

print ( t0 ) # <generator object <genexpr> at XXXX>

print ( t1 ) # ('H', 'e', 'l', 'l', 'o', '!')

print ( t2 ) # () <~~ như vậy t0 chỉ dùng được một lần

Trang 60

Tính bất biến của kiểu tuple

60

Trang 61

Hàm dựng sẵn làm việc với list và tuple

➢Hàm all (X): trả về True nếu tất cả các phần tử của X đều

là True hoặc tương đương với True hoặc x rỗng

➢Hàm any (X): trả về True nếu có ít nhất một phần tử của X

là True hoặc tương đương với True

➢Hàm len (X): trả về số lượng phần tử của X

➢Hàm list (X): tạo một list gồm các phần tử con của X

➢Hàm max (X): trả về giá trị lớn nhất trong X

➢Hàm min (X): trả về giá trị nhỏ nhất trong X

➢Hàm sorted (X): trả về danh sách mới gồm các phần tử của

X đã được sắp xếp

Trang 62

Ví dụ

❖Viết chương trình nhập vào 1 bộ (tuple) gồm n sốnguyên (a0, a1, , an-1) Tính tổng các số nguyên lẻ/ chẵn trong tuple

Trang 63

Tổng các số chẵn/lẻ trong tuple n số nguyên

Trang 64

Ví dụ

❖Viết chương trình nhập vào 1 bộ (tuple) P gồm

n số nguyên (a0, a1, , an-1) Lưu các số chính phương có trong tuple P trong tuple CP.

Trang 65

Tuple các số chính phương

Trang 66

Ví dụ

66Tạo tuple P gồm các số nguyên tố nhỏ hơn n Số

nguyên tố là số tự nhiên có 2 ước số là 1 và chính nó

Trang 67

Tuple P gồm các số nguyên tố nhỏ hơn n

Trang 68

Tuple P chứa các số nguyên tố trong khoảng n đến2n

Minh họa:

Ví dụ

Trang 69

Tuple P gồm các số nguyên tố trong khoảng

n đến 2n

Trang 71

Bài tập dãy số ngẫu nhiên

#Nhap day so ngau nhien

from random import *

n = int(input("Nhap n = "))

print("Tao day n so ngau nhien trong khoang [0, 10]")

A = [randint(0,10) for i in range(n)]

Trang 72

Ví dụ tổng hợp

❖Lưu thông tin của n sinh viên trong 1 danh sách

L, mà mỗi phần tử của danh sách là 1 bộ (Tên, Điểm Toán, Điểm Tin, Điểm Anh)

Trang 73

Ví dụ tổng hợp

❖Lưu thông tin của n sinh viên trong 1 danh sách L, mà mỗi phần tử của danh sách là 1 bộ (Tên, Điểm Toán, Điểm Tin, Điểm Anh)

Trang 74

Danh sách sinh viên

Trang 78

Chương 5

Kiểu dữ liệu tuần tự Range (miền)

Trang 79

Range là một tuple đặc biệt?

❖Chúng ta đã làm quen với range khi dùng vòng for

➢range(stop) : tạo miền từ 0 đến stop-1

➢range(start, stop[, step]) : tạo miền từ start đến stop-1,

với bước nhảy là step

▪ Nếu không chỉ định thì step = 1

▪ Nếu step là số âm sẽ tạo miền đếm giảm dần (start > stop)

❖Vậy range khác gì một tuple đặc biệt

➢Range chỉ chứa số nguyên

➢Range nhanh hơn rất nhiều

➢Range chiếm ít bộ nhớ hơn

Trang 80

Tóm tắt nội dung bài

❖Ngoài kiểu chuỗi ( str ), Python có những kiểu dữ liệu tuần tự khác: danh sách ( list ), hàng ( tuple ), miền ( range )

❖Danh sách là kiểu tuần tự mạnh mẽ và uyển chuyển:

➢Có thể chứa bên trong nó tất cả các loại dữ liệu

➢Nhiều cách khởi tạo:

▪ Khai báo trực tiếp trong cặp ngoặc vuông

▪ Khởi tạo bằng hàm list

▪ Khởi tạo bằng một đoạn for ngắn (bộ suy diễn danh sách)

➢Duyệt các phần tử con bằng vòng lặp hoặc truy cập qua chỉ số

➢Hỗ trợ các phép toán: ghép nối (+), nhân bản (*), kiểm tra (in)

➢Hai danh sách có thể so sánh với nhau theo thứ tự từ điển

➢Phép cắt lát cho phép lấy phần con của danh sách dễ dàng

➢Rất nhiều phương thức hỗ trợ khác

80

Trang 81

Tóm tắt nội dung bài

❖Hàng cũng là một dãy các dữ liệu như danh sách, nhưng không thể

thay đổi sau khi khởi tạo

➢ Cũng có 3 cách khởi tạo:

▪ Khai báo trực tiếp trong cặp ngoặc tròn

▪ Khởi tạo bằng hàm tuple

▪ Khởi tạo bằng hàm sinh (một loại bộ suy diễn dành cho kiểu hàng)

➢ Cũng duyệt phần tử con bằng for hoặc truy cập qua chỉ mục

➢ Cũng hỗ trợ các phép toán +, *, in và cắt lát

➢ Các phương thức hỗ trợ chỉ có đếm (count) và tìm kiếm (index)

➢ Hàng nhanh hơn danh sách, vì hàng “tĩnh” hơn

❖Miền là kiểu dữ liệu thiết kế đặc biệt cho vòng for theo chỉ số, nhưng cũng có một vài đặc trưng của kiểu dữ liệu tuần tự như kiểm tra, chỉ

mục, cắt lát,

Trang 82

Một số kiểu dữ liệu trong Python

Text Type str

Numeric Types int, float, complex

Sequence Types list, tuple, range

Mapping Type dict

Set Types set, frozenset

Boolean Type bool

Binary Types bytes, bytearray, memoryview

Trang 83

% Modulus x % y

** Exponentiation x ** y

Trang 84

Một số toán tử gán

= x = 5 x = 5 += x += 3 x = x + 3 -= x -= 3 x = x - 3

*= x *= 3 x = x * 3 /= x /= 3 x = x / 3

%= x %= 3 x = x % 3 //= x //= 3 x = x // 3

Trang 85

>= Greater than or equal to x >= y

<= Less than or equal to x <= y

Trang 86

Một số toán tử logic

and Returns True if both

statements are true

x < 5 and x < 10

or Returns True if one of

the statements is true

x < 5 or x < 4

not Reverse the result,

returns False if the result is true

not(x < 5 and x < 10)

Trang 87

Một số toán tử trên bit

^ XOR Sets each bit to 1 if only one of two bits is 1

<< Zero fill left shift Shift left by pushing zeros in from the right

and let the leftmost bits fall off

>> Signed right shift Shift right by pushing copies of the leftmost

bit in from the left, and let the rightmost bits

fall off

Trang 88

Bài tập

Trang 89

Bài tập

1) Người dùng nhập từ bàn phím liên tiếp các từ tiếng

Anh viết tách nhau bởi dấu cách Hãy nhập chuỗi đầu

vào và tách thành các từ sau đó in ra màn hình các từ

đó theo thứ tự từ điển.

2) Người dùng nhập từ bàn phím chuỗi các số nhị phân

viết liên tiếp được nối nhau bởi dấu phẩy Hãy nhập

chuỗi đầu vào sau đó in ra những giá trị được nhập.

3) Nhập số n, in ra màn hình các số nguyên dương nhỏ

hơn n có tổng các ước số lớn hơn chính nó.

4) Nhập vào một chuỗi từ người dùng, kiểm tra xem đó

có phải địa chỉ email hợp lệ hay không?

5) Nhập n, in n dòng đầu tiên của tam giác Pascal

Trang 90

7.Tạo tuple P gồm các số nguyên tố nhỏ hơn 1 triệu

➢Số nguyên tố là số tự nhiên có 2 ước số là 1 và chính nó.

8.*Liệt kê các chuỗi độ dài ít hơn N của tuple X gồm các chuỗi được định nghĩa như sau:

➢Chuỗi A = ‘()’ thuộc X

➢Nếu chuỗi A thuộc X thì chuỗi (A) cũng thuộc X

➢Nếu chuỗi A và B thuộc X thì chuỗi AB cũng thuộc X

90

Trang 91

Bài tập

Tạo tuple P gồm các số nguyên tố nhỏ hơn 1 triệu

Số nguyên tố là số tự nhiên có 2 ước số là 1 vàchính nó

→Dùng thuật toán kiểm tra số nguyên tố thôngthường không hiệu quả khi n lớn, ví dụ n =1000000

→ Cần có phương pháp hiệu quả: Phương phápsàng số nguyên tố

Trang 92

Thuật toán tìm số nguyên tố thông thường

Trang 93

Thuật toán sàng số nguyên tố

#Thuat toan sang nguyen to nho hon N

if L[i]==1:

Trang 94

Thuật toán sàng số nguyên tố

#Thuat toan sang nguyen to nho hon N

NT = [i for i in range(N) if L[i]==1] #NT: list nguyen to print("Danh sach cac so nguyen to nho hon %d:"%N) print(NT)

Trang 95

Thuật toán sàng số nguyên tố

#Thuat toan sang nguyen to nho hon N

NT = tuple (i for i in range(N) if L[i]==1)

Trang 96

Sàng Atkin

➢ Tất cả các số dư là số dư khi chia cho sáu mươi (chia cho 60 và xét số dư).

➢ Tất cả các số, bao gồm cả x và y đều là số nguyên dương.

➢ Đảo một ô trong sàng nghĩa là thay đổi đánh dấu (là số nguyên tố hoặc

không) thành ngược lại.

1 Tạo bảng kết quả, điền vào 2, 3, và 5.

2 Tạo bảng sàng nguyên tố với các số nguyên dương; tất cả các số đánh

dấu là không nguyên tố.

3 Với tất cả các số trong sàng:

▪ Nếu số đó chia 60 dư 1, 13, 17, 29, 37, 41, 49, hoặc 53, đảo đánh dấu cho

các số ở 4x 2 +y 2 = số đang xét.

▪ Nếu số đó chia 60 dư 7, 19, 31, hoặc 43, đảo các ô 3x 2 +y 2 = số đang xét.

▪ Nếu số đó chia 60 dư 11, 23, 47, hoặc 59, đảo các số 3x 2 - y 2 = số đang xét.

▪ Còn lại, không làm gì cả

4 Bắt đầu từ số nhỏ nhất trong sàng.

5 Lấy các số tiếp theo trong sàng được đánh dấu là nguyên tố.

6 Thêm vào danh sách kết quả.

7 Bình phương số đó và đánh dấu các bội số của số đó là không phải số

nguyên tố.

8 Lặp lại bước 5 cho tới bước 8.

Ngày đăng: 14/09/2022, 22:30

w