👂 Nhận Thông Tin - Dạy Python Lắng Nghe
🎧 Ví Dụ Dễ Hiểu
Giống như dạy con rắn pet không chỉ biết "nói" mà còn biết "lắng nghe" và phản hồi với những gì bạn nói. Python sẽ học cách đợi, nghe, hiểu và trả lời người dùng một cách thông minh!
🤔 Tại Sao Python Cần Biết Lắng Nghe?
Cho đến giờ, Python chỉ biết "nói" (print). Giờ chúng ta sẽ dạy nó:
- 👂 Lắng nghe người dùng gõ thông tin
- 🤝 Tương tác hai chiều với con người
- 🎯 Phản hồi dựa trên input nhận được
- 🔄 Tạo chương trình động thay vì chỉ hiển thị text cố định
🎯 Hàm input() Cơ Bản
📝 Cú Pháp Đơn Giản
# Cách cơ bản nhất
name = input("Tên bạn là gì? ")
print(f"Xin chào {name}!")
Kết quả:
Tên bạn là gì? Minh
Xin chào Minh!
🔍 input() Hoạt Động Như Thế Nào?
# Bước 1: Python hiển thị câu hỏi
# Bước 2: Python dừng lại và đợi
# Bước 3: Người dùng gõ và nhấn Enter
# Bước 4: Python lưu thông tin vào biến
# Bước 5: Tiếp tục chạy chương trình
name = input("Nhập tên: ") # Python đợi ở đây
print(f"Tên đã nhận: {name}") # Chạy sau khi có input
💡 Điều Quan Trọng
input() luôn trả về STRING (chuỗi text), dù người dùng nhập số hay chữ. Nếu cần số, phải convert!
🔢 Nhận Các Loại Dữ Liệu Khác Nhau
📝 Nhận Text (String)
# Thông tin cá nhân
full_name = input("Họ tên đầy đủ: ")
hometown = input("Quê quán: ")
hobby = input("Sở thích: ")
print(f"\n🎭 THÔNG TIN CỦA BẠN:")
print(f"👤 Tên: {full_name}")
print(f"🏠 Quê: {hometown}")
print(f"❤️ Thích: {hobby}")
🔢 Nhận Số (Numbers)
# ❌ Sai - input() trả về string
age = input("Tuổi của bạn: ")
next_year = age + 1 # Lỗi! Không thể cộng string với số
# ✅ Đúng - Convert string thành int
age = int(input("Tuổi của bạn: "))
next_year = age + 1
print(f"Năm sau bạn sẽ {next_year} tuổi")
# Số thập phân
height = float(input("Chiều cao (m): "))
weight = float(input("Cân nặng (kg): "))
bmi = weight / (height ** 2)
print(f"BMI của bạn: {bmi:.2f}")
✅ Nhận True/False (Boolean)
# Cách 1: So sánh string
likes_python = input("Bạn có thích học Python không? (có/không): ")
if likes_python.lower() == "có":
print("🎉 Tuyệt vời! Python sẽ giúp bạn rất nhiều!")
else:
print("😊 Không sao, có thể bạn sẽ thích sau!")
# Cách 2: Chuyển thành boolean
has_girlfriend = input("Bạn có bạn gái/trai không? (y/n): ").lower()
is_in_relationship = has_girlfriend in ['y', 'yes', 'có', 'có chứ']
print(f"Tình trạng: {'Đã có người yêu' if is_in_relationship else 'Độc thân'}")
🛡️ Validation - Kiểm Tra Dữ Liệu
🔍 Kiểm Tra Số Hợp Lệ
🔍 Kiểm Tra Số Hợp Lệ
# Cách 1: Sử dụng try-except (Khuyến nghị)
def input_age():
while True:
try:
age = int(input("Nhập tuổi của bạn: "))
if age < 0:
print("❌ Tuổi không thể âm! Thử lại.")
continue
elif age > 150:
print("❌ Tuổi quá lớn! Thử lại.")
continue
return age
except ValueError:
print("❌ Vui lòng nhập số nguyên! Thử lại.")
# Sử dụng
age = input_age()
print(f"✅ Tuổi hợp lệ: {age}")
🔤 Kiểm Tra Text Hợp Lệ
def input_name():
while True:
name = input("Nhập tên của bạn: ").strip()
if not name: # Kiểm tra rỗng
print("❌ Tên không được để trống!")
continue
if len(name) < 2:
print("❌ Tên phải có ít nhất 2 ký tự!")
continue
if not name.replace(" ", "").isalpha():
print("❌ Tên chỉ được chứa chữ cái!")
continue
return name.title() # Viết hoa chữ cái đầu
# Sử dụng
name = input_name()
print(f"✅ Tên hợp lệ: {name}")
📧 Kiểm Tra Email
import re
def input_email():
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
while True:
email = input("Nhập email: ").strip().lower()
if not email:
print("❌ Email không được để trống!")
continue
if re.match(pattern, email):
return email
else:
print("❌ Email không hợp lệ! (vd: [email protected])")
# Sử dụng
email = input_email()
print(f"✅ Email hợp lệ: {email}")
🎮 Tương Tác Nâng Cao
🔄 Menu Lựa Chọn
def display_menu():
print("\n🎯 MENU CHÍNH")
print("=" * 30)
print("1. 📊 Tính BMI")
print("2. 🎲 Chơi game đoán số")
print("3. 📝 Ghi chú cá nhân")
print("4. ❌ Thoát")
print("=" * 30)
def select_menu():
while True:
display_menu()
choice = input("Chọn chức năng (1-4): ").strip()
if choice in ['1', '2', '3', '4']:
return int(choice)
else:
print("❌ Lựa chọn không hợp lệ! Vui lòng chọn 1-4.")
# Sử dụng
while True:
selection = select_menu()
if selection == 1:
print("🔄 Đang tính BMI...")
elif selection == 2:
print("🎲 Bắt đầu game...")
elif selection == 3:
print("📝 Mở ghi chú...")
elif selection == 4:
print("👋 Tạm biệt!")
break
💬 Chatbot Đơn Giản
import random
def chatbot():
print("🤖 Xin chào! Tôi là Python Bot!")
print("💬 Hãy nói chuyện với tôi (gõ 'bye' để thoát)")
responses = {
"xin chào": ["Xin chào bạn! 😊", "Chào bạn nhé! 👋", "Hello! 🌟"],
"tên": ["Tôi là Python Bot! 🤖", "Tôi tên là Bot, còn bạn?", "Bot là tên tôi!"],
"tuổi": ["Tôi vừa được tạo ra! 🆕", "Tôi còn rất trẻ!", "Tuổi? Tôi là AI mà! 😄"],
"python": ["Python tuyệt vời! 🐍", "Tôi yêu Python!", "Python là ngôn ngữ tốt nhất!"],
"bye": ["Tạm biệt! 👋", "Bye bye! 🌟", "Hẹn gặp lại! 😊"]
}
while True:
user_input = input("\n👤 Bạn: ").lower().strip()
if user_input == "bye":
print(f"🤖 Bot: {random.choice(responses['bye'])}")
break
# Tìm từ khóa trong input
found = False
for keyword, reply_list in responses.items():
if keyword in user_input:
print(f"🤖 Bot: {random.choice(reply_list)}")
found = True
break
if not found:
default_replies = [
"Thú vị quá! Kể thêm đi! 🤔",
"Tôi chưa hiểu lắm... 😅",
"Wow, điều đó thật tuyệt! 🎉",
"Hm, bạn có thể nói rõ hơn không? 🤷♂️"
]
print(f"🤖 Bot: {random.choice(default_replies)}")
# Chạy chatbot
chatbot()
🎯 Dự Án Thực Hành
📋 Dự Án 1: Hồ Sơ Cá Nhân
def create_personal_profile():
print("🌟 TẠO HỒ SƠ CÁ NHÂN 🌟")
print("=" * 40)
# Thu thập thông tin
full_name = input("👤 Họ tên: ").title()
age = int(input("🎂 Tuổi: "))
hometown = input("🏠 Quê quán: ").title()
occupation = input("💼 Nghề nghiệp: ")
hobby = input("❤️ Sở thích: ")
description = input("📝 Mô tả bản thân (1 câu): ")
# Hiển thị hồ sơ đẹp
print("\n" + "🌟" * 50)
print(f"{'📋 HỒ SƠ CÁ NHÂN':^50}")
print("🌟" * 50)
print(f"👤 Tên: {full_name}")
print(f"🎂 Tuổi: {age} tuổi")
print(f"🏠 Quê: {hometown}")
print(f"💼 Nghề: {occupation}")
print(f"❤️ Thích: {hobby}")
print(f"📝 Giới thiệu: {description}")
print(f"📅 Năm sinh: {2024 - age}")
print("🌟" * 50)
# Lưu vào file (nâng cao)
with open("profile.txt", "w", encoding="utf-8") as file:
file.write(f"Hồ sơ của {full_name}\n")
file.write(f"Tuổi: {age}\n")
file.write(f"Quê: {hometown}\n")
file.write(f"Nghề: {occupation}\n")
file.write(f"Sở thích: {hobby}\n")
file.write(f"Mô tả: {description}\n")
print("💾 Đã lưu hồ sơ vào file 'profile.txt'")
# Chạy dự án
create_personal_profile()
🧮 Dự Án 2: Máy Tính Cá Nhân
def personal_calculator():
print("🧮 MÁY TÍNH CÁ NHÂN 🧮")
while True:
print("\n📊 Các phép tính:")
print("1. ➕ Cộng")
print("2. ➖ Trừ")
print("3. ✖️ Nhân")
print("4. ➗ Chia")
print("5. 🔢 Lũy thừa")
print("6. ❌ Thoát")
choice = input("\nChọn phép tính (1-6): ").strip()
if choice == '6':
print("👋 Tạm biệt!")
break
if choice not in ['1', '2', '3', '4', '5']:
print("❌ Lựa chọn không hợp lệ!")
continue
try:
a = float(input("Nhập số thứ nhất: "))
b = float(input("Nhập số thứ hai: "))
if choice == '1':
result = a + b
print(f"📊 {a} + {b} = {result}")
elif choice == '2':
result = a - b
print(f"📊 {a} - {b} = {result}")
elif choice == '3':
result = a * b
print(f"📊 {a} × {b} = {result}")
elif choice == '4':
if b == 0:
print("❌ Không thể chia cho 0!")
else:
result = a / b
print(f"📊 {a} ÷ {b} = {result}")
elif choice == '5':
result = a ** b
print(f"📊 {a}^{b} = {result}")
except ValueError:
print("❌ Vui lòng nhập số hợp lệ!")
# Chạy máy tính
personal_calculator()