Hướng dẫn dùng file_input python python

Bài toán cần xử lý

Viết chương trình nhập vào từ file input {Tên}, {Tuổi hiện tại} và xuất ra file output theo mẫu sau: “Vao 20 nam nua, tuoi cua {Tên} se la {Tuổi cần tìm}”. 


Kiến thức cần có

  • Mở file, đóng file
  • Câu lệnh with làm việc với file trong Python
  • Hàm đọc file readline() và hàm ghi file write()
  • Định dạng chuỗi đầu ra trong Python
  • Các phương thức xử lý chuỗi: rstrip()
  • Biến và kiểu dữ liệu

Định dạng đầu vào

Dữ liệu đầu vào lưu trữ trong file "Bai1.10.inp"

Gồm hai dòng:

  • Dòng đầu tiên chứa {Tên}
  • Dòng thứ hai chứa số nguyên dương {Tuổi hiện tại}

Định dạng đầu ra

Dữ liệu đầu ra lưu trữ trong file "Bai1.10.out"

Gồm một dòng duy nhất hiển thị như sau:

  • Vao 20 nam nua, tuoi cua {Ten} se la {Tuoi can tim}

Ví dụ

  • Input 1: Bai1.10.inp
John
10
  • Output 1: Bai1.10.out
Vao 20 nam nua, tuoi cua John se la 30
  • Input 2: Bai1.10.inp
Kteam
5
  • Output 2: Bai1.10.out
Vao 20 nam nua, tuoi cua Kteam se la 25

Gợi ý

  • Sử dụng câu lệnh with với hàm open() mode='r' nhằm mở file để đọc.
  • Dùng hàm readline() để đọc dữ liệu dòng đầu tiên từ file input và lưu vào biến
  • Sử dụng phương thức rstrip() để loại bỏ ký tự '\n' ở bên phải vì giá trị nhận được khi sử dụng hàm readline() bao gồm cả ký tự xuống dòng.
  • Tiếp tục dùng hàm readline() để đọc dòng giá trị thứ hai và lưu vào biến.
  • Chuyển giá trị mới nhận được sang kiểu số nguyên vì giá trị nhận được từ hàm readline() mặc định sẽ ở kiểu chuỗi.
  • Sử dụng câu lệnh with với hàm open() mode='w' nhằm mở file để ghi.
  • Dùng hàm write() kết hợp với hàm format() để hiển thị kết quả theo mẫu.

Code mẫu

#Mo file voi mode='r' de doc file
with open('Bai1.10.inp', 'r') as fileInp:

   #Doc 1 dong du lieu tu file va luu vao bien ten
   #Su dung phuong thuc rstrip de loai bo ky tu xuong dong '\n'
   ten = fileInp.readline().rstrip('\n')

   #Doc 1 dong du lieu tu file va luu vao bien tuoiHienTai
   tuoiHienTai = int(fileInp.readline())

#Mo file voi mode='w' de ghi file
with open('Bai1.10.out', 'w') as fileOut:

   #Ghi noi dung vao file theo mau
   fileOut.write('Vao 20 nam nua, tuoi cua {} se la {}'.format(ten, tuoiHienTai + 20))

Kết luận

Trong bài này, Kteam đã hướng dẫn bạn cách viết chương trình nhập vào từ file input {Tên}, {Tuổi hiện tại} và xuất ra file output theo mẫu sau: “Vao 20 nam nua, tuoi cua {Tên} se la {Tuổi cần tìm}”. 

Ở bài tiếp theo, chúng ta sẽ cũng nhau học cách viết chương trình NHẬP TỪ FILE INPUT {TÊN}, {TUỔI HIỆN TẠI} VÀ XUẤT RA FILE OUTPUT THEO MẪU (CÓ XỬ LÝ ĐỊNH DẠNG ĐẦU VÀO).

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên " Luyện tập - Thử Thách - Không ngại khó!"


Tải xuống

Project

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!

Hướng dẫn dùng file_input python python


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Bài toán cần xử lý

Viết chương trình nhập vào từ file input ba số a, b, c. Nếu a, b, c là ba cạnh của một tam giác thì kiểm tra và xuất ra file output thông báo loại của tam giác (Có xử lý ngoại lệ đầu vào).


