Nhập file input và xác định loại tam giác

Bài tập Python tự luyện

5.0 (2 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 23:10 11-11-2021 11.634 lượt xem 10 bình luận
Tác giả/Dịch giả: TrongPhuCBL49 Kteam
Học nhanh

Danh sách bài học

Nhập file input và xác định loại tam giác

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

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Nhập file input và xác định loại tam giác dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!

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!


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.

Nội dung bài viết

Tác giả/Dịch giả

Có niềm đam mê với thuật toán và tư duy logic. Là người cầu toàn, thích lập kế hoạch và tối ưu mọi vấn đề trong cuộc sống. Mong muốn luôn sống vui vẻ yêu đời =))) không bon chen.

Sở thích cá nhân: Đàn ca nhảy múa và đi du lịch.


Khóa học

Bài tập Python tự luyện

Serial dành cho những bạn cần luyện tập phương pháp, tu duy lập trình. Làm quen với các bài toán trong lập trình, ngẫu nhiên từ cơ bản đến nâng cao. Nội dung Serial này được phân tách chi tiết nhất có thể, nhằm giúp các bạn dễ hiểuthực hành được ngay.

Bạn nên tự làm lại từng bài tập trên video để có kết quả tốt nhất. Cùng Kteam "Luyện tập - Thử thách - không ngại khó"

Đánh giá

TankAnk đã đánh giá 11:44 10-08-2021

BaoLong2006 đã đánh giá 10:08 07-08-2021

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
kakavan đã bình luận 11:00 29-05-2024

try:
    with open("Bai2.9.inp",'r') as file_inp:
        a,b,c = map(float,file_inp.read().split())

    con1 = a*a == b*b + c*c or b*b == a*a + c*c or c*c == a*a + b*b
    con2 = a == b == c
    con3 = a == b or a == c or b == c
    con4 = a*a > b*b + c*c or b*b > a*a + c*c or c*c > a*a + b*b

    if a < 0 or b < 0 or c < 0:
        noti = "Các cạnh của tam giác phải lớn hơn 0!"
    elif a + b > c and a + c > b and b + c > a:
        if con1:
            triangle = 'vuông'
        elif con2:
            triangle = 'đều'
        elif con3:
            triangle = "cân"
        elif con4:
            triangle = 'tù'
        else:
            triangle = "nhọn"
        noti = "{}, {}, {} là ba cạnh của 1 tam giác {}".format(a,b,c,triangle)
    else:
        noti = "{}, {}, {} không phải là ba cạnh của 1 tam giác".format(a,b,c)
except FileNotFoundError:
    noti = "Không tìm thấy file input!"
except:
    noti = "Định dạng đầu vào không hợp lệ!"

with open("Bai2.9.out",mode='w+',encoding='utf-8') as file_out:
    file_out.write(noti)
    file_out.seek(0)
    đọc = file_out.read()
    print(đọc)

TayMonKhanh đã bình luận 01:42 29-05-2023

cờ=False

fileout=open('Bai2.9.out','w',encoding='utf-8')

try:

    filein=open('Bai2.9.inp','r')

    a,b,c= map(float,filein.read().split())

    cờ=True

except FileNotFoundError:

    fileout.write('Không tìm thấy file input')

except:

    fileout.write('Định dạng đầu vài không hợp lệ')

if cờ:

    if a>0 and b>0 and c>0 and a+b>c and a+c>b and b+c>a:

        if a==b or a==c or b==c:

            ketqua='là ba cạnh của tam giác cân'

        elif a==b==c:

            ketqua='là ba cạnh của tam giác đều'

        elif a*a==b*b+c*c or a*a+b*b==c*c or b*b==a*a+c*c:

            ketqua='là ba cạnh của tam giác vuông'

        elif a*a>b*b+c*c or c*c>a*a+b*b or b*b>a*a+c*c:

            ketqua='là ba cạnh của tam giác tù'

        elif a*a<b*b+c*c or c*c<a*a+b*b or b*b<a*a+c*c:

            ketqua='là ba cạnh của tam giác nhọn'

    elif a<=0 or b<=0 or c<=0:

        ketqua='phải là số dương'

    else:

        ketqua='không phải là cạnh của tam giác'

    fileout.write(f'{a},{b},{c} '+ ketqua)

 

