Top 12 # Xem Nhiều Nhất Cấu Trúc While Trong Python Mới Nhất 3/2023 # Top Like | Comforttinhdauthom.com

Các Cấu Trúc Lặp Trong Python: For Và While

Các cấu trúc lặp trong Python bao gồm hai loại: lặp với số bước xác định trước (for) và lặp với số bước không xác định (while). Nhìn chung hai cấu trúc lặp trong Python tương đối gần gũi với các cấu trúc lặp trong C hay C#.

Cấu trúc lặp while

Hãy xem ví dụ sau:

word = '' while(word.lower() != 'close'): word = input('Enter a word: ') print(f'You have typed "{word}"')

Chúng ta không biết khi nào người dùng sẽ nhập ‘close’, và cũng có thể là không bao giờ. Vì vậy, vòng lặp while được gọi là vòng lặp với số bước không xác định trước.

Biến word đóng vai trò là biến điều khiển cho biểu thức điều kiện.

Hãy xem một ví dụ khác:

# tính tổng các số từ 1 đến 99 sum = 0 i = 1 while i < 100: sum += i i += 1 print(sum)

Trong ví dụ này chúng ta tính tổng các số từ 1 đến 99. Để thực hiện việc này chúng ta sử dụng một biến i với vai trò biến đếm. Biến i ban đầu nhận giá trị 1. Qua mỗi vòng lặp i sẽ tăng thêm 1 đơn vị, và biến sum sẽ cộng thêm giá trị bằng i. Quá trình này sẽ lặp đi lặp lại chừng nào i vẫn nhỏ hơn 100. Đến khi i đạt giá trị 100 thì vòng lặp kết thúc.

Chừng nào biểu thức logic còn nhận giá trị True thì sẽ thực hiện danh sách lệnh ở phần suite.

Để tránh tạo thành vòng lặp vô tận, bên trong danh sách lệnh của vòng lặp while phải có lệnh có tác dụng làm thay đổi giá trị của biểu thức logic.

Trong ví dụ thứ nhất, chúng ta liên tục yêu cầu người dùng nhập vào giá trị mới cho biến char. Điều này đảm bảo khả năng thoát khỏi vòng lặp.

Trong ví dụ thứ hai, chúng ta làm biến đổi giá trị của i qua mỗi vòng lặp (tăng thêm 1 đơn vị). Điều này đảm bảo đến một lúc nào đó i sẽ có giá trị lớn hơn 100 và kết thúc vòng lặp.

Cấu trúc lặp for

Hãy xem các ví dụ sau

# in ra các số trong phạm vi từ 1 đến 100 for n in range(100): print(n + 1, end = 't') # in ra các số trong phạm vi từ 100 đến 199 for n in range(100, 200): print(n, end = 't') # in ra các số lẻ trong phạm vi từ 1 đến 99 for n in range(1, 100, 2): print(n, end = 't')

Cấu trúc for cho phép lặp lại việc thực hiện khối code theo một số lần xác định sẵn từ đầu.

Số lần lặp và cách thức lặp được tạo ra bởi hàm range().

Hàm range() trả về một biến chứa một dãy các giá trị nằm trong một khoảng xác định theo quy luật. Hàm này có 3 dạng:

range(stop): nhận 1 tham số là giá trị cuối của dãy và trả về dãy số [0, stop – 1]. Ví dụ range(5) sẽ trả lại dãy số 0, 1, 2, 3, 4. Bước nhảy giữa các giá trị kế tiếp là 1.

range(start, stop): nhận 2 tham số là giá trị đầu và cuối của dãy, trả về dãy [start, stop-1]. Ví dụ, range(1, 5) sẽ trả lại dãy số 1, 2, 3, 4 (bước nhảy giữa các giá trị kế tiếp là 1).

range(start, stop, step): tương tự như trường hợp 2 nhưng bước nhảy được xác định bởi biến step. Ví dụ, range(1, 10, 2) sẽ trả lại dãy 1, 3, 5, 7, 9 (bước nhảy giữa các giá trị kế tiếp là 2).

Trong hàm range, start, stop và step có thể nhận cả giá trị âm và dương:

Với danh sách giá trị mà hàm range() tạo ra như trên, cấu trúc for sẽ lần lượt lấy từng giá trị gán cho biến chạy (biến n trong các ví dụ trên) và thực hiện khối lệnh. Như vậy, số lần lặp đã xác định sẵn từ lúc gọi hàm range().

Sử dụng vòng lặp for với các kiểu danh sách khác

Ở trên chúng ta sử dụng for với các giá trị lấy từ danh sách tạo ra bởi hàm range(). Trong Python, nhiều loại dữ liệu tập hợp có thể sử dụng cùng vòng for.

Ví dụ:

for c in 'Hello world': print(c, end = 't')

Trong ví dụ trên danh sách giá trị lại là xâu ký tự ‘Hello world’. Biến chạy sẽ lần lượt nhận từng ký tự từ xâu, bắt đầu từ ký tự đầu tiên ‘H’ đến ký tự cuối cùng ‘d’. Trong ví dụ trên chúng ta chỉ đơn giản là in ký tự tương ứng ra console.

Hãy xem một ví dụ khác:

companies = ['Apple', 'Google', 'Microsoft', 'Huawei', 'Yandex', 'Facebook'] for c in companies: print(c)

Trong ví dụ trên, companies là một biến kiểu danh sách (list). Kiểu dữ liệu này chúng ta chưa học nhưng bạn có thể hình dung nó tương tự như kiểu mảng của C. Biến kiểu list cũng có thể trở thành danh sách dữ liệu cho vòng lặp for. Khi này biến chạy c sẽ lần lượt nhận các giá trị trong danh sách theo thứ tự.

