뭔 쌉소린지 기억이안난다... 다른 예제로 4개 해야겠다..
사용자로부터 숫자를 입력받아서 두 숫자를 나누는 프로그램입니다. 그러나 사용자가 0을 입력하거나 숫자가 아닌 값을 입력하는 경우에는 예외를 처리하시오
while True :
try:
x = int(input('숫자 1입력'))
y = int(input('숫자 2입력'))
print(f'{x} / {y} = {x/y}')
break
except ValueError :
print('숫자를 입력하세요')
except ZeroDivisionError :
print('0으로는 나눌 수 없습니다.')
사용자로부터 파일 이름을 입력받아 해당 파일을 열고 내용을 출력하는 프로그램입니다. 그러나 파일이 존재하지 않는 경우와 파일을 읽는 도중에 예외가 발생하는 경우에는 예외를 처리하여 오류 없이 프로그램이 실행되도록 합니다.
while True :
try:
fileName = input('파일 이름을 입력하세요:')
with open(fileName, 'r') as file:
contents = file.read()
print(contents)
break
except FileNotFoundError :
print('파일이 존재 하지 않습니다.')
except Exception as e :
print('파일을 읽는 중 에러가 발생했습니다 :',e)
처음에는
while True :
try:
file = open('C:/pythonex/project/txt.txt','r')
file.read()
file.close()
except FileNotFoundError:
print('파일을 찾을 수 없습니다')
except FileExistsError :
print('파일이 존재 하지 않습니다.')
이렇게 했음 여기서 문제는 뭐였냐면
fileName = input('파일 이름을 입력하세요:')
with open(fileName, 'r') as file:
contents = file.read()
print(contents)
이렇게 파일 경로 받고
파일 여는 변수 넣고
파일 읽어보라하고
파일 내용 도출하라하는
총 4개의 단계로 나누는거임
그래서 with구문에서 에러가 생긴다 하면 file not found Error를 보내는거고,
file.read에서 에러가 생긴다 하면은 아래로 내려가서 exception as e 를 내보내는것.
사용자로부터 여러 개의 숫자를 입력받아 평균을 계산하는 프로그램을 작성하되, 잘못된 입력이 있을 경우 해당 입력을 건너뛰고 평균을 계산하는 프로그램입니다.(숫자를 입력하고 결과를 확인할 때마다 입력했던 숫자들을 보여주는 것을 추가 요청함)
from math import *
numbers = []
count = 0
total = 0
while True :
try:
num = int(input('숫자 입력(종료시 0)'))
if num == 0:
print('종료합니다.')
break
count += 1
total += num
numbers.append(num)
result = total/count
print(f'입력한 값들의 평균 : {result}')
except Exception as e :
print('에러가 발생했습니다', e)
print('해당 내용을 건너 뜁니다')
except ValueError:
print('올바른 숫자를 입력하세요')
finally:
print('현재까지 입력된 숫자들 :', numbers)
여기에 더 나아가서
finally:
if count > 0:
result = total / count
print('입력한 값들의 평균:', result)
else:
print('입력된 숫자가 없습니다.')
print('현재까지 입력된 숫자들:', numbers)
마지막을 이렇게 하라는겨
왜그런가~ 하고 봤더니
숫자 단한번도 입력안해서 건너 뛰면
입력된 숫자가 없다고 말해야해서 그런거였음
키야...
더 나아가서 if 바로 아래로 숫자가 없는걸 넣으면 안되고,
숫자가 있을떄 평균을낼 수 있을때 꺼를 넣어줘야함
파일에서 숫자를 읽어와 합계를 계산하는 프로그램을 작성하세요. 파일에는 한 줄에 하나의 숫자가 들어 있으며, 파일의 끝에는 빈 줄이 있을 수 있습니다. 파일이 존재하지 않는 경우에는 예외를 처리하고, 숫자를 읽을 수 없는 경우에도 예외를 처리하세요. 프로그램은 합계를 계산하여 출력해야 합니다.
<주의 사항>
입력
파일명 : numbers.txt
10
20
30
출력
숫자 합계: 60
count = 0
total = 0
while True:
try:
fileName = input('파일명을 입력하세요: ')
with open(fileName, 'w') as file:
print("새 파일을 생성하고 숫자를 입력하세요. 입력을 마치려면 빈 줄을 입력하세요.")
while True:
line = input('숫자 입력: ')
if line == '':
break
try:
number = int(line)
total += number
count += 1
file.write(str(number) + '\n')
except ValueError:
print('올바른 숫자를 입력하세요.')
print(f'숫자 합계: {total}')
break
except FileNotFoundError:
print('파일이 존재하지 않습니다')
except Exception as e:
print('에러가 발생하였습니다:', e)
고생 꽤나 했네
gpt샊기도 계속 틀리던데...?
그래서 한문제 더 들어가보자구
사용자로부터 두 개의 파일명을 입력받아, 첫 번째 파일을 읽고 두 번째 파일에 그 내용을 복사하는 프로그램을 작성해보세요. 단, 파일이 존재하지 않는 경우에는 "파일을 찾을 수 없습니다"라는 메시지를 출력하고, 파일을 복사하는 도중에 에러가 발생한 경우에는 "파일 복사 중에 에러가 발생하였습니다"라는 메시지를 출력해야 합니다.
요구 사항:
fileName = input('파일 1 이름 입력')
fileNameCopy = input('파일 2 이름 입력')
try :
with open(fileName, 'w') as file :
file = input('파일 내용 입력')
with open(fileName, 'r') as ori :
with open(fileNameCopy, 'w') as copy :
content = ori.read()
copy.write(content)
except FileNotFoundError :
print("파일을 찾을 수 없습니다")
except IOError:
print("파일 복사 중에 에러가 발생하였습니다")
except Exception as e :
print("예기치 않은 오류가 발생하였습니다")
내가쓴 코드에 대해서
파일 내용을 입력받을 때, file 변수를 재할당하는 부분이 있습니다. 이렇게 하면 파일 객체가 아닌 사용자 입력을 저장하게 되므로, 파일의 내용을 읽어오는 부분에서 에러가 발생합니다. 파일 내용을 입력받을 때 다른 변수를 사용해야 합니다.
파일 복사 부분에서 예외 처리가 누락되어 있습니다. 파일을 열고 내용을 복사하는 과정에서 예외가 발생할 수 있으므로, 해당 예외를 처리해야 합니다.
예외 처리의 마지막 부분에서 Exception을 잡아 처리하고 있지만, 좀 더 구체적인 예외 클래스를 사용하는 것이 좋습니다.
라고 지적해줌 오키!
제로 베이스 문제가 어려운건지...
내가 이해를 못하는건지 참
파일 합치기
두 개의 텍스트 파일을 입력 받아, 첫 번째 파일과 두 번째 파일의 내용을 합쳐 세 번째 파일에 저장하는 프로그램을 작성하세요.
file1 = 'file1'
f1content = input('파일 내용 입력')
f2content = input('파일 내용 입력')
with open(file1, 'w') as f1 :
f1.write(f1content)
file2 = 'file2'
with open(file2, 'w') as f2 :
f2.write(f2content)
file3 = 'file3'
with open(file1, 'r') as f1, open(file2, 'r') as f2, open(file3, 'w') as f3:
f3.write(f1.read() + '\n' + f2.read())
print('파일 합치기 완료')
with open(file3, 'r') as f3:
print(f3.read())
파일명을 위에서 받고
파일내용도 전에 받고
그걸 ope, write, read했네
그리고 write에 다른거 넣어줄때 아래로 들여쓰기하면서 하는게 아니라 콤마로 이어붙이는거였고,
파일에 다른 파일 내용 복사할때 단 분리할거면 read + '\n' + read하는거였다~
import time
from time import *
total = 0
REmoneybook = 'REmoneybook.txt'
form = '-'*30
while True:
start = int(input('1.입급 2.출금 3. 종료'))
if start == 1 :
income = int(input('입금액입력'))
incomeItem = input('입금내역 입력')
total += income
with open(REmoneybook, 'w') as mb:
mb.write(form + '\n' + f'[입금] {incomeItem} : {income}원' + '\n' + f'[잔액] : {total}원' + '\n')
continue
elif start == 2 :
outcome = int(input('출금액입력'))
outcomeItem = input('출금내역 입력')
total -= outcome
with open(REmoneybook, 'a') as mb:
mb.write(form + '\n' + f'[출금] {outcomeItem} : {outcome}원' + '\n' + f'[잔액] : {total}원' + '\n')
continue
elif start == 3 :
print('bye~')
break
다시쓰는게 open(파일명, 'a')
인줄 몰라따!
divisor = 'divisor.txt'
iList = []
while True :
with open(divisor, 'a') as d :
num = int(input('0보다 큰 정수 입력(0 입력시 종료)'))
if num == 0 :
break
for i in range(1,num+1):
if num % i == 0 :
iList.append(i)
result = f'{i}의 약수 : {iList}'
d.write(result + '\n')
finalList = []
num1 = int(input('1보다 큰 정수 입력'))
num2 = int(input('1보다 큰 정수 입력'))
common = 'common.txt'
while True :
for i in range(1,min(num1,num2)+1):
if num1 % i == 0 and num2 % i== 0 :
finalList.append(i)
with open(common, 'a') as c :
result = f'{num1}와 {num2} 의 공약수 {finalList}'
c.write(result + '\n')
print('common factor write complete')
break
import math
from datetime import *
from math import *
frute = 3
fish = 4
vegi = 5
startDate = datetime(2021,1,1,10,0,0)
file = 'arrive.txt'
name = '2021년 모둔 선박 입항일'
rutine = frute*fish*vegi//math.gcd(fish,vegi,frute)
with open(file, 'w') as f :
f.write('2021년 모둔 선박 입항일')
f.write(str(startDate))
nexttime = startDate + timedelta(days=rutine)
while True:
with open(file, 'a') as f:
f.write(f'{nexttime}\n')
nexttime +=timedelta(days=rutine)
if nexttime.year >2021:
break