bachhoclaptrinhdayquyettam :)) đã bình luận 22:45 16-02-2023
try:
	with open("input.inp", "r") as f_in:
		a,b,c = map(float, f_in.readline().rstrip("\n").split())

	with open("output.out", "w") as f_out:
		if a<= 0 or b<= 0 or c<=0:
			f_out.write("vui long nhap so duong")
		elif a+b-c>0 and a-b+c>0 and -a+b+c>0:
			if a==b==c:
				f_out.write("tg deu")
			elif a==b or a==c or b==c:
				f_out.write("tg can")
			elif a**2 + b**2 - c**2 ==0 or a**2 - b**2 + c**2 ==0 or - a**2 + b**2 + c**2 ==0:
				if a==b or a==c or b==c:
					f_out.write("tg vuong can")
				else:
					f_out.write("tg vuong")
			else:
				if a**2 + b**2 - c**2 <0 or a**2 - b**2 + c**2 <0 or - a**2 + b**2 + c**2 <0:
					f_out.write("tg tu")
				else:
					f_out.write("tg nhon")
		else:
			f_out.write("khong phai tg")
except FileNotFoundError:
	with open("output.out", "w") as f_out:
		f_out.write("khong thay file")

 

mikewang đã bình luận 18:31 01-02-2023
FileStatus = '' # Tình trạng file
tamgiacStatus = '' # Tình trạng 3 cạnh của 1 tam giác
txt = '' # Text được đưa vào file output

# Mở file
try:
    with open('Bai2.9.inp', mode = 'r') as InFile:
        TheFile = InFile.read().split()
        InFile.close()
        FileStatus = 'Valid' # Tiếp tục ở line 15
except:
    txt = 'Khong tim thay file input!'

# Tình trạng 3 cạnh của 1 tam giác
if FileStatus == 'Valid':
    try:
        a,b,c = map(float,TheFile)
        if a > 0 and b > 0 and c > 0:
            tamgiacStatus = 'abclonhon0'
        else:
            txt = 'Cac canh cua tam giac phai lon hon 0!'
    except:
        txt = 'Dinh dang dau vao khong hop le!'

# Các loại tam giác
if tamgiacStatus == 'abclonhon0':
    if a + b > c and a + c > b and b + c > a: 
        if a*a == b*b + c*c or b*b == a*a + c*c or c*c == b*b + a*a:
            loaitamgiac = 'vuông'
        elif a == b and b == c and c == a:
            loaitamgiac = 'đều'
        elif a == b or b == c or a == c:
            loaitamgiac = 'cân'
        elif a*a>(b*b)+(c*c) or b*b>(a*a)+(c*c) or c*c>(a*a)+(b*b):
            loaitamgiac = 'tù'
        else:
            loaitamgiac = 'nhọn'
        txt = '{}, {}, {} la ba canh cua mot tam giac {}'.format(a,b,c,loaitamgiac)
    else:
        txt = '{}, {}, {} không phải là 3 cạnh của 1 tam giác'.format(a,b,c)

# Output được viết vào file
print(txt)
with open('Bai2.9.out', mode='w') as OutFile:
    OutFile.write(txt)
    OutFile.close()

 

NhuwLikesVeggies đã bình luận 10:11 04-07-2022
try:
	with open("Input.txt", "r") as in_file:
		data = in_file.read().rstrip("\n")
	a, b, c = map(float, data.split())
	if (a <= 0) or (b <= 0) or (c <= 0):
		report = "Cach canh cua tam giac phai lon hon 0!"
	elif (a + b > c) and (a + c > b) and (b + c > a):
		if (a == b) and (b == c):
			tri_type = "deu"
		elif (a == b) or (a == c) or (b == c):
			tri_type = "can"
		elif (a*a + b*b == c*c) or (a*a + c*c == b*b) or (b*b + c*c == a*a):
			tri_type = "vuong"
		elif (a*a + b*b < c*c) or (a*a + c*c < b*b) or (b*b + c*c < a*a):
			tri_type = "tu"
		else:
			tri_type = "nhon"
		report = "{} {} {} la 3 canh cua mot tam giac {}".format(a, b, c, tri_type)
	else:
		report = "{} {} {} khong phai la 3 canh cua mot tam giac".format(a, b, c)
except FileNotFoundError:
	report = "Khong tim thay file Input"
except:
	report = "Dinh dang dau vao khong hop le!"
with open("Output.txt", "w") as out_file:
	out_file.write(report)
in_file.close()
out_file.close()

 

Không có video.