# tính tổng các số dương từ một tuple total = 0 for num in (-22.0, 3.5, 8.1, -10, 0.5): total = total + num

Trong ví dụ này bạn tính tổng các số dương từ một tuple. Tuple cũng là một kiểu dữ liệu tập hợp mà chúng ta sẽ học chi tiết sau.

Không phải kiểu dữ liệu tập hợp nào cũng có thể làm danh sách lặp cho vòng for. Những kiểu dữ liệu sử dụng được cho vòng for được gọi là các kiểu iterable.

Điều khiển vòng lặp, break và continue

Khi làm việc với vòng lặp có thể xuất hiện hai tình huống:

(1) Bạn muốn kết thúc vòng lặp sớm hơn dự định hoặc theo điều kiện. Lấy ví dụ, bạn cầm một danh sách khách hàng và muốn tìm tên một khách trong đó. Bạn xem lần lượt từng tên từ đầu danh sách. Nếu gặp tên khách hàng cần tìm, bạn sẽ dừng lại chứ không tiếp tục xem đến hết danh sách nữa. Ở đây bạn phá vỡ hoàn toàn vòng lặp.

(2) Bạn muốn bỏ qua một chu kỳ trong vòng lặp để bắt đầu chu kỳ tiếp theo. Lấy ví dụ, bạn dự định chơi 10 ván bài. Ở ván thứ 3 bài xấu quá, bạn quyết định bỏ cuộc để chờ chơi ván tiếp theo. Ở đây bạn không dừng hoàn toàn vòng lặp mà chỉ bỏ không làm những việc nhẽ ra phải làm trong chu kỳ đó và khởi động một chu kỳ mới.

Hai tình huống này được Python giải quyết bằng hai lệnh tương ứng: break (phá vỡ vòng lặp, kết thúc sớm) và continue (bỏ qua chu kỳ hiện tại, bắt đầu một chu kỳ lặp mới). Cả hai loại vòng lặp (for, while) đều có thể sử dụng break và continue.

Ví dụ với break:

# breaking out of a loop early for item in [1, 2, 3, 4, 5]: if item == 3: print(item, " ...break!") break print(item, " chúng tôi iteration")

Ví dụ này cho ra kết quả như sau:

1 chúng tôi iteration 2 chúng tôi iteration 3 ...break! # demonstrating a `continue` statement in a loop x = 1 while x < 4: if x == 2: print("x = ", x, " chúng tôi to the top of the loop!") x += 1 continue x += 1 print("--reached end of loop-body--")

Ví dụ này cho ra kết quả như sau:

Trong bài học này chúng ta đã xem xét cách sử dụng vòng lặp trong Python, bao gồm vòng lặp for và vòng lặp while. Chúng ta cũng học về cách điều khiển vòng lặp với break và continue.

Có thể nhận xét rằng vòng lặp trong Python không có nhiều khác biệt với vòng lặp ở các ngôn ngữ khác. Đặc biệt, từ khóa break và continue cơ bản là giống hệt như trong C. Vòng lặp for của Python rất gần gũi với vòng lặp for của C và foreach của C#.

* Bản quyền bài viết thuộc về Tự học ICT. Đề nghị tôn trọng bản quyền.

Bài 25: Vòng Lặp While Trong Python

TÀI LIỆU ÔN THPT QG, MÔN TIẾNG ANH

TÓM LƯỢC NHỮNG ĐIỂM NGỮ PHÁP CẦN LƯU Ý (CHẮC CHẮN CÓ TRONG CÁC BÀI THI TIẾNG ANH THPT – CHI TIẾT HƠN CÁC EM THAM GIA KHÓA HỌC CÙNG CÔ MAI PHƯƠNG TẠI chúng tôi NGOAINGU24H.VN) 1/ ĐẠI TỪ * Đại từ nghi vấn: who, whose, whom, … – What + be …like? Dùng hỏi tính cách, tính chất Ex: What was the exam like? – It was very difficult. What is David like? – He is very sociable. – What does he / she / it chúng tôi like? Dùng hỏi về vẻ bên ngoài Ex: What does she look like? – She is tall. – What about + V-ing = How about + V-ing …? Đưa ra gợi ý hoặc đề nghị – Which (nào, cái nào, người nào) Ex: Which is your favourite subject? Ex: Which of these photos would you like? – Which of + determiner + N (plural) W Which of us is going to do the washing- Which of + pronoun up? Note: + Which chỉ sự lựa chọn trong một số lượng có giới hạn There’s fruit juice, coffee and tea. Which will you have? + What dùng khi có sự lựa chọn rộng rãi What would you like to drink? * Đại từ phân bổ: – All (tất cả): có thể là chủ ngữ, tân ngữ hoặc bổ ngữ All were eager to leave. I’ll do all I can. Wallet, ticket and a bunch of keys, that’s all in his pocket. – All of + determiner + N (plural/uncountable) + V(plural/singular) – All of us / you / them + V (plural) All (of) my friends like reading. All of the money has been spent. I’m going to invite all of you. – All of + N (singular) = the whole I’ve eaten all of the cake = I’ve eaten the whole cake. – Most (phần lớn, hầu hết) Most of the people here know each other. – Most + determiner + N + V(plural/singular) He spends most of his free time in the library. – Most of us / you / them + V (plural) Most of us enjoy shopping. – Each (mỗi) – Each of + determiner + N (plural) + V(singular) – Each of us / you / them + V (singular) * Đại từ hỗ tương: là đại từ chỉ mối quan hệ qua lại giữa hai hoặc nhiều người hoặc vật với nhau, gồm each other và one another (nhau, lẫn nhau) Sue and Ann don’t like each other / one another. They sat for two hours without talking to each other / one another. Không dùng each other sau các từ meet, marry và similar They married in 1990. (not: They married each other.) 2/ DANH TỪ 2.1. Danh từ ghép: – là danh từ gồm hai hoặc nhiều từ kết hợp với nhau. Danh từ ghép có thể được viết thành hai từ riêng biệt, có gạch ngang giữa hai từ hoặc kết hợp thành một từ. Ex: world peace, non-stop train, writing-table 1

