0% found this document useful (0 votes)
11 views

A Practical Introduction To Python Programming Heinold-43-52

This chapter discusses various common programming techniques in Python including counting, summing, swapping variables, using flags, finding maximum/minimum values, and adding comments. It provides examples of counting the number of values over 10 or equal to 0 entered by the user. Other examples demonstrate summing a range of numbers, swapping two variables, using a flag to check if a number is prime, and finding the largest number entered by the user. Comments are described as messages to readers of the code.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views

A Practical Introduction To Python Programming Heinold-43-52

This chapter discusses various common programming techniques in Python including counting, summing, swapping variables, using flags, finding maximum/minimum values, and adding comments. It provides examples of counting the number of values over 10 or equal to 0 entered by the user. Other examples demonstrate summing a range of numbers, swapping two variables, using a flag to check if a number is prime, and finding the largest number entered by the user. Comments are described as messages to readers of the code.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

Machine Translated by Google

Chương 5

Các chủ đề khác tôi

Chương này bao gồm một số kỹ thuật phổ biến và một số thông tin hữu ích khác.

5.1 Đếm

Chúng ta thường muốn các chương trình của mình đếm xem điều gì đó xảy ra bao nhiêu lần. Ví dụ: một
trò chơi điện tử có thể cần theo dõi xem người chơi đã sử dụng bao nhiêu lượt hoặc một chương trình
toán học có thể muốn đếm xem có bao nhiêu số có thuộc tính đặc biệt. Chìa khóa để đếm là sử dụng một
biến để giữ số đếm.

Ví dụ 1 Chương trình này lấy 10 số từ người dùng và đếm xem có bao nhiêu số lớn hơn 10.

đếm = 0

đối với i trong phạm vi


(10): num = eval(input('Nhập số: ')) if num>10:

đếm=đếm+1

print('Có ', count, 'các số lớn hơn 10.')

Hãy nghĩ về biến đếm như thể chúng ta đang kiểm đếm trên một tờ giấy. Mỗi khi chúng ta nhận được một
số lớn hơn 10, chúng ta sẽ thêm 1 vào tổng số của mình. Trong chương trình, điều này được thực hiện
bằng dòng count=count+1. Dòng đầu tiên của chương trình, count=0, rất quan trọng. Nếu không có nó,
trình thông dịch Python sẽ đến dòng count=count+1 và đưa ra một lỗi nói điều gì đó về việc không
biết count là gì. Điều này là do lần đầu tiên chương trình đến dòng này, nó sẽ cố gắng thực hiện
những gì nó nói: lấy giá trị cũ của số đếm, thêm 1 vào đó và lưu kết quả vào số đếm. Nhưng khi
chương trình đến đó lần đầu tiên, không có giá trị cũ nào được sử dụng, vì vậy trình thông dịch
Python không biết phải làm gì. Để tránh lỗi, chúng ta cần xác định số đếm và đó là điều đầu tiên

33
Machine Translated by Google

34 CHƯƠNG 5. CÁC CHỦ ĐỀ KHÁC I

dòng nào. Chúng tôi đặt nó thành 0 để cho biết rằng khi bắt đầu chương trình, không tìm thấy số
nào lớn hơn 10.

Đếm là một điều cực kỳ phổ biến. Hai điều liên quan là:

1. count=0 — Bắt đầu đếm từ 0.

2. count=count+1 — Tăng số đếm lên 1.

Ví dụ 2 Bản sửa đổi này của ví dụ trước sẽ đếm xem có bao nhiêu số mà người dùng nhập lớn hơn 10
và bao nhiêu số bằng 0. Để đếm hai thứ, chúng ta sử dụng hai biến đếm.

đếm1 = 0
đếm2 = 0

đối với i trong phạm vi


(10): num = eval(input('Nhập số: ')) if num>10:

đếm1=đếm1+1
nếu số==0:
đếm2=đếm2+1

print('Có ', count1, 'các số lớn hơn 10.') print('Có ', count2, 'số 0.')

Ví dụ 3 Tiếp theo chúng ta có một ví dụ phức tạp hơn một chút. Chương trình này đếm có bao nhiêu ô
2 đến 1002 có tận cùng là 4.
vuông từ 1

đếm = 0

cho i trong phạm vi


