Spring, 2019 School of CSE Pusan National University 간단한 통계처리 프로그램 만들기 Spring, 2019 School of CSE Pusan National University http://cfile5.uf.tistory.com/image/2178384951789FFF080F11
학습목표 합계와 평균 구하기를 배운다. 나눌 때는 0으로 나누지 않도록 한다. 종이나 연필만으로 풀고자 하면? (컴퓨터나 프로그램은 생각하지 말고) 최대값과 최소값을 구해본다. 파일에 있는 수를 읽어서 처리하기
합계(sum)와 평균(average) 구하기 배열에 들어있는 정수의 합계와 평균 max_num_stu = 10 # const jeomsu = [0 for i in range(0, max_num_stu + 1)] for i in range(1, max_num_stu + 1): jeomsu[i] = i * 10
합계(sum)와 평균(average) 구하기 # end for i sum = 0 for i in range(1, max_num_stu + 1): sum = sum + jeomsu[i] if (max_num_stu != 0): # 나누기 0 조심 avg = float (sum) / max_num_stu else: avg = 0.0 # end if print ("합계 = ", sum, "평균 = ", avg)
합계(sum)와 평균(average) 구하기 프로그램을 실행하다가 0으로 나누게 되며, 프로그램은 error message를 찍고, 비정상적으로 끝나버린다. ZeroDivisionError: float division by zero
합계(sum)와 평균(average) 구하기 1 에서 10(상수)까지의 합계. 그리고 평균 //종이와 연필만으로 풀고자 하면? (컴퓨터나 프로그램은 생각하지 말고 ...) sum = 0 for i in range(1, 10 + 1): sum = sum + i i = i + 1 avg1 = sum / 10 # 정수 결과: 5 avg2 = float(sum) / 10 # 실수 결과: 5.5 Print ("sum=",sum," 평균=",avg1,avg2)
합계(sum)와 평균(average) 구하기 1 에서 n까지의 합계 구하기 (n 의 값은 파일에서 읽어 들인다: readline() file1 = open("sum-in12.txt", "r") line = file1.readline () n = int (line) file1.close() sum = 0 for i in range(1, n+1): sum = sum + i print ("1에서", n, "까지합계=", sum)
합계(sum)와 평균(average) 구하기 n이 0 이나 음수일 때도 제대로 되나? 파일에서 n을 읽지 못 했을 때에는? -> 이 때는 sum와 평균이 모두 0 이 되도록 line = file1.readline() if (len(line) != 0): n = int (line) else: n = 0
합계(sum)와 평균(average) 구하기 if (n <= 0): avg = 0.0 else: avg = float(sum) / n print ("평균=“, avg)
합계(sum)와 평균(average) 구하기 n1에서 n2까지의 합계와 평균 (n1과 n2는 파일에서 읽어들인다) file1 = open("sum-in21.txt", "r") line = file1.readline() list1 = line.split() If (len(list1) >= 1): n1 = int(list1 [0]) else: n1 = 0 print ("n1(= 부터)의 값이 주어지지 않았음...“) If (len(list1) >= 2): n2 = int(list1 [1])
합계(sum)와 평균(average) 구하기 else: n2 = 0 print ("n2 (= 까지)의 값이 주어지지 않았음...“) file1.close() sum = 0 for i in range(n1, n2 + 1): sum = sum + i If (n1 <= n2): avg = sum / (n2 - n1 + 1) avg = 0.0 print ("평균=“, avg)
합계(sum)와 평균(average) 구하기 n1 에서 n2 까지의 합계와 평균 n2가 n1 보다 작을 때 합계를, 그 전에는 0 으로 보았는데, 이제 여기에서는 n2 + (n2+1) + (n2+2) + ... + (n1) 를 합계로 본다. if (n1 < n2) : from_val = n1 to_val = n2 else: # 부터 >= 까지 from_val = n2 to_val = n1
합계(sum)와 평균(average) 구하기 파일에 있는 모든 수의 합계와 평균을 구한다. count = 0; sum = 0 # ; 한 줄에 문장 여럿 file1 = open("sum-in31x-empty.txt", "r") for line in file1: num_read = int(line) count = count + 1 sum = sum + num_read file1.close() if (count == 0): avg = 0.0 else: avg = float (sum) / count print ("합계=“, sum, " 평균=“, avg)
합계(sum)와 평균(average) 구하기 파일에서 값을 읽어서 배열 (array)에 넣는다. iarr = [0 for i in range(0, 100 + 1)] file1 = open("while-sort-in11.txt", "r") i = 0 for line in file1: i = i + 1 iarr [i] = int(line) print ("i=", i, ": ", iarr[i]) numints = i print (numints, " 개의 수를 읽었습니다“)
최대 값(max)과 최소 값(min) 구하기 파일에 있는 모든 수 가운데 최대인 수 찾기. 파일에 있는 수가 모두 양수라고 가정 //종이와 연필만으로 풀고자 하면?
최대 값(max)과 최소 값(min) 구하기 count = 0 # 파일에 수가 1개 이상 있다고 가정 max_val = -1 # 파일에 있는 수가 양이라 가정 file1 = open("max-in12.txt" , "r") for line in file1: num_read = int(line) count = count + 1 if (num_read > max_val): max_val = num_read file1.close() print ("주어진 수", count, "개 중 최대", max_val)
최대 값(max)과 최소 값(min) 구하기 파일에 있는 모든 수 가운데 최대인 수를 찾되, 파일에 있는 수가 양이라고 가정하지 않는다 // 종이와 연필만으로 풀고자 하면? 파일에 수가 없을 때에는 최대값 찾지 못 함. file1 = open("max-in13.txt" , "r") line = file1.readline() # read the first line if len(line) != 0: # NOT EQUAL: != num_read = int(line) count = 1 max_val = num_read
최대 값(max)과 최소 값(min) 구하기 for line in file1: # line is a string var. num_read = int(line) count = count + 1 if (num_read > max_val): max_val = num_read file1.close() if (count == 0): print ("주어진 수가 없어 최대값 찾을 수 없음“) else: print ("주어진 수 ", count, " 개 가운데 최대인 수 = ", max_val)
최대 값(max)과 최소 값(min) 구하기 파일에 있는 모든 수 가운데 최대인 수를 찾되, read를 한 군데에서만 한다 (두 군데가 아님) count = 0 file1 = open("max-in14.txt" , "r") for line in file1: # line is a string var. num_read = int(line) count = count + 1 if (count == 1): #처음에 읽은 값을 최대값으로 max_val = num_read
최대 값(max)과 최소 값(min) 구하기 둘째 값부터는 그 전까지의 최대값과 견주어서, 최대값이 바뀔지 확인. elif (num_read > max_val): max_val = num_read else: pass # 할 일이 없음 file1.close()
최대 값(max)과 최소 값(min) 구하기 위의 프로그램에서 최대 값이 몇 번 나왔는지도 찍어낼 수 있도록 고친다. // 종이와 연필만으로 풀고자 하면? # num_read: 읽은 수 # count: 읽은 수의 개수 # max_val: 최대 값 # num_occ_max_val: 최대 값이 나온 회수 count = 0 num_occ_max_val = 0
최대 값(max)과 최소 값(min) 구하기 file1 = open ("max-in15.txt" , "r") for line in file1: # line is a string var. num_read = int(line) count = count + 1 if (count == 1): max_val = num_read num_occ_max_val = 1 # 둘째 값부터는 그 전까지의 최대값과 견주어서, 최대값이 바뀔지 확인. elif (num_read > max_val):
최대 값(max)과 최소 값(min) 구하기 max_val = num_read num_occ_max_val = 1 elif (num_read == max_val): # 회수 1 올라감 # max_val = num_read 안 바뀜 num_occ_max_val = num_occ_max_val + 1 else: pass # 할 일이 없음 print ("주어진 수 ", count, " 개 가운데 최대인 수 = ", max_val, "(", num_occ_max_val, " 번 나옴“) file1.close()
최대 값(max)과 최소 값(min) 구하기 최대 값 찾는 프로그램에서 두 수를 견주었을 때, 세 가지 경우(>, =, <)에 할 일을 필요에 따라 알맞게 조금씩 바꾸면, 최소 값 찾는 프로그램으로 바꿀 수 있음.
최대 값(max)과 최소 값(min) 구하기 for line in file1: # line is a string var. num_read = int(line) count = count + 1 if (num_read > max_val): max_val = num_read ==> if (num_read < min_val): min_val = num_read
최대 값(max)과 최소 값(min) 구하기 1 에서 얼마까지 더하면 그 합계가 처음으로 100 이 넘는가? sum1 = 0 num1 = 0 while sum1 <= 100 : num1 = num1 + 1 sum1 = sum1 + num1 print ("1 에서 ", num1, " 까지 더한 합계 ", sum1, ": 처음으로 100 을 넘음“)
파일 입출력 주의사항 파일이 열리지 않을 때, 그 원인은? (여러 가지가 있지만, 가능성 두 가지를 보자) 가) 없는 파일 이름을 open 할 때... file1 = open("file-in14XXX.txt", "r") # a non-existing file 없는 파일
파일 입출력 주의사항 파일 입출력 주의사항 나) 잘못하면, 파일 이름의 extension(확장명)이 두 번 들어가 있어서 파일을 찾지 못 함. - textfile1.txt를 만들려고 하다가 실수로 textfile1.txt.txt 파일을 만들 수 있음. - “알려진 파일 형식의 확장명 숨기기”를 선택하면(아래 그림의 왼쪽), ".txt" 확장명이 안 보이게 되고, 따라서 실수할 가능성이 있음. - “알려진 파일 형식의 확장명 숨기기”를 선택하지 않으면(아래 그림의 오른쪽), ".txt" 확장명이 보여서, 잘못을 곧바로 알 수 있게 됨.
파일 입출력 주의사항 파일 입출력 주의사항 - "textfile1.txt.txt"에서 실수를 바로 알 수 있다.
연습문제 while_max_31_filenames.txt 파일에는 아래와 같이 파일 이름이 여러 개 들어있다: max-in12.txt max-in13.txt max-in14.txt max-in15.txt 위의 보기 경우, 네 개 파일 각각을 읽어서 그 파일 안에 있는 수 가운데 최대 값을 구하되, 그 최대 값이 그 파일에서 몇 번 나왔는지도 말하라.
요약 종이나 연필만으로 푸는 방법을 보았다. 평균을 구할 때, 최대값을 구해본다. (컴퓨터나 프로그램은 생각하지 말고) 평균을 구할 때, 나누는 수가 0인지 확인하여 0으로 나누지 않도록 한다 최대값을 구해본다. 최대값 구하기를 살짝 바꾸어 최소값을 구할 수 있다. 파일이 열리지 않으면 이유를 찾아본다. 파일에 수가 없을 때, 파일에 수가 하나 또는 여러 개 있는 모든 경우를 다룰 수 있어야 한다.