– cách thành lập danh từ ghép: a. Danh từ + danh từ (Noun + noun) toothpick (tăm) schoolboy tennis ball b. Tính từ + danh từ (Adjective + Noun) quicksilver (thủy ngân) greenhouse (nhà kính)

bus driver

river bank

blackbird (chim két)

c. Danh từ + danh động từ (Noun + gerund): chỉ một loại công việc weigh-lifting (cử tạ) fruit-picking (việc hái quả) coal-mining (việc khai thác than) d. Danh động từ + danh từ (Gerund + noun) waiting-room (phòng chờ) swimming pool (hồ bơi) driving licence (bằng lái xe) washing-machine (máy giặt) e. Các trường hợp khác: – Tính từ + động từ: whitewash (nước vôi) – Động từ + danh từ: pickpocket (tên móc túi) – Trạng từ + động từ: outbreak (sự bùng nổ) – Động từ + trạng từ: breakdown (sự suy sụp) – Danh từ + giới từ: passer-by (khách qua đường), looker-on (người xem) – Danh từ + tính từ: secretary-general (tổng thư ký, tổng bí thư) 2.2 Danh từ số nhiều của những từ có nguồn gốc từ tiếng Hy Lạp hoặc Latin: Số ít bacterium curriculum datum criterion phenomenon basis crisis analysis hypothesis

Nghĩa vi khuẩn chương trình giảng dạy dữ kiện tiêu chuẩn hiện tượng nền tảng cuộc khủng hoảng sự phân tích giả thuyết

2.3 Danh từ đếm được và danh từ không đếm được * Cách thành lập danh từ số nhiều: – Thêm -s vào danh từ số ít – Thêm -es sau danh từ số ít tận cùng bằng s, ss, sh, ch, x, z, zz – Thêm -s nếu trước o là một nguyên âm: radios, micros – Thêm -es nếu trước o là một phụ âm: potatoes, tomatoes, heroes – Thêm – s nếu trước y là nguyên âm: plays, boys – Thêm – es nếu trước y là phụ âm: lorries – Danh từ tận cùng bằng f /fe đổi thành -ves: leaf à leaves thief à thieves – Thêm -s vào sau các danh từ tận cùng bằng f / fe khác: beliefs,cafes – Một số từ có số nhiều bất qui tắc: child – children foot – feet goose – geese ox – oxen man – men mouse – mice fish – fish tooth – teeth woman – women sheep – sheep deer – deer 3/ TỪ CHỈ SỐ LƯỢNG Với danh từ đếm được Với danh từ không đếm dược – some / any (một vài) – some / any (một ít) – many – much – a large number of – a large amount of – a great number of – a great deal of – plenty of – plenty of – a lot of / lots of – lot of / lots of – few / a few – little / a little – every / each 2

– several (nhiều) – some: dùng trong câu khẳng định, câu yêu cầu, lời mời, lời đề nghỉ. – any: dùng trong câu phủ định, nghi vấn – many, much dùng trong câu phủ định, nghi vấn – a lot of, plenty of, a great number of … dùng trong câu khẳng định – many, much luôn dùng trong câu khẳng định có các từ very, too, so, as – few, little (ít, không nhiều): thường có nghĩa phủ định, ít không đủ để dùng – a few / a little (một vài, một ít): thường có nghĩa khẳng định, ít đủ để dùng He drank so much wine that he felt sick. Would you like some more coffee? We haven’t got any butter. There aren’t any chairs in the room. Hurry up! There is little time. Let’s go and have a drink. We have got a little time before the train leaves. 4/ SỐ CỦA ĐỘNG TỪ: – Số thập phân, phân số, sự đo lường + động từ số ít Three quarters of a ton is too much. – All, some, plenty + of + danh từ số ít à động từ số ít – Half, part, a lot, .. + of + danh từ số nhiều à động từ số nhiều Some of the milk was sour. A lot of my friends want to emigrate. – No + danh từ số ít à động từ số ít – No + danh từ số nhiều à động từ số nhiều No people think alike. No student has finished their assigmnet. 5/ LIÊN TỪ (Conjunctions) a. Liên từ kết hợp: dùng để nối từ, cụm từ hoặc mệnh đề độc lập có cùng chức năng ngữ pháp: and, but, or, nor, so, yet (tuy nhiên, nhưng), for (vì) The new method is simple, yet effective. I told her to leave, for I was very tired. – Liên từ tương quan: not only … but also, both … and, either … or, neither …. nor, whether …or (có … hay), Peter neither spoke nor did anything. I have not decided whether to travel abroad or buy a new car. – Một số trạng từ dùng như từ nối để nối hai mệnh đề hoặc câu độc lập: hence (do đó), however (tuy nhiên), furthermore (hơn nữa), moreover (hơn nữa), therefore (vì vậy), nevertheless (tuy nhiên), meanwhile (trong khi đó), otherwise (nếu không thì, kẻo), consequently (vì vậy, cho nên) I had better write it down, otherwise I will forget it. We must be early; otherwise we won’t get a seat. b. Liên từ phụ thuộc: nối mệnh đề phụ với mệnh đề chính: after, before, since, when, whenever, while, until, till, as, where, wherever, because, so that, in order that, although, though, even though, even if, unless, in case, provided / providing that, supposed / supposing that, as if, as though, as long as (miễn là,với điều kiện là)… – besides (giới từ): bên cạnh. Besides + Nound / pronoun / V-ing Besides doing the cooking, I look after the garden. – besides (trạng từ): ngoài ra, đứng trước mệnh đề I can’t go now. I am too busy. Besides my passport is out of date. – in spite of the fact that / despite the fact that + S + V – reason why + S + V: lý do tại sao The reason why grass is green was a mystery to the little boy. – reason for + Noun: lý do của The reason for the disaster was engine failure, not human error. 6. WISH / IF ONLY Hiện tại: S + wish + S + QKĐ