(1,101): if
(i**2)%10==4: count = count + 1
in (đếm)

Một số lưu ý ở đây: Đầu tiên, do điểm bất thường đã nói ở trên của hàm phạm vi , chúng ta cần sử
dụng phạm vi (1.101) để lặp qua các số từ 1 đến 100. Biến lặp i lấy các số đó đến 1002 được biểu
2
giá trị hay không, tức là thị bằng i**2 . Tiếp theo, để kiểm tra xem một số có kết thúc bằng
bình phương từ 1 trên 4, một thủ thuật toán học hay là kiểm tra xem nó có dư 4 khi chia cho 10 hay
không. Toán tử modulo, %, được sử dụng để lấy số dư.

5.2 Tính tổng

Liên quan chặt chẽ đến việc đếm là tính tổng, nơi chúng ta muốn cộng một loạt các số.
Machine Translated by Google

5.3. TRAO ĐỔI 35

Ví dụ 1 Chương trình này sẽ cộng các số từ 1 đến 100. Cách thức hoạt động của nó là mỗi lần chúng ta
gặp một số mới, chúng ta cộng nó vào tổng số hiện tại của mình, s.

s = 0

cho i trong phạm vi


(1.101): s = s + i
print(' Tổng là', s)

Ví dụ 2 Chương trình này sẽ yêu cầu người dùng nhập 10 số và sau đó tính trung bình cộng của chúng.

s = 0

cho i trong phạm vi (10): num


= eval(input('Nhập số: '))
s = s + num

print(' Trung bình là', s/10)

Ví dụ 3 Một cách sử dụng phổ biến của tính tổng là tính điểm trong một trò chơi. Gần đầu trò chơi,
chúng ta sẽ đặt biến điểm bằng 0. Sau đó, khi muốn cộng điểm, chúng ta sẽ làm như sau:

điểm = điểm + 10

5.3 Hoán đổi

Thông thường chúng ta muốn hoán đổi giá trị của hai biến x và y. Sẽ rất hấp dẫn nếu bạn thử những
điều sau:

x = y
y = x

Nhưng điều này sẽ không hiệu quả. Giả sử x là 3 và y là 5. Dòng đầu tiên sẽ đặt x thành 5, điều này
là tốt, nhưng dòng thứ hai cũng sẽ đặt y thành 5 vì x bây giờ là 5. Mẹo là sử dụng biến thứ ba để
lưu giá trị của x:

giữ = x

x = yy
= giữ

Trong nhiều ngôn ngữ lập trình, đây là cách thông thường để hoán đổi các biến. Tuy nhiên, Python
cung cấp một lối tắt hay:

x,y = y,x

Sau này chúng ta sẽ tìm hiểu chính xác lý do tại sao điều này lại hiệu quả. Hiện tại, bạn có thể thoải mái sử dụng bất kỳ phương pháp nào bạn thích.

Tuy nhiên, phương pháp sau có ưu điểm là ngắn gọn và dễ hiểu hơn.
Machine Translated by Google

36 CHƯƠNG 5. CÁC CHỦ ĐỀ KHÁC I

5.4 Cờ biến

Biến cờ có thể được sử dụng để cho một phần trong chương trình của bạn biết khi nào có điều gì đó xảy ra ở phần

khác của chương trình. Đây là một ví dụ xác định xem một số có phải là số nguyên tố hay không.

num = eval(input('Nhập số: '))

flag = 0
cho i trong phạm vi (2,num): if
num%i==0: flag =
1