Kiến thức cần có

  • Mở file, đóng file
  • Câu lệnh with làm việc với file trong Python
  • Hàm đọc file readline() và hàm ghi file write()
  • Cấu trúc rẽ nhánh trong Python
  • Các phương thức xử lý chuỗi: rstrip(), join()
  • Biến và kiểu dữ liệu
  • Xử lý ngoại lệ (Exception Handling)

Định dạng đầu vào

Dữ liệu đầu vào lưu trữ trong file "Bai2.9.inp"

Gồm một dòng duy nhất chưa ba số a, b, c cách nhau bởi khoảng trắng.


Định dạng đầu ra

Dữ liệu đầu ra lưu trữ trong file "Bai2.9.out"

Gồm một dòng duy nhất hiển thị như sau:

Nếu a, b, c là ba cạnh của một tam giác: {a}, {b}, {c} la ba canh cua mot tam giac {loai}

Nếu a, b, c không là ba cạnh của một tam giác: {a}, {b}, {c} khong phai la ba canh cua mot tam giac

Với:

  • {a}, {b}, {c} là ba số nhập vào từ bàn phím
  • {loai} thuộc một trong các loại ['vuong', 'can', 'deu', 'tu', 'nhon']

Lưu ý:  Nếu a, b, c là số âm thì xuất thông báo: Cac canh cua tam giac phai lon hon 0!       

               Nếu file input không tồn tại thì xuất thông báo: Khong tim thay file input!

              Nếu input nằm ngoài định dạng đầu vào thì xuất thông báo: Dinh dang dau vao khong hop le!


Ví dụ

  • Input 1: Bai2.9.inp
10 15.6 20.55
  • Output 1: Bai2.9.out
10, 15.6, 20.55 la ba canh cua mot tam giac tu
  • Input 2: Bai2.9.inp
2 6 5.7
  • Output 2: Bai2.9.out
2.0, 6.0, 5.7 la ba canh cua mot tam giac nhon
  • Input 3: Bai2.9.inp
5.7 8 5.7
  • Output 3: Bai2.9.out
5.7, 8.0, 5.7 la ba canh cua mot tam giac can
  • Input 4: Bai2.9.inp
3 4 5
  • Output 4: Bai2.9.out
3.0, 4.0, 5.0 la ba canh cua mot tam giac vuong
  • Input 5: Bai2.9.inp
12.75 12.75 12.75
  • Output 5: Bai2.9.out
12.75, 12.75, 12.75 la ba canh cua mot tam giac deu
  • Input 6: Bai2.9.inp
10 2 5.5
  • Output 6: Bai2.9.out
10, 2, 5.5 khong phai la ba canh cua mot tam giac
  • Input 7: Bai2.9.inp
-5.4 0 7
  • Output 7: Bai2.9.out
Cac canh cua tam giac phai lon hon 0!
  • Input 8: File Bai2.9.inp không tồn tại
  • Output 8: Bai2.9.out
Khong tim thay file input!
  • Input 9: Bai2.9.inp
Kteam
  • Output 9: Bai2.9.out
Dinh dang dau vao khong hop le!

Gợi ý

  • Sử dụng cấu trúc Xử lý ngoại lệ để xử lý các trường hợp gây ra lỗi
  • Đặt toàn bộ chương trình trong khối try.
  • Sử dụng câu lệnh with với hàm open() mode='r' nhằm mở file để đọc.
  • Dùng hàm readline() để đọc dữ liệu dòng đầu tiên từ file input và lưu vào biến
  • Sử dụng phương thức rstrip() để loại bỏ ký tự '\n' ở bên phải vì giá trị nhận được khi sử dụng hàm readline() bao gồm cả ký tự xuống dòng.
  • Dùng hàm map(), float và hàm split() để nhận và ép kiểu dữ liệu của ba cạnh a, b, c sang số thực.
  • Dùng cấu trúc rẽ nhánh if … else với điều kiện phù hợp để giải quyết yêu cầu của bải toán.