If only + S + QKĐ 3

EXAMPLE – a, an, the, this, these, those, some, several – one, ten, nine … – wonderful, lovely, beautiful … – big, small, long, fat, – important, famous, warm, modern … – old, young, new – round, oval … – red, white, blue – Chinese, Japanese – stone, plastic, paper, leather – an electric kettle, political matters – walking sticks, writing boots

24. MỆNH ĐỀ DANH TỪ – Mệnh đề danh từ có chức năng như một danh từ và thường bắt đầu bằng các từ nghi vấn: that, what, who, whose, which, where, when, why, how, whether, if – Mệnh đề danh từ có thể làm: a. Chủ ngữ trong câu: That he can’t come is disappointing. What he is talking about is interesting. How the prisoner escaped is a complete mystery. Whether she comes or not is unimportant to me. b. Tân ngữ (túc từ) của động từ: Please tell me where you live. I wonder if he needs help. I know that you must be tired after a long journey. c. Tân ngữ cho giới từ: We argued for hours about when we should start. Pay attention to what I am saying. d. Bổ ngữ cho câu: (thường đứng sau động từ to be) That is not what I want. What surprised me was that he spoke English very well. e. Mệnh đề đồng cách cho danh từ (mệnh đề quan hệ) The news that we are having a holiday tomorrow is not true. Note: Trong mệnh đề danh từ, chủ ngữ đứng trước động từ. Không đảo ngữ như trong câu nghi vấn. 6

2

3

MODAL VERBS

Modal + V0 MEANINGS

EXAMPLES

Can = be able to

có thể (diễn tả 1 khả năng)

– He can speak English fluently.

Must = have to

phải (có nghĩa bắt buộc)

– Young people must obey their parents.

Must

ắt hẳn (tiên đoán 1 sự việc xảy ra – He has been working very hard. ở hiện tại, có sơ sở) He must be tired.

Mustn’t

Không được (cấm)

May / might:

có lẽ, có thể (suy đoán gần đúng – He may be in his office. hoặc hành động có thể xảy ra – The weather forecast is not very good. trong tương lai.) It might rain this afternoon.

– You mustn’t go out in the evening.

suy đoán sự việc xảy ra ở hiện tại, – He may go out. I am not sure. không có cơ sở. 4

diễn tả 1 sự xin phép cần Không cần

II. Modal Continuous:

– May I go out? – I need go now. – You needn’t do that work.

Modal + be + V-ing

Ex: Jane isn’t here. She might be cooking in the kitchen, I suppose. III. Modal Perfect: (Nguyên mẫu hoàn thành ) MODALS

Modal + have V3 /ed

MEANINGS

EXAMPLES

7

1

Could have V3 / ed

rất có thể đã (diễn tả 1 khả năng trong quá khứ, nhưng chưa được dùng tới)

– He couldn’t have committed the crime because he was with me that day.

2

Can’t have V3 / ed

có lẽ đã không (diễn tả 1 sự suy đoán không chắc chắn về 1 sự kiện ở QK)

– Theresa walked past me without saying a word. She can’t have seen me.

3

Should have V3 / ed

lẽ ra nên (diễn tả 1 lời khiển trách đối với 1 hành động QK lẽ ra nên làm mà đã không làm)

– Once Helen failed in her exam. She played too much. She shouldn’t have played too much.

4

Must have V3 / ed

ắt hẳn đã (diễn tả 1 sự suy đoán gần đúng về 1 sự kiện ở quá khứ)

– The yard is wet. It must have rained last night.

5

May / might have V3 / ed

có thể, có lẽ (diễn tả những gì có thể xảy ra ở quá khứ)

– Micheal didn’t come to class yesterday. He may have had an accident.

26. PHRASAL VERBS – account for – blow out – break into – bring in = introduce – burn down – call in – call on = visit – carry on = continue – catch up with – close down – come across – come along / on – come up – cut down = reduce – die out – be fed up with – fix up = arrange – get down – get on – go over = examine – hold on = wait – leave out = omit – look down on – make up – pick out – put forward = suggest – put out = extinguish – run across – run out of – send for – show around – show up = arrive – stand out – take over – talk over = discuss – throw away / out – turn down = refuse – wear out

– bear out = confirm xác nhận – break down hư hỏng, phá vỡ – break out bùng nổ, bùng phát – bring up = raise nuôi nấng – call for ghé qua – call of = cancel hủy bỏ – call up = telephone gọi điện – carry out = execute tiến hành – clear up = tidy dọn dẹp – come about = happen xảy ra – come off = succeed thành công – come over ghé nhà – count on / upon tin vào, dựa vào – cut off ngừng cung cấp – drop in ghé qua – fill in điền thông tin – get by = manage xoay xở – get off xuống xe – give out = distribute phân phát – hand in nộp – hold up = stop, delay hoãn, ngừng – look back on = remember nhớ lại – make out hiểu được – make up for bù, đền bù – pull down phá hủy, phá sập – put in for đòi hỏi, xin – put up with chịu đựng – see off tiễn ai – sell off bán giảm giá – set off / out khởi hành – show off phô trương, khoe khoang – shut up ngừng nói – take on đảm nhận công việc – take up chiếm (thời gian, sức lực) – think over = consider cân nhắc, nghĩ kỹ – try on thử quần áo – turn into trở thành, biến thành – work out = calculate tính toán

8