if flag==1:
print('Không phải số nguyên
tố') else:
in('Prime')

Nhắc lại rằng một số là số nguyên tố nếu nó không có ước số nào khác ngoài 1 và chính nó. Cách hoạt động của

chương trình trên là cờ bắt đầu từ 0. Sau đó, chúng tôi lặp từ 2 đến num-1. Nếu một trong các giá trị đó trở

thành ước số thì cờ sẽ được đặt thành 1. Sau khi vòng lặp kết thúc, chúng tôi sẽ kiểm tra xem cờ đã được đặt hay

chưa. Nếu đúng như vậy thì chúng ta biết có một ước số và num không phải là số nguyên tố. Nếu không thì số đó

phải là số nguyên tố.

5,5 Tối đa và phút

Nhiệm vụ lập trình phổ biến là tìm giá trị lớn nhất hoặc nhỏ nhất trong một chuỗi giá trị. Đây là một ví dụ trong

đó chúng tôi yêu cầu người dùng nhập mười số dương và sau đó chúng tôi in số lớn nhất.

lớn nhất = eval(input('Nhập số dương: ')) for i in range(9): num =


eval(input('Nhập số dương:
')) if num>lớn nhất: lớn nhất=num print('Largest số:', lớn nhất)

Chìa khóa ở đây là biến lớn nhất theo dõi số lượng lớn nhất được tìm thấy cho đến nay. Chúng tôi bắt đầu bằng

cách đặt nó bằng số đầu tiên của người dùng. Sau đó, mỗi khi chúng tôi nhận được số mới từ người dùng, chúng tôi

sẽ kiểm tra xem số của người dùng có lớn hơn giá trị lớn nhất hiện tại hay không (được lưu trữ ở mức lớn nhất).

Nếu đúng như vậy thì chúng tôi đặt giá trị lớn nhất bằng số lượng của người dùng.

Thay vào đó, nếu chúng ta muốn giá trị nhỏ nhất thì thay đổi duy nhất cần thiết là > trở thành <, mặc dù cũng tốt

hơn nếu đổi tên biến lớn nhất thành nhỏ nhất.

Sau này, khi xem danh sách, chúng ta sẽ thấy một cách ngắn hơn để tìm các giá trị lớn nhất và nhỏ nhất, nhưng kỹ

thuật trên rất hữu ích để biết vì đôi khi bạn có thể gặp phải tình huống trong đó cách liệt kê không thực hiện

được mọi thứ bạn cần. làm.


Machine Translated by Google

5.6. BÌNH LUẬN 37

5.6 Bình luận

Một bình luận là một tin nhắn gửi đến ai đó đang đọc chương trình của bạn. Chú thích thường được sử dụng để mô tả

chức năng của một phần mã hoặc cách thức hoạt động của nó, đặc biệt với những phần mã phức tạp. Bình luận không có

tác dụng gì đối với chương trình của bạn.

Nhận xét một dòng Đối với nhận xét một dòng, hãy sử dụng ký tự # .

# một cách hơi lén lút để lấy hai giá trị cùng một lúc num1, num2 =
eval(input('Nhập hai số cách nhau bằng dấu phẩy: '))

Bạn cũng có thể đặt chú thích ở cuối dòng:

count = count + 2 # mỗi ước số đóng góp hai số đếm

Nhận xét nhiều dòng Đối với nhận xét trải dài trên nhiều dòng, bạn có thể sử dụng dấu ngoặc kép.
"""
Tên chương trình: Hello world
Tác giả: Brian Heinold

Ngày: 9/1/11 """

print('Xin chào thế giới')

Một cách sử dụng hay cho dấu ngoặc kép là nhận xét các phần trong mã của bạn. Thường thì bạn sẽ muốn sửa đổi chương

trình của mình nhưng không muốn xóa mã cũ phòng trường hợp những thay đổi của bạn không hiệu quả. Bạn có thể nhận

xét mã cũ để nó vẫn ở đó nếu bạn cần và nó sẽ bị bỏ qua khi chương trình mới của bạn chạy. Đây là một ví dụ đơn giản:

"""

print(' Dòng này và dòng tiếp theo nằm trong một nhận xét.') print(' Những dòng
này sẽ không được thực thi.')
"""

print(' Dòng này không có trong bình luận và nó sẽ được thực thi.')

5.7 Gỡ lỗi đơn giản

Dưới đây là hai kỹ thuật đơn giản để tìm ra lý do tại sao một chương trình không hoạt động:

1. Sử dụng trình bao Python. Sau khi chương trình của bạn chạy, bạn có thể nhập tên các biến của chương trình

để kiểm tra giá trị của chúng và xem biến nào có giá trị mà bạn mong đợi và biến nào không. Bạn cũng có thể

sử dụng Shell để nhập các phần nhỏ của chương trình và xem chúng có hoạt động không.

2. Thêm câu lệnh in vào chương trình của bạn. Bạn có thể thêm chúng vào bất kỳ thời điểm nào trong chương trình

của mình để xem giá trị của các biến là gì. Bạn cũng có thể thêm câu lệnh in để xem liệu có đạt đến một điểm

trong mã của bạn hay không. Ví dụ: nếu bạn cho rằng mình có thể mắc lỗi trong
Machine Translated by Google

38 CHƯƠNG 5. CÁC CHỦ ĐỀ KHÁC I

một điều kiện của câu lệnh if, bạn có thể đặt câu lệnh in vào khối if để xem điều kiện có được kích
hoạt hay không.

Đây là một ví dụ từ một phần của chương trình số nguyên tố ở đầu chương này. Chúng ta đặt câu lệnh
print vào vòng lặp for để biết chính xác khi nào biến cờ được đặt:

flag = 0
num = eval(input('Nhập số: ')) for i in range(2,num):
if num%i==0:

cờ = 1 bản
in(i, cờ)

3. Một câu lệnh đầu vào trống, như bên dưới, có thể được sử dụng để tạm dừng chương trình của bạn tại một điểm cụ thể:

đầu vào()

5.8 Chương trình ví dụ

Đó là một kỹ năng có giá trị là có thể đọc được mã. Trong phần này chúng ta sẽ xem xét kỹ hơn một số chương
trình đơn giản và cố gắng hiểu cách chúng hoạt động.

Ví dụ 1 Chương trình sau in ra Hello một số lần ngẫu nhiên trong khoảng từ 5 đến 25.

từ randint nhập khẩu ngẫu nhiên

rand_num = randint(5,25) cho i trong


phạm vi(rand_num):
in('Xin chào')

Dòng đầu tiên trong chương trình là câu lệnh nhập. Điều này chỉ cần xuất hiện một lần, thường là ở gần đầu
chương trình của bạn. Dòng tiếp theo tạo ra một số ngẫu nhiên trong khoảng từ 5 đến 25. Sau đó, hãy nhớ
rằng để lặp lại điều gì đó với số lần xác định, chúng ta sử dụng vòng lặp for. Để lặp lại điều gì đó 50
lần, chúng ta sẽ sử dụng range(50) trong vòng lặp for. Để lặp lại điều gì đó 100 lần, chúng ta sẽ sử dụng
phạm vi (100). Để lặp lại một số lần ngẫu nhiên, chúng ta có thể sử dụng phạm vi (Rand_num), trong đó
Rand_num là một biến chứa một số ngẫu nhiên. Mặc dù nếu muốn, chúng ta có thể bỏ qua biến và đặt câu lệnh
randint trực tiếp vào hàm phạm vi , như hiển thị bên dưới.

từ randint nhập khẩu ngẫu nhiên

cho tôi trong phạm vi(randint(5,25)): print('Xin


chào')
Machine Translated by Google

5.8. CHƯƠNG TRÌNH MẪU 39

Ví dụ 2 So sánh hai chương trình sau.

từ randint nhập khẩu ngẫu nhiên từ randint nhập khẩu ngẫu nhiên

rand_num = randint(1,5) cho i trong cho tôi trong phạm vi (6):


phạm vi(6): rand_num = randint(1,5)
print('Hello'*rand_num) print('Xin chào'*rand_num)

xin chào Xin chào xin chào xin chào


xin chào Xin chào
xin chào Xin chao xin chao xin chao xin chao
xin chào Xin chào xin chào xin chào
xin chào xin chào
xin chào Xin chào

Sự khác biệt duy nhất giữa các chương trình là ở vị trí của câu lệnh rand_num . TRONG

chương trình đầu tiên, nó nằm bên ngoài vòng lặp for và điều này có nghĩa là rand_num được đặt một lần

vào lúc bắt đầu chương trình và giữ nguyên giá trị đó trong suốt vòng đời của chương trình. Như vậy

mọi câu lệnh in sẽ in Xin chào với số lần giống nhau. Trong chương trình thứ hai,

câu lệnh rand_num nằm trong vòng lặp. Ngay trước mỗi câu lệnh in, rand_num được gán một

số ngẫu nhiên mới, do đó số lần Hello được in sẽ khác nhau tùy theo dòng.

Ví dụ 3 Chúng ta hãy viết một chương trình tạo ra 10000 số ngẫu nhiên trong khoảng từ 1 đến 100 và

đếm xem có bao nhiêu trong số chúng là bội số của 12. Dưới đây là những thứ chúng ta cần:

• Vì chúng ta đang sử dụng số ngẫu nhiên nên dòng đầu tiên của chương trình sẽ nhập
mô- đun ngẫu nhiên

• Chúng ta sẽ cần một vòng lặp for để chạy 10000 lần.

• Bên trong vòng lặp, chúng ta cần tạo một số ngẫu nhiên, kiểm tra xem nó có chia hết cho không
12, nếu vậy thì cộng thêm 1 vào số đếm.

• Vì chúng ta đang đếm nên chúng ta cũng cần đặt số đếm bằng 0 trước khi bắt đầu đếm.

• Để kiểm tra khả năng chia hết cho 12, chúng ta sử dụng toán tử modulo, %,.

Khi chúng ta kết hợp tất cả những thứ này lại với nhau, chúng ta sẽ nhận được những điều sau:

từ randint nhập khẩu ngẫu nhiên

đếm = 0

cho tôi trong phạm vi (10000):


num = randint(1, 100)
nếu num%12==0:
đếm=đếm+1

print('Số bội của 12:', count)


Machine Translated by Google

40 CHƯƠNG 5. CÁC CHỦ ĐỀ KHÁC I

Vấn đề thụt đầu dòng

Một lỗi phổ biến là thụt lề không chính xác. Giả sử chúng ta lấy phần trên và thụt dòng cuối cùng.
Chương trình vẫn chạy nhưng không chạy như mong đợi.

từ randint nhập khẩu ngẫu nhiên

count = 0 cho

i trong phạm vi (10000):


num = randint(1, 100) nếu
num%12==0:
count=count+1

print('Số bội của 12:', count)

Khi chúng tôi chạy nó, nó sẽ xuất ra cả đống số. Lý do cho điều này là bằng cách thụt lề câu lệnh in,
chúng ta đã biến nó thành một phần của vòng lặp for, do đó câu lệnh in sẽ được thực thi 10.000 lần.

Giả sử chúng ta thụt lề câu lệnh in thêm một bước nữa, như bên dưới.

từ randint nhập khẩu ngẫu nhiên

đếm = 0

cho tôi trong phạm vi (10000):


num = randint(1, 100) nếu
num%12==0:
count=count+1

print('Số bội của 12:', count)

Bây giờ, nó không chỉ là một phần của vòng lặp for mà còn là một phần của câu lệnh if. Điều sẽ xảy ra là
mỗi khi chúng tôi tìm thấy bội số mới của 12, chúng tôi sẽ in số đếm. Cả ví dụ này lẫn ví dụ trước đều
không phải là điều chúng ta mong muốn. Chúng tôi chỉ muốn in số đếm một lần vào cuối chương trình, vì vậy
chúng tôi không muốn câu lệnh in bị thụt lề chút nào.

5.9 Bài tập

1. Viết chương trình đếm xem có bao nhiêu bình phương của các số từ 1 đến 100 tận cùng bằng một
1.

2. Viết chương trình đếm xem có bao nhiêu số bình phương từ 1 đến 100 tận cùng bằng số 4 và bao nhiêu
số tận cùng bằng số 9.

1
+···+ N )
1 1 + 2 3
3. Viết chương trình yêu cầu người dùng nhập giá trị n rồi tính (1+ ln(n). Hàm ln
đăng nhập vào module toán học .

4. Viết chương trình tính tổng 1 2 + 3 4 + ··· + 1999 2000.


Machine Translated by Google

5.9. BÀI TẬP 41

5. Viết chương trình yêu cầu người dùng nhập một số và in tổng các ước của số đó. Tổng các ước của một số là

một hàm quan trọng trong lý thuyết số.

6. Một số được gọi là số hoàn hảo nếu nó bằng tổng các ước của nó, không kể chính số đó. Ví dụ: 6 là số hoàn

hảo vì các ước của 6 là 1, 2, 3, 6 và 6 = 1 + 2 + 3. Một ví dụ khác, 28 là số hoàn hảo vì các ước của nó

là 1, 2, 4, 7 , 14, 28 và 28 = 1 + 2 + 4 + 7 + 14. Tuy nhiên, 15 không phải là số hoàn hảo vì các ước của

nó là 1, 3, 5, 15 và 15 = 1 + 3 + 5. Viết chương trình tìm cả bốn số hoàn hảo nhỏ hơn 10000.

7. Một số nguyên được gọi là số nguyên nếu nó không chia hết cho bất kỳ số chính phương nào ngoài 1. Ví dụ:

42 là số tự do vì các ước của nó là 1, 2, 3, 6, 7, 21 và 42 và không có số nào trong số đó (ngoại trừ 1)

là một hình vuông hoàn hảo. Mặt khác, 45 không phải là số chính phương vì nó chia hết cho 9, đây là một số

chính phương. Viết chương trình yêu cầu người dùng nhập một số nguyên và cho họ biết nó có phải là số

nguyên hay không.

8. Viết chương trình hoán đổi giá trị của ba biến x, y, z sao cho x nhận giá trị

của y, y nhận giá trị của z và z nhận giá trị của x.

9. Viết chương trình đếm xem có bao nhiêu số nguyên từ 1 đến 1000 không phải là số chính phương, số lập phương

hoặc lũy thừa bậc 5.

10. Yêu cầu người dùng nhập 10 điểm thi. Viết chương trình thực hiện các công việc sau:

(a) In ra điểm cao nhất và thấp nhất. b) In ra

kết quả trung bình cộng.

(c) In ra số điểm lớn thứ hai. (d) Nếu bất

kỳ điểm nào lớn hơn 100 thì sau khi nhập tất cả các điểm, in

một thông báo cảnh báo người dùng rằng giá trị trên 100 đã được nhập.

(e) Bỏ hai điểm thấp nhất và in ra điểm trung bình của các điểm còn lại.

11. Viết chương trình tính giai thừa của một số. Giai thừa, n!, của một số n là tích của tất cả các số nguyên

từ 1 đến n, bao gồm cả n. Ví dụ: 5! = 1 · 2 · 3 · 4 · 5 = 120.

[Gợi ý: Hãy thử sử dụng phép nhân tương đương với kỹ thuật tính tổng.]

12. Viết chương trình yêu cầu người dùng đoán một số ngẫu nhiên trong khoảng từ 1 đến 10. Nếu đoán đúng, họ

được cộng 10 điểm vào điểm và trừ 1 điểm nếu đoán sai. Cung cấp cho người dùng năm số để đoán và in điểm

của họ sau khi đoán xong.

13. Ở chương trước có một bài tập yêu cầu bạn tạo một trò chơi nhân cho trẻ em. Cải thiện chương trình của bạn

từ bài tập đó để theo dõi số lượng câu trả lời đúng và sai. Khi kết thúc chương trình, hãy in một thông

báo khác nhau tùy thuộc vào số lượng câu hỏi mà người chơi trả lời đúng.

14. Bài tập này nói về bài toán Monty Hall nổi tiếng. Trong bài toán này, bạn là người tham gia một game show.

Người dẫn chương trình, Monty Hall, sẽ chỉ cho bạn ba cánh cửa. Đằng sau một trong những cánh cửa đó là

giải thưởng, và đằng sau hai cánh cửa còn lại là những con dê. Bạn chọn một cánh cửa. Monty Hall, người
Machine Translated by Google

42 CHƯƠNG 5. CÁC CHỦ ĐỀ KHÁC I

biết giải thưởng nằm ở cánh cửa nào, sau đó mở một trong những cánh cửa không chứa giải
thưởng. Bây giờ chỉ còn hai cánh cửa và Monty cho bạn cơ hội để thay đổi lựa chọn của mình.
Nên giữ nguyên cửa, đổi cửa hay không?

(a) Viết chương trình mô phỏng việc chơi trò chơi này 10000 lần và tính toán bao nhiêu
phần trăm thời gian bạn sẽ thắng nếu bạn chuyển đổi và bao nhiêu phần trăm thời gian
bạn sẽ thắng nếu không chuyển đổi.

(b) Hãy thử cách trên nhưng với bốn cửa thay vì ba. Vẫn chỉ có một giải thưởng duy nhất và
Monty vẫn mở ra một cánh cửa rồi cho bạn cơ hội chuyển đổi.

You might also like