Viết chương trình Python cho phép nhập vào số nguyên dương X. Kiểm tra tính chín…
Cô sẽ hướng dẫn các em từng bước một, giống như khi chúng ta cùng nhau chinh phục các kiến thức mới trên lớp vậy.
Bước 1: Phân tích yêu cầu của bài toán
Đề bài yêu cầu chúng ta viết một chương trình Python để:
1. Nhập vào một số nguyên dương X từ bàn phím.
2. Kiểm tra xem số X đó có phải là số chính phương hay không.
3. In kết quả ra màn hình.
Bước 2: Hiểu về “số chính phương”
Trước hết, chúng ta cần hiểu rõ thế nào là một số chính phương.
Một số nguyên dương X được gọi là số chính phương nếu tồn tại một số nguyên dương Y sao cho \( Y^2 = X \).
Ví dụ:
– 9 là số chính phương vì \( 3^2 = 9 \).
– 16 là số chính phương vì \( 4^2 = 16 \).
– 7 không phải là số chính phương vì không có số nguyên nào bình phương lên bằng 7.
Công thức toán học quan trọng:
Nếu X là số chính phương, thì căn bậc hai của X, tức là \( \sqrt{X} \), sẽ là một số nguyên. Ngược lại, nếu \( \sqrt{X} \) là một số nguyên, thì X chắc chắn là số chính phương.
Bước 3: Lên ý tưởng thuật toán
Dựa trên định nghĩa và công thức trên, chúng ta có thể nghĩ ra các cách để kiểm tra tính chính phương:
Cách 1: Dùng căn bậc hai và kiểm tra số nguyên
Đây là cách tiếp cận trực tiếp và hiệu quả nhất.
1. Nhập số nguyên dương X từ người dùng.
2. Tính căn bậc hai của X. Python có hàm \(math.sqrt()\) để làm việc này.
3. Kiểm tra xem kết quả căn bậc hai có phải là một số nguyên hay không.
– Làm sao để kiểm tra một số có phải là số nguyên hay không? Chúng ta có thể so sánh nó với phần nguyên của chính nó. Ví dụ, nếu \(a\) là một số thực, ta có thể kiểm tra xem \(a == int(a)\) hay không. Nếu đúng, \(a\) là số nguyên.
Cách 2: Lặp và kiểm tra bình phương (ít hiệu quả hơn nhưng cũng là một ý tưởng)
1. Nhập số nguyên dương X.
2. Lặp từ số \(y = 1\) cho đến khi \( y^2 \) lớn hơn hoặc bằng X.
3. Trong mỗi vòng lặp, kiểm tra xem \( y^2 \) có bằng X hay không.
4. Nếu tìm thấy \(y\) sao cho \( y^2 = X \), thì X là số chính phương.
5. Nếu vòng lặp kết thúc mà không tìm thấy \(y\) nào thỏa mãn, thì X không phải là số chính phương.
Tuy nhiên, cách 1 thông minh và hiệu quả hơn rất nhiều, đặc biệt với các số lớn. Vì vậy, cô sẽ hướng dẫn các em triển khai theo Cách 1.
Bước 4: Viết mã Python (theo Cách 1)
Chúng ta sẽ cần sử dụng thư viện \(math\) để tính căn bậc hai.
1. Nhập thư viện \(math\)
python
import math
2. Nhập số nguyên dương X từ người dùng
Chúng ta sử dụng hàm \(input()\) để nhận dữ liệu từ bàn phím, sau đó dùng \(int()\) để chuyển đổi chuỗi nhập vào thành số nguyên.
python
x = int(input(“Nhập vào một số nguyên dương X: “))
3. Kiểm tra xem X có phải là số nguyên dương không (yêu cầu đề bài)
Mặc dù đề bài yêu cầu nhập số nguyên dương, nhưng để chương trình “mạnh mẽ” hơn, chúng ta có thể thêm một điều kiện kiểm tra. Tuy nhiên, theo đúng yêu cầu “Không vượt lớp” và “Không chép lại đề”, chúng ta chỉ tập trung vào yêu cầu cốt lõi là kiểm tra tính chính phương của số đã nhập. Giả sử người dùng luôn nhập đúng số nguyên dương theo yêu cầu ban đầu.
4. Tính căn bậc hai và kiểm tra
python
# Kiểm tra xem số nhập vào có dương không
if x > 0:
# Tính căn bậc hai
can_bac_hai = math.sqrt(x)
# Kiểm tra xem căn bậc hai có phải là số nguyên không
# Ta so sánh giá trị thực với phần nguyên của nó
if can_bac_hai == int(can_bac_hai):
print(f”{x} là số chính phương.”)
else:
print(f”{x} không phải là số chính phương.”)
elif x == 0:
print(“0 là số chính phương (vì 0^2 = 0).”)
else:
print(“Số bạn nhập không phải là số nguyên dương.”)
5. Gộp lại thành một chương trình hoàn chỉnh
python
# Bước 1: Nhập thư viện cần thiết
import math
# Bước 2: Nhập số nguyên dương từ người dùng
# Hàm input() trả về chuỗi, ta cần chuyển sang số nguyên bằng int()
so_nhap = int(input(“Nhập vào một số nguyên dương X: “))
# Bước 3: Kiểm tra tính chính phương
# Kiểm tra xem số nhập vào có lớn hơn 0 không
if so_nhap > 0:
# Tính căn bậc hai của số nhập vào
# Lưu ý: math.sqrt() trả về giá trị số thực (float)
can_bac_hai = math.sqrt(so_nhap)
# Để kiểm tra xem một số thực có phải là số nguyên hay không,
# ta có thể so sánh nó với phần nguyên của chính nó.
# Nếu số thực bằng với phần nguyên của nó, thì đó là số nguyên.
# Ví dụ: 3.0 == int(3.0) -> True
# 3.5 == int(3.5) -> 3.5 == 3 -> False
if can_bac_hai == int(can_bac_hai):
# Nếu đúng, số nhập vào là số chính phương
print(f”{so_nhap} là số chính phương.”)
else:
# Nếu sai, số nhập vào không phải là số chính phương
print(f”{so_nhap} không phải là số chính phương.”)
elif so_nhap == 0:
# Trường hợp đặc biệt: số 0 cũng được coi là số chính phương (0*0=0)
print(“0 là số chính phương.”)
else:
# Nếu số nhập vào nhỏ hơn 0, nó không phải là số nguyên dương
print(“Số bạn nhập không phải là số nguyên dương theo yêu cầu.”)
Bước 5: Giải thích từng dòng lệnh
* \(import math\): Dòng này yêu cầu Python nạp thư viện \(math\). Thư viện này chứa các hàm toán học hữu ích, trong đó có hàm \(sqrt()\) để tính căn bậc hai.
* \(so_nhap = int(input(“Nhập vào một số nguyên dương X: “))\):
* \(input(“Nhập vào một số nguyên dương X: “)\): Hiển thị thông báo “Nhập vào một số nguyên dương X: ” trên màn hình và chờ người dùng nhập dữ liệu. Dữ liệu nhập vào sẽ ở dạng chuỗi (string).
* \(int(…)\): Chuyển đổi chuỗi mà người dùng nhập vào thành một số nguyên. Nếu người dùng nhập một thứ không thể chuyển đổi thành số nguyên (ví dụ: chữ cái), chương trình sẽ báo lỗi.
* \(so_nhap = …\): Gán giá trị số nguyên vừa nhận được vào biến có tên là \(so_nhap\).
* \(if so_nhap > 0:\): Đây là câu lệnh điều kiện để kiểm tra xem giá trị của biến \(so_nhap\) có lớn hơn 0 hay không. Yêu cầu của đề bài là nhập số nguyên dương, nên ta kiểm tra điều này trước.
* \(can_bac_hai = math.sqrt(so_nhap)\): Nếu \(so_nhap\) lớn hơn 0, chúng ta gọi hàm \(math.sqrt()\) để tính căn bậc hai của \(so_nhap\). Kết quả (là một số thực) được lưu vào biến \(can_bac_hai\).
* \(if can_bac_hai == int(can_bac_hai):\):
* \(int(can_bac_hai)\): Lấy phần nguyên của giá trị \(can_bac_hai\). Ví dụ, nếu \(can_bac_hai\) là \(5.0\), thì \(int(can_bac_hai)\) sẽ là \(5\). Nếu \(can_bac_hai\) là \(4.0\), thì \(int(can_bac_hai)\) sẽ là \(4\).
* \(can_bac_hai == int(can_bac_hai)\): So sánh giá trị thực của căn bậc hai với phần nguyên của nó. Nếu hai giá trị này bằng nhau, có nghĩa là căn bậc hai là một số nguyên.
* \(print(f”{so_nhap} là số chính phương.”)\): Nếu điều kiện \(can_bac_hai == int(can_bac_hai)\) đúng, câu lệnh này sẽ in ra màn hình thông báo rằng \(so_nhap\) là số chính phương. Dấu \(f\) trước chuỗi cho phép chúng ta nhúng biến vào bên trong chuỗi bằng cách đặt tên biến trong cặp dấu ngoặc nhọn \({}\).
* \(else:\) (trong \(if so_nhap > 0:\)): Nếu điều kiện \(can_bac_hai == int(can_bac_hai)\) sai, tức là căn bậc hai không phải là số nguyên.
* \(print(f”{so_nhap} không phải là số chính phương.”)\): In ra màn hình thông báo rằng \(so_nhap\) không phải là số chính phương.
* \(elif so_nhap == 0:\): Đây là một trường hợp “mở rộng” nhỏ, kiểm tra nếu số nhập vào là 0. Theo quy ước, 0 cũng được xem là số chính phương \(0^2 = 0\).
* \(print(“0 là số chính phương.”)\): In thông báo tương ứng cho trường hợp số 0.
* \(else:\) (trong câu lệnh \(if so_nhap > 0:\) và \(elif so_nhap == 0:\)): Nếu \(so_nhap\) không lớn hơn 0 và cũng không bằng 0, thì nó phải là số âm.
* \(print(“Số bạn nhập không phải là số nguyên dương theo yêu cầu.”)\): In thông báo rằng số nhập vào không thỏa mãn yêu cầu là số nguyên dương.
Ví dụ minh họa chạy chương trình:
Kịch bản 1: Nhập số chính phương
Nhập vào một số nguyên dương X: 25
25 là số chính phương.
Giải thích: \(math.sqrt(25)\) trả về \(5.0\). \(int(5.0)\) là \(5\). \(5.0 == 5\) là đúng, nên in ra kết quả là số chính phương.
Kịch bản 2: Nhập số không phải chính phương
Nhập vào một số nguyên dương X: 10
10 không phải là số chính phương.
Giải thích: \(math.sqrt(10)\) trả về khoảng \(3.162277…\). \(int(3.162277…)\) là \(3\). \(3.162277… == 3\) là sai, nên in ra kết quả là không phải số chính phương.
Kịch bản 3: Nhập số 0
Nhập vào một số nguyên dương X: 0
0 là số chính phương.
Kịch bản 4: Nhập số âm
Nhập vào một số nguyên dương X: -4
Số bạn nhập không phải là số nguyên dương theo yêu cầu.
Vậy là chúng ta đã cùng nhau hoàn thành bài tập kiểm tra tính chính phương của một số nguyên dương rồi đấy các em. Các em hãy tự mình gõ lại chương trình này và thử với nhiều trường hợp khác nhau để hiểu sâu hơn nhé! Nếu có bất kỳ thắc mắc nào, đừng ngần ngại hỏi cô. Chúc các em học tốt!
– Số chính phương là số có bình phương căn bậc là số nguyên và bằng chính nó
– VD : xét số 9
+ \(9^2 =81\)
+ \(\sqrt{81}=9\)
⇒ Số 9 là số chính phương .
⇒ Code Python :
from math import sqrt
n = int(input(“Nhập số n: “))
kt = sqrt(n)
if kt * kt == n :
print(n,”là số chính phương”)
else :
print(n,”không là số chính phương.”)
\(+\) Nếu có một số nguyên bình phương \(= X\) thì \(X\) là số chính phương.
\(=>\) Nếu \(\sqrt{x}\) là một số nguyên thì \(X\) là số chính phương.
\(+\) Sử dụng math.sqrt() để tính căn bậc 2.
\(+\) Sử dụng phương thức float().is_integer() để kiểm tra xem một số thực có phải số nguyên hay không.
\(\\\)
\(\bb\text{Code Python:}\)
from math import sqrt
x = int(input())
if (sqrt(x).is_integer()):
print(x, ‘la so chinh phuong’)
else:
print(x, ‘khong phai so chinh phuong’)
\(\\\)
\(@Daoanhviet96\)