Cấu Trúc Điều Kiện If Trong Python

Trong một chương trình, bình thường các lệnh sẽ lần lượt được thực hiện theo thứ tự xuất hiện của nó trong file code. Nếu chỉ thực thi lệnh như vậy các chương trình sẽ rất hạn chế. Vì vậy người ta đưa vào các cấu trúc điều khiển có tác dụng làm tham đổi trật tự thực thi lệnh trong chương trình.

Ví dụ, bạn chỉ thực thi lệnh khi đáp ứng một điều kiện nào đó. Bạn cũng có thể muốn lặp đi lặp lại việc thực hiện một nhóm lệnh. Trường hợp thứ nhất người ta gọi là rẽ nhánh, trường hợp thứ hai gọi là vòng lặp.

Python có các cấu trúc điều khiển rẽ nhánh và các cấu trúc lặptương tự như các ngôn ngữ khác. Trong bài học này chúng ta sẽ xem xét cách sử dụng cấu trúc lặp if-elif-else.

Tạo file chúng tôi và viết code như sau:

from math import sqrt # sử dụng hàm tính căn sqrt trong module math a = float(input('a = ')) b = float(input('b = ')) c = float(input('c = ')) d = b*b - 4*a*c print('THERE ARE REAL SOLUTIONS:') x1 = (-b + sqrt(d))/(2*a) x2 = (-b - sqrt(d))/(2*a) print(f'x1 = {x1}') print(f'x2 = {x2}') else: print('THERE ARE COMPLEX SOLUTIONS BUT I CANNOT SHOW YOU.') input('nThank you! Press enter to quit ...')

print(‘THERE ARE REAL SOLUTIONS:’) # code khác else: print(‘THERE ARE COMPLEX SOLUTIONS BUT I CANNOT SHOW YOU.’)

Cấu trúc rẽ nhánh if

Cấu trúc rẽ nhánh quyết định xem những lệnh nào sẽ được thực hiện căn cứ vào giá trị (kiểu bool) của một biểu thức điều kiện.

Cấu trúc này làm thay đổi luồng thực thi (trật tự thực hiện lệnh) của chương trình. Trật tự thực hiện lệnh phụ thuộc vào giá trị của biểu thức điều kiện. Có những lệnh sẽ không được thực hiện.

Cú pháp cơ bản của cấu trúc này như sau:

… # khối code …

một số ví dụ:

age = int(input('Your age: ')) print('Welcome!') print(f'Your birth year is {2020-age}') name = input('Your name: ') if(name.lower() == 'donald'): print('Mr. President!') print('Welcome to heaven!')

Nếu vô tình làm thay đối thụt đầu dòng bạn sẽ gặp lỗi cú pháp:

Trong cấu trúc rẽ nhánh đơn giản nhất bạn chỉ cần một mệnh đề if là đủ.

Dĩ nhiên bạn có thể viết 5 lệnh if:

age = int(input('Your age: ')) if(0 < age < 6): print('Mầm non') if(6 <= age < 12): print('Tiểu học') if(12 <= age < 15): print('Trung học cơ sở') if(15 <= age < 18): print('Trung học phổ thông') if(18 <= age): print('Đại học / đi làm')

Cách sử dụng này không sai nhưng có vấn đề. Ví dụ, nếu bạn nhập giá trị 14, Python sẽ kiểm tra tất cả các cấu trúc if. Mặc dù lệnh ở cấu trúc if(12 <= age < 15) được thực thi, Python tiếp tục kiểm tra cả 2 cấu trúc if còn lại. Điều này dẫn đến làm thừa việc.

Giờ hãy điều chỉnh lại như sau:

age = int(input('Your age: ')) if(0 < age < 6): print('Mầm non') elif(6 <= age < 12): print('Tiểu học') elif(12 <= age < 15): print('Trung học cơ sở') elif(15 <= age < 18): print('Trung học phổ thông') elif(18 <= age <= 100): print('Đại học / đi làm') else: print('Bạn còn sống không đấy?')

Trong đoạn script này chúng ta vận dụng hai mệnh đề khác của cấu trúc if: mệnh đề elif và else.

Giả sử bạn nhập giá trị 14. Python sẽ làm như sau:

Bỏ qua hết các mệnh còn lại.

Đây là lợi thế của các mệnh đề elif: nếu một mệnh đề phù hợp và được thực hiện, các mệnh đề còn lại bị bỏ qua.

Giả sử bạn nhập giá trị 101 hoặc -1. Theo logic trên, Python sẽ kiểm tra mệnh đề if và tất cả các mệnh đề elif. Tuy nhiên nó không tìm được mệnh đề phù hợp. Khi này Python sẽ thực hiện mệnh đề else.

Mệnh đề else cần viết cuối cùng trong danh sách. Nó là mệnh đề sẽ thực hiện nếu tất cả các mệnh đề khác không phù hợp. Trong ví dụ của chúng ta, trường hợp giá trị tuổi nhỏ hơn 0 hoặc lớn hơn 100 là sẽ được thực hiện trong mệnh đề else.

Các cấu trúc if-elif-else lồng nhau

Hãy xem một ví dụ:

age = int(input("Your age: ")) gender = input("Gender (male/female): ") name = input("Your name: ") print('Your age a legal.') if(name.isalpha()): if(gender.lower() == "male"): print(f'Welcome, Mr. {name}!') elif(gender.lower() == "female"): print(f'Welcome, lady {name}!') else: print(f'Welcome, {name}') else: print('Sorry, who are you?') else: print('You are too young to come here!')

Trong ví dụ này bạn yêu cầu người dùng nhập tuổi, họ và giới tính.