Thuật toán:

  • Ba cạnh a, b, c của một tam giác phải thỏa mãn điều kiện là tổng hai cạnh bất kỳ luôn lớn hơn cạnh còn lại. Tức là a+b>c và a+c>b và b+c>a.
  • Tam giác vuông là tam giác có bình phương một cạnh bằng tổng bình phương hai cạnh còn lại. Ta kiểm tra điều kiện: a*a==b*b+c*c hoặc b*b==a*a+c*c hoặc c*c== a*a+b*b
  • Tam giác đều là tam giác có ba cạnh bằng nhau. Ta kiểm tra điều kiện a==b và b==c
  • Tam giác cân là tam giác có hai cạnh bằng nhau. Ta kiểm tra điều kiện: a==b hoặc a==c hoặc b==c
  • Tam giác tù là tam giác có một góc lớn hơn 90 độ. Từ điều kiện kiểm tra tam giác vuông, ta suy ra điều kiện để là tam giác tù là: a*a>b*b+c*c hoặc b*b>a*a+c*c hoặc c*c >a*a+b*b
  • Trường hợp còn lại sẽ là tam giác nhọn.
  • Lỗi sẽ phát sinh ở lệnh open() nếu file input không tồn tại. Dùng lệnh except bắt lỗi FileNotFoundError và xử lý.
  • Lỗi sẽ phát sinh ở lệnh ép kiểu nếu định dạng đầu vào không hợp lệ. Dùng lệnh except để bắt lỗi và xử lý.
  • Sử dụng câu lệnh with với hàm open() mode='w' nhằm mở file để ghi thông báo lỗi

Code mẫu

#Khoi lenh co the phat sinh loi
try:
   #Mo file voi mode='r' de doc file
   with open('Bai2.9.inp', 'r') as fileInp:
       #Doc dong du lieu dau tien tu file
       #Su dung phuong thuc rstrip de loai bo ky tu xuong dong '\n'
       dongDauTien = fileInp.readline().rstrip('\n')

   #Su dung ham map() va float de ep kieu du lieu sang so thuc
   a, b, c = map(float, dongDauTien.split())

   #Dung cau lenh re nhanh de kiem tra dieu kien cac tam giac
   #Xu ly truong hop du lieu a, b, c am
   if a<=0 or b<=0 or c<=0:
       thongBao = "Cac canh cua tam giac phai lon hon 0!"
   #Kiem tra dieu kien la ba canh cua tam giac
   elif a+b>c and a+c>b and b+c>a:
       #Kiem tra tam giac vuong
       if a*a==b*b+c*c or b*b==a*a+c*c or c*c== a*a+b*b:
           loaiTamGiac = 'vuong'
       #Kiem tra tam giac deu
       elif a==b and b==c:
           loaiTamGiac = 'deu'
       #Kiem tra tam giac can
       elif a==b or a==c or b==c:
           loaiTamGiac = 'can'
       #Kiem tra tam giac tu
       elif a*a > b*b+c*c or b*b > a*a+c*c or c*c > a*a+b*b:   
           loaiTamGiac = 'tu'
       #Cac truong hop con lai la tam giac nhon
       else:
           loaiTamGiac = 'nhon'
       #Thay doi thong bao theo yeu cau
       thongBao = "{}, {}, {} la ba canh cua mot tam giac {}".format(a, b, c, loaiTamGiac)
   else:
       thongBao = "{}, {}, {} khong phai la ba canh cua mot tam giac".format(a, b, c)

#Khoi lenh duoc thuc thi khi xay ra loi "Khong tim thay file input"
except FileNotFoundError:
   thongBao = "Khong tim thay file input!"

#Khoi lenh duoc thuc thi khi xay ra loi "Sai dinh dang dau vao"
except:
   thongBao = "Dinh dang dau vao khong hop le!"

#Mo file voi mode='w' de ghi file
with open('Bai2.9.out', 'w') as fileOut:
   #Xuat thong bao ra file out
   fileOut.write(thongBao)

Kết luận

Trong bài này, Kteam đã hướng dẫn bạn cách viết chương trình nhập vào từ file input ba số a, b, c. Nếu a, b, c là ba cạnh của một tam giác thì kiểm tra và xuất ra file output thông báo loại của tam giác (Có xử lý ngoại lệ đầu vào).

Ở bài tiếp theo, chúng ta sẽ cũng nhau học cách GIẢI PHƯƠNG TRÌNH BẬC NHẤT VÀ BẬC HAI VỚI CÁC HỆ SỐ ĐƯỢC NHẬP TỪ FILE INPUT (CÓ XỬ LÝ NGOẠI LỆ ĐẦU VÀO)

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên " Luyện tập - Thử Thách - Không ngại khó!"


Tải xuống

Project

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!

Hướng dẫn dùng file_input python python


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.