Đầu tiên bạn kiểm tra tuổi. Nếu người dùng trên 18 tuổi, bạn tiếp tục kiểm tra tên. Nếu nười dùng nhập tên (name.isalpha()), bạn tiếp tục kiểm tra giới tính. Nếu là name (male) sẽ in ra lời chào ‘Welcome, Mr.’, nếu là nữ sẽ in lời chào ‘Welcome, lady’, nếu không chỉ định giới tính thì chỉ in ra lời chào ‘Welcome’.

Nếu người dùng không cung cấp tên thì hỏi lại ‘Sorry, who are you?’. Nếu tuổi dưới 18 thì in thông báo ‘You are too young to come here!’.

Đây là ví dụ về cách đặt các lệnh if-elif-else lồng nhau.

Khi sử dụng các lệnh lồng nhau đặc biệt lưu ý đến thụt đầu dòng: các lệnh nằm trong cùng một suite phải có cùng thụt đầu dòng như nhau.

Từ khóa pass

Đây là từ khóa tương đối lạ với các bạn học C. Từ khóa này được đưa ra do đặc thù của Python khi viết code block.

age = int(input('Your age: ')) print('Welcome!') else: print('Goodbye!')

Bạn sẽ gặp ngay lỗi cú pháp (báo ở dòng lệnh print(‘Goodbye!’)): expected an indented block.

Đây là điều tương đối lạ với các bạn đã học C (và các ngôn ngữ tương tự).

Trong Python, các lệnh như if, while, for, khai báo hàm, v.v., được gọi là các lệnh phức hợp ( compound statement).

Mỗi lệnh phức hợp chứa một hoặc nhiều mệnh đề ( clause). Như cấu trúc if có thể có nhiều mệnh đề tương ứng với if, các elif, và else.

Mỗi clause tạo ra từ một header và một suite. Ví dụ, clause tương ứng với else có header là else: và suite là khối code nằm sau else:. Suite là khối code bắt buộc phải có trong clause. Bạn không thể viết header mà không có suite đi kèm.

Vậy nếu như bạn không muốn xử lý gì trong clause thì sao. Giả sử, trong trường hợp mệnh đề else bạn không muốn xử lý gì cả nhưng vẫn muốn viết nó, hoặc trong trường hợp tạm thời bạn chưa viết được code xử lý cho nó.

Từ khóa pass được sử dụng trong những tình huống như thế này:

age = int(input('Your age: ')) print('Welcome!') else: pass print('Goodbye!')

Khi này bạn vẫn có thể giữ được mệnh đề else nhưng nó sẽ không làm gì hết. Từ khóa pass được tạo ra chỉ đơn thuần là để đáp ứng yêu cầu cú pháp của Python: mỗi mệnh đề phải có đủ header và suite. Từ khóa pass đóng vai trò là một suite hình thức (không làm gì hết).

Đối với cấu trúc if, từ khóa pass có vẻ hơi vô ích. Tuy nhiên, trong cấu trúc xử lý ngoại lệ bạn sẽ thấy cần đến nó hơn.

Từ khóa pass không phải là đặc thù của cấu trúc if-elif-else. Đây là từ khóa xuất phát từ cấu trúc chung của các lệnh phức hợp trong Python.

Bài học này đã hướng dẫn chi tiết cách sử dụng cấu trúc rẽ nhánh if-elif-else trong Python. Nhìn chung ý tưởng và cú pháp của cấu trúc này khá gần với các ngôn ngữ lập trình khác.

Tuy nhiên cần lưu ý về căn lề (thụt đầu dòng) của code trong suite của mỗi clause. Các lệnh trong cùng một suite mà căn lề lệch sẽ bị lỗi cú pháp.

Ngoài ra Python cũng sử dụng từ khóa pass để tạo ra một dummy suite (suite không làm gì cả) để phù hợp với cú pháp của ngôn ngữ.

* Bản quyền bài viết thuộc về Tự học ICT. Đề nghị tôn trọng bản quyền.

Cấu Trúc Dữ Liệu Set Trong Python

Python khác với các ngôn ngữ lập trình khác, nó đưa ra rất nhiều các cấu trúc dữ liệu dạng đa giá trị, trong bài trước chúng ta đã học về List và Tuple, bài này chúng ta tìm hiểu về hai cấu trúc dữ liệu tiếp theo của Python là Set (tập hợp).

1. Tập hợp (Set)

Các phần tử của tập hợp phải là các dữ liệu không thể thay đổi như một số (int), một chuỗi (string), hoặc một Tuple.

1.1 Khai báo tập hợp

Tập hợp (Set) trong Python có một số tính chất mà bạn cần nhớ:

Các phần tử trong tập hợp không có thứ tự.

Các phần tử này là duy nhất, không cho phép lặp lại.

Set có thể thay đổi (thêm bớt phần tử) nhưng các phần tử của tập hợp phải ở dạng không thể thay đổi (tức là xác định được dung lượng bộ nhớ ngay khi khai báo).

Chúng ta sử dụng các dấu ngoặc nhọn trong khai báo Set, ví dụ:

friends = {"Rolf","Bob","Anne"} print(friends)

Chú ý:

[] sử dụng khai báo List

() sử dụng khai báo Tuple

{} sử dụng khai báo Set

1.2 Thay đổi tập hợp

Các phần tử trong tập hợp có thể thêm hoặc loại bỏ. Python hỗ trợ rất nhiều các phương thức để thực hiện thao tác thay đổi tập hợp.

1.2.1 Phương thức .add()

Phương thức sử dụng để thêm một phần tử vào tập hợp.

Ví dụ:

friends = {"Rolf","Bob","Anne"} friends.add("Jen") print(friends) # Kết quả là {"Bob","Jen","Anne","Rolf"}

Chú ý, kết quả có thể khác đi do Set không sắp xếp các phần tử theo một trật tự nào cả.

1.2.2 Phương thức .remove()

Loại bỏ một phần tử trong tập hợp.

Ví dụ:

friends = {"Rolf","Bob","Anne"} friends.remove("Anne") print(friends) # Kết quả là {"Rolf","Bob"} friends.remove("Jen") print(friends) # Kết quả là lỗi KeyError: "Jen"

Khi loại bỏ một phần tử, nếu phần tử đó không tồn tại trong tập hợp, chương trình sẽ dừng và một thông báo lỗi KeyError xuất hiện.

1.2.3 Phương thức .discard()

Giống như phương thức .remove() loại bỏ phần tử trong tập hợp, tuy nhiên nếu phần tử đó không tồn tại thì nó không báo lỗi gì cả.

friends = {"Rolf","Bob","Anne"} friends.discard("Anne") print(friends) # Kết quả là {"Rolf","Bob"} friends.discard("Jen") print(friends) # Kết quả là {"Rolf","Bob"}

1.2.4 Phương thức .pop()

Loại bỏ một phần tử ngẫu nhiên khỏi tập hợp.

friends = {"Rolf","Bob","Anne"} friends.pop() print(friends) # Kết quả là {"Bob","Rolf"}

Bạn cần chú ý về thứ tự các phần tử trong tập hợp, nó không được sắp xếp theo bất kỳ quy tắc nào.

1.2.5 Phương thức .clear()

Loại bỏ tất cả các phần tử trong tập hợp, khi đó tập hợp được gọi là tập rỗng.

friends = {"Rolf","Bob","Anne"} friends.clear() print(friends) # Kết quả là set()

1.2.6 Phương thức .update()

Phương thức .add() ở trên chỉ thêm được 1 phần tử vào tập hợp với 1 câu lệnh, để thêm nhiều phần tử, chúng ta sử dụng .update(). Chú ý, đầu vào của .update() có thể là một Set, một List hoặc một Tuple.

friends = {"Rolf","Bob","Anne"} friends.update(["Jen","Charlie"],{"Jonhny", "Sara"},("Laura","Elite")) print(friends) # Kết quả là {'Anne', 'Laura', 'Elite', 'Rolf', 'Jonhny', 'Charlie', 'Bob', 'Sara', 'Jen'}

Kết quả của bạn có thể có thứ tự khác đi, một chú ý nữa là không sử dụng chuỗi để cập nhập vào tập hợp mà các phần tử là chuỗi bởi vì chuỗi sẽ được coi là một danh sách các ký tự, ví dụ:

friends = {"Rolf","Bob","Anne"} friends.update("Jen") print(friends) # Kết quả là {'n', 'e', 'Rolf', 'Bob', 'Anne', 'J'}

Không như mong đợi phải không, bạn có thể sử dụng phương thức .add() hoặc có thể chuyển chuỗi thành Set, List hoặc Tuple có 1 phần tử:

friends = {"Rolf","Bob","Anne"} friends.update(("Jen",)) # hoặc friends.update(["Jen"]) # hoặc friends.update({"Jen"})

1.3 Các phép toán trong tập hợp

Các tập hợp có lợi thế hơn các cấu trúc dữ liệu khác ở chỗ nó thực hiện được các phép toán tập hợp như hợp, hiệu, giao… Để mô tả dễ hiểu hơn, chúng ta có hai tập hợp art_friends và science_friends là tập hợp các bạn trong lớp Mỹ thuật và tập hợp các bạn trong lớp Khoa học.

art_friends = {"Rolf", "Anne", "Jen"} science_friends = {"Jen", "Charlie"}

Các phép toán được mô tả như hình sau:

Hợp của hai tập hợp cho kết quả là tất cả các phần tử trong hai tập hợp, chú ý phần tử nào lặp lại sẽ chỉ xuất hiện 1 lần trong tập kết quả. Trong Python, để thực hiện phép hợp, chúng ta sử dụng phương thức .union(). Chú ý, sử dụng tập hợp nào trước cũng cho kết quả như nhau, art_friends.union(science_friends) cũng cho kết quả như science_friends.union(art_friends).

art_friends = {"Rolf", "Anne", "Jen"} science_friends = {"Jen", "Charlie"} all_friends = art_friends.union(science_friends) print(all_friends) # Kết quả {'Rolf', 'Anne', 'Jen', 'Charlie'}

Chú ý, “Jen” có mặt trong cả hai lớp nhưng với tập kết quả cuối cùng thì “Jen” chỉ xuất hiện 1 lần.

1.3.2 Phép trừ (Difference)

Hiệu của một tập A trừ đi một tập B cho kết quả là tất các phần tử thuộc A nhưng không thuộc B. Sử dụng phương thức .difference() để thực hiện phép trừ hai tập hợp.

art_friends = {"Rolf", "Anne", "Jen"} science_friends = {"Jen", "Charlie"} art_but_not_science = art_friends.difference(science_friends) science_but_not_art = science_friends.difference(art_friends) print(art_but_not_science) # Kết quả {'Rolf', 'Anne'} print(science_but_not_art) # Kết quả {'Charlie'}

Trong ví dụ trên, tập hợp art_but_not_science chứa các bạn học lớp Mỹ thuật nhưng không học lớp Khoa học, chú ý “Jen” học cả hai lớp nên không có mặt trong tập hợp này.

1.3.3 Hiệu đối xứng của hai tập hợp (Symmetric difference)

Hiệu đối xứng của hai tập A và B được kết quả là tập hợp các phần tử thuộc cả A và B nhưng không đồng thời thuộc cả tập A và B. Phương thức .symmetric_difference() cho kết quả là hiệu đối xứng của hai tập hợp. Chú ý, do tính chất đối xứng nên art_friends.symmetric_difference(science_friends) và science_friends.symmetric_difference(art_friends) cho kết quả như nhau.

art_friends = {"Rolf", "Anne", "Jen"} science_friends = {"Jen", "Charlie"} not_in_both_1 = art_friends.symmetric_difference(science_friends) print(not_in_both_1) # Kết quả {'Rolf', 'Charlie', 'Anne'} not_in_both_2 = science_friends.symmetric_difference(art_friends) print(not_in_both_2) # Kết quả {'Rolf', 'Anne', 'Charlie'}

1.3.4 Phép giao (Intersection)

Phép giao hai tập hợp cho kết quả là các phần tử đồng thời thuộc cả hai tập hợp. Trong Python sử dụng phương thức .intersection() để thực hiện phép giao, chú ý tập hợp nào đứng trước cũng được, do đó kết quả art_friends.intersection(science_friends) và science_friends.intersection(art_friends) là như nhau.

art_friends = {"Rolf", "Anne", "Jen"} science_friends = {"Jen", "Charlie"} art_and_science = art_friends.intersection(science_friends) print(art_and_science) # Kết quả là {"Jen"}

Tập hợp art_and_science chứa các bạn học đồng thời cả lớp Mỹ thuật và lớp Khoa học, do đó kết quả chỉ có “Jen” học cả hai lớp này.

1.3.5 Thay đổi tập hợp dựa trên phép toán tập hợp

Trong phần trước chúng ta đã biết đến phương thức .update() để thêm nhiều phần tử vào một tập hợp. Dựa vào các phép toán tập hợp, Python cung cấp một số các phương thức khác để thay đổi tập hợp như sau:

.difference_update()

Phương thức này là sự kết hợp của .difference() và .update(). Nó thực hiện phép trừ tập hợp trước, được kết quả như thế nào sẽ cập nhật vào tập hợp đích.

A = {1, 2, 3, 4} B = {3, 4, 5, 6} A.difference_update(B) print(A) # Kết quả {1, 2}

.symmetric_difference_update()

Phương thức này là sự kết hợp của .symmetric_difference() và .update(). Nó thực hiện phép trừ đối xứng 2 tập hợp trước, được kết quả như thế nào sẽ cập nhật vào tập hợp đích.

A = {1, 2, 3, 4} B = {3, 4, 5, 6} A.symmetric_difference_update(B) print(A) # Kết quả là {1, 2, 5, 6}

.intersection_update()

Tương tự, Python thực hiện .intersection() trước sau đó thực hiện .update():

A = {1, 2, 3, 4} B = {3, 4, 5, 6} A.intersection_update(B) print(A) # Kết quả là {3, 4}

1.3.6 Một số các phép toán khác

.isdisjoint() Trả về True nếu hai tập hợp không giao nhau, tức là hai tập hợp không có phần tử chung.

A = {1, 2, 3, 4} B = {3, 4, 5, 6} print(not A.isdisjoint(B)) # Kết quả là True

Ở đây, chúng ta sử dụng toán tử logic not, để thực hiện trả về True khi hai tập giao nhau, nghe nó thuận tai hơn :D.

.issubset() Trả về True nếu tập này còn tập con của tập đích (tập trong ngoặc).

A = {3, 4} B = {3, 4, 5, 6} print(A.issubset(B)) # Kết quả là True

.issuperset() Trả về True nếu tập này là tập cha của tập đích (tập trong ngoặc).

A = {3, 4} B = {3, 4, 5, 6} print(A.issuperset(B)) # Kết quả là False A = {3, 4} B = {3, 4, 5, 6} print(A.issubset(B)) # Kết quả là True # Tương đương với print(A <= B) # Kết quả là True

1.4 “Đóng băng” tập hợp (Frozen Set)

Python cung cấp một hàm tên là frozenset(), kết quả trả về là một tập hợp (Set) không thể thay đổi. Khi đó, nếu bạn thực hiện các phương thức .add(), .remove(), .update()… sẽ báo lỗi.

“Đóng băng” tập hợp sẽ làm cho tập hợp đó giống như cấu trúc Tuple trong Python.

friends = {"Rolf", "Anne", "Jen"} frozen_friends = frozenset(friends) frozen_friends.add({"Jen", "Charlie"}) print(frozen_friends) # Kết quả lỗi: AttributeError: 'frozenset' object has no attribute 'add'

Đóng băng một tập hợp rất hữu ích trong trường hợp bạn muốn tập hợp đó không thể thay đổi. Ví dụ khi dùng một tập hợp làm key cho một từ điển (Dictionary), sẽ được giới thiệu trong phần tiếp theo.

A = {1, 2, 3} B = {'a', 'b', 'c'} C = {x: 'foo', y: 'bar'} # Kết quả lỗi: TypeError: unhashable type: 'set'

Tuy nhiên nếu bạn đóng băng các tập hợp này, sẽ không có lỗi nào xảy ra.

A = frozenset({1, 2, 3}) B = frozenset({'a', 'b', 'c'}) C = {x: 'foo', y: 'bar'} # Không có lỗi

2. Tập hợp sử dụng khi nào?

Toán tập hợp hay lý thuyết tập hợp là một trong những phần quan trọng của Toán học mà Khoa học dữ liệu (data science) và Machine Learning sử dụng kiến thức Toán rất nhiều, do vậy toán tập hợp trong Python là một phần không thể thiếu. Ngay từ đầu Python đã được phát triển cho mục đích Khoa học và Giáo dục, do vậy bạn có thể thấy các thiết kế mang hơi hướng Khoa học.

Set có các phần tử là không được thay đổi, do vậy khả năng tìm dữ liệu sẽ nhanh hơn.

Set cần thiết cho các logic liên đến các cặp (key:value) trong cấu trúc Dictionary của Python.

Các phần tử là duy nhất, do đó nếu bạn có một dữ liệu tương tự thì Set là một lựa chọn.

CÁC BÀI VIẾT KHÁC