이번에는 최솟값3개를 찾는 함수를 만들어보겠다.
일단 지난 시간 사용한 코드는 더보기에 있으니 필요 시 확인하면 된다.
참고로 최종적으로 단순한 프로그램을 만드는 것이 목표인지라 그에 맞게 코드의 위치가 바뀐게 있으니
계속 따라오고 있다면 이번 코드를 확인해봐도 좋다.
from openpyxl import Workbook, load_workbook #xlsx파일 읽는데 필요한 모듈 import
load16 = load_workbook("daily2016.xlsx", data_only = True) #파일로드
load16S = load16['Sheet1'] #파일속 Sheet를 가져옴
load17 = load_workbook("daily2017.xlsx", data_only = True)
load17S = load17['Sheet1']
load18 = load_workbook("daily2018.xlsx", data_only = True)
load18S = load18['Sheet1']
def NewCalc(mon,Num):
if mon == 1:
a = "1월"+ str(Num+1)+"일"
return a
elif mon == 2:
a = "2월"+ str(Num+1)+"일"
return a
elif mon == 3:
a = "3월" +str(Num+1) +"일"
return a
elif mon == 4:
a = "4월" +str(Num+1) +"일"
return a
elif mon == 5:
a = "5월" +str(Num+1) +"일"
return a
elif mon == 6:
a = "6월" +str(Num+1) +"일"
return a
elif mon == 7:
a = "7월" +str(Num+1) +"일"
return a
elif mon == 8:
a = "8월" +str(Num+1) +"일"
return a
elif mon == 9:
a = "9월" +str(Num+1) +"일"
return a
elif mon == 10:
a = "10월" +str(Num+1) +"일"
return a
elif mon == 11:
a = "11월" +str(Num+1) +"일"
return a
elif mon == 12:
a = "12월" +str(Num+1) +"일"
return a
else:
a = "Error"
return a
#모든 데이터들이 들어갈 빈 리스트 생성
all_value16 = []
all_value17 = []
all_value18 = []
#3년 간의 일평균 대기환경 지수 리스트로 가져오기 (all_valueYY) for문 사용
for row in load16S.rows:
row_value = []
for cell in row:
row_value.append(cell.value)
all_value16.append(row_value)
for row in load17S.rows:
row_value = []
for cell in row:
row_value.append(cell.value)
all_value17.append(row_value)
for row in load18S.rows:
row_value = []
for cell in row:
row_value.append(cell.value)
all_value18.append(row_value)
select16 = [] #필요한 데이터. 즉 서대문구의 데이터만 담을 리스트 생성
select17 = [] #필요한 데이터. 즉 서대문구의 데이터만 담을 리스트 생성
select18 = [] #필요한 데이터. 즉 서대문구의 데이터만 담을 리스트 생성
for i in range(len(all_value16)):
if all_value16[i][1] == '서대문구': #원하는 지역인 것만 모아온 것.
select16.append(all_value16[i])
for i in range(len(all_value17)):
if all_value17[i][1] == '서대문구': #원하는 지역인 것만 모아온 것.
select17.append(all_value17[i])
for i in range(len(all_value18)):
if all_value18[i][1] == '서대문구': #원하는 지역인 것만 모아온 것.
select18.append(all_value18[i])
average10 = [] #미세먼지평균 데이터를 넣을 빈리스트
average25 = [] #초미세먼지평균 데이터를 넣을 빈리스트
for i in range(len(select18)):
#None 인 데이터 처리
if select16[i][6] == None:
if select17[i][6] == None:
if select18[i][6] == None:
ans10 = '측정불가'
else:
ans10 = select18[i][6]
else:
if select18[i][6] == None:
ans10 = select17[i][6]
else:
ans10 = (select17[i][6] + select18[i][6]) / 2
else:
if select17[i][6] == None:
if select18[i][6] == None:
ans10 = select16[i][6]
else:
ans10 = (select16[i][6] + select18[i][6]) / 2
else:
if select18[i][6] == None:
ans10 = (select16[i][6] + select17[i][6]) / 2
else:
ans10 = (float(select16[i][6]) + float(select17[i][6]) + float(select18[i][6])) / 3
average10.append(ans10)
#pm25(초미세먼지) 3년간의 일 평균 초미세먼지 농도를 가지고 새로운 일 평균 초미세먼지 값을 찾는 과정
for i in range(len(select18)):
#None 인 데이터 처리
if select16[i][7] == None:
if select17[i][7] == None:
if select18[i][7] == None:
ans25 = '측정불가'
else:
ans25 = select18[i][7]
else:
if select18[i][7] == None:
ans25 = select17[i][7]
else:
ans25 = (select17[i][7] + select18[i][7]) / 2
else:
if select17[i][7] == None:
if select18[i][7] == None:
ans25 = select16[i][7]
else:
ans25 = (select16[i][7] + select18[i][7]) / 2
else:
if select18[i][7] == None:
ans25 = (select16[i][7] + select17[i][7]) / 2
else:
ans25 = (float(select16[i][7]) + float(select17[i][7]) + float(select18[i][7])) / 3
average25.append(ans25)
mon = input("원하는 달을 숫자로 한개만 입력하세요.(ex 10, 1, 2):")
print("입력완료!")
print()
monwant10 = []
monwant25 = []
if mon == '1':
mon = int(mon)
monwant10 = average10[0:31:1]
monwant25 = average25[0:31:1]
elif mon == '2':
mon = int(mon)
monwant10 = average10[31:60:1]
monwant25 = average25[31:60:1]
elif mon == '3':
mon = int(mon)
monwant10 = average10[60:91:1]
monwant25 = average25[60:91:1]
elif mon == '4':
mon = int(mon)
monwant10 = average10[91:121:1]
monwant25 = average25[91:121:1]
elif mon == '5':
mon = int(mon)
monwant10 = average10[121:152:1]
monwant25 = average25[121:152:1]
elif mon == '6':
mon = int(mon)
monwant10 = average10[152:182:1]
monwant25 = average25[152:182:1]
elif mon == '7':
mon = int(mon)
monwant10 = average10[182:213:1]
monwant25 = average25[182:213:1]
elif mon == '8':
mon = int(mon)
monwant10 = average10[213:244:1]
monwant25 = average25[213:244:1]
elif mon == '9':
mon = int(mon)
monwant10 = average10[244:274:1]
monwant25 = average25[244:274:1]
elif mon == '10':
mon = int(mon)
monwant10 = average10[274:305:1]
monwant25 = average25[274:305:1]
elif mon == '11':
mon = int(mon)
monwant10 = average10[305:335:1]
monwant25 = average25[305:335:1]
elif mon == '12':
mon = int(mon)
monwant10 = average10[335:366:1]
monwant25 = average25[335:366:1]
else:
print()
print("잘못입력하셨습니다. 다시 입력해주세요.")
print()
또 지난 포스팅을 보지 않았다면 확인하는 것도 프로젝트를 이해하는데 도움이 된다.
2020/07/01 - [분류 전체보기] - [Python Project 1.3]미세먼지 예측 프로그램 개발-리스트슬라이싱,날짜계산
원래대로라면 지난 포스팅에서 했어야 하지만 다른 함수와 코드를 짜느라 시간이 더 걸렸다.
최솟값을 찾으려면 어떻게 해야할까?
최솟값을 1개만 찾는다면 다음과 같이 짤 수 있겠다.
하지만 만약 두개의 최솟값을 찾느다면 어떻게 해야할까?
여러 방법이 있겠지만 sorted()를 사용한뒤 리스트 인덱스를 사용하는 방법이 있다.
아래 사진을 통해 확인하자.
원래 리스트는 Q이고 sorted()를 사용하여 Q를 정렬한게 QQ다. 아래 결과를 보면 알 수 있듯이. QQ는 [1,2,3,4,5,5,7]로 정렬되어 있다. 그다음 리스트의 인덱싱을 사용한게 보인다.
첫 번째 최솟값인 m1은 기존함수 Q에서 QQ의0번째 숫자인 1의 인덱스를 담았다. 그 결과 3이 나왔다.
마찬가지로 m2도 같은 과정을 거쳐 0이 나왔다.
이때 인덱스라는 것에 집중해야한다.
우리가 필요한것은 정확히 최솟값이 아니라 날짜로 바꾸기위해 최솟값의 인덱스가 필요하다는 것이다.
하지만 이때부터 문제가 생긴다. 만약 1이 이였다면 어떻게 될까?
문제가 보이는가? m1과 m2의 값이 같다!
0, 3이 나오던가 아까처럼 3,0이 나와야되는데 이게 무슨일인가.
답은 index에 있다. Q.index를 했을 때 원리는 리스트의 맨처음부터 QQ[0]인 2가 있는 인덱스를 찾는다.
어라, Q[0]에 2가 있네? 뒤는 안보고 2를 return한다.
이번엔 Q.index(QQ[1])차례. 이 경우도 어라? Q[0]에 2가 있네? 뒤에 3, 5,...는 확인하지 않고 2 return.
이렇게 되면 같은 날짜만 출력되는 불상사가 생길 수 있다.
그래서 최솟값을 3개 찾을 때는 여기서 조금만 더 바꿔보았다.
def Three_min(mon,L):
subL = L
sort_L = sorted(subL)
min1 = subL.index(sort_L[0])
L.remove(sort_L[0])
L.insert(min1, None)
min2 = subL.index(sort_L[1])
L.remove(sort_L[1])
L.insert(min2, None)
min3 = subL.index(sort_L[2])
return (NewCalc(mon, min1),NewCalc(mon,min2),NewCalc(mon, min3))
어쩌면 많은 변화가 있었다. 일단 return값에 이전 포스팅에서 만든 NewCalc()함수를 결합시켰다. 바로 날짜를 나오게 하기 위함이다.
그럼 최솟값을 찾는 원리에 대해 파헤쳐보자.
일간 기존의 L을 sorted하면 안되기 때문에 subL을 만들고 sorted 시킨다음 최솟값에 이전처럼 sorted리스트의 인덱스를 넣어준다.
중요한건 최솟값1개를 먼저 찾고, 그 값을 지운 다음 그 자리에 전혀 숫자랑은 관계없는 None을 집어 넣는 다는 것이다.
즉 아까의 Q= [2,3,5,2,5,7,4] 가 있을때 2를 한번 찾았다면 [None,3,5,2,5,7,4]로 바꿔준 것이다.
이렇게 되면 알아서 뒤로 넘어갈게 분명하다.
그러면 이제 이 함수들을 가지고 간단히 프로그램을 완성시켜보자.
코드는 다음과 같다.
다소 길이가 있는 관계로 더보기를 통해 확인하기 바란다.
from openpyxl import Workbook, load_workbook #xlsx파일 읽는데 필요한 모듈 import
load16 = load_workbook("daily2016.xlsx", data_only = True) #파일로드
load16S = load16['Sheet1'] #파일속 Sheet를 가져옴
load17 = load_workbook("daily2017.xlsx", data_only = True)
load17S = load17['Sheet1']
load18 = load_workbook("daily2018.xlsx", data_only = True)
load18S = load18['Sheet1']
def NewCalc(mon,Num):
if mon == 1:
a = "1월"+ str(Num+1)+"일"
return a
elif mon == 2:
a = "2월"+ str(Num+1)+"일"
return a
elif mon == 3:
a = "3월" +str(Num+1) +"일"
return a
elif mon == 4:
a = "4월" +str(Num+1) +"일"
return a
elif mon == 5:
a = "5월" +str(Num+1) +"일"
return a
elif mon == 6:
a = "6월" +str(Num+1) +"일"
return a
elif mon == 7:
a = "7월" +str(Num+1) +"일"
return a
elif mon == 8:
a = "8월" +str(Num+1) +"일"
return a
elif mon == 9:
a = "9월" +str(Num+1) +"일"
return a
elif mon == 10:
a = "10월" +str(Num+1) +"일"
return a
elif mon == 11:
a = "11월" +str(Num+1) +"일"
return a
elif mon == 12:
a = "12월" +str(Num+1) +"일"
return a
else:
a = "Error"
return a
def Three_min(mon,L):
subL = L
sort_L = sorted(subL)
min1 = subL.index(sort_L[0])
L.remove(sort_L[0])
L.insert(min1, None)
min2 = subL.index(sort_L[1])
L.remove(sort_L[1])
L.insert(min2, None)
min3 = subL.index(sort_L[2])
return (NewCalc(mon, min1),NewCalc(mon,min2),NewCalc(mon, min3))
#모든 데이터들이 들어갈 빈 리스트 생성
all_value16 = []
all_value17 = []
all_value18 = []
#3년 간의 일평균 대기환경 지수 리스트로 가져오기 (all_valueYY) for문 사용
for row in load16S.rows:
row_value = []
for cell in row:
row_value.append(cell.value)
all_value16.append(row_value)
for row in load17S.rows:
row_value = []
for cell in row:
row_value.append(cell.value)
all_value17.append(row_value)
for row in load18S.rows:
row_value = []
for cell in row:
row_value.append(cell.value)
all_value18.append(row_value)
select16 = [] #필요한 데이터. 즉 서대문구의 데이터만 담을 리스트 생성
select17 = [] #필요한 데이터. 즉 서대문구의 데이터만 담을 리스트 생성
select18 = [] #필요한 데이터. 즉 서대문구의 데이터만 담을 리스트 생성
average10 = [] #미세먼지평균 데이터를 넣을 빈리스트
average25 = [] #초미세먼지평균 데이터를 넣을 빈리스트
loc_list = []
for i in range(38):
i = i + 1
loc_list.append(all_value16[i][1])
#사용자가 원하는 기능을 계속 사용할 수 있도록 하여 다시 실행하였을 때 생길 파일리딩 시간을 줄임.
while True:
print("1)지역설정")
print("2)달 설정")
print("3)결과 확인")
print("4)프로그램종료")
ans = input("원하시는 기능의 숫자를 입력해주세요 (ex 3):")
#지역설정을 하는 코드
if ans == '1':
print()
loc = input("지역명을 한개만 입력하세요(ex 은평구, 서대문구):")
print("입력완료!")
print()
#loc_list.count가 1 이여야 데이터가 존재하는 지역.
if loc_list.count(loc) != 1 or loc =='None':
print("없는 지역이거나 잘못된 지역명입니다.")
print()
else:
for i in range(len(all_value16)):
if all_value16[i][1] == loc: #원하는 지역인 것만 모아온 것.
select16.append(all_value16[i])
for i in range(len(all_value17)):
if all_value17[i][1] == loc: #원하는 지역인 것만 모아온 것.
select17.append(all_value17[i])
for i in range(len(all_value18)):
if all_value18[i][1] == loc: #원하는 지역인 것만 모아온 것.
select18.append(all_value18[i])
#pm10(미세먼지) 3년간의 일 평균 미세먼지 농도를 가지고 새로운 일 평균 미세먼지 값을 찾는 과정
for i in range(len(select18)):
#None 인 데이터 처리
if select16[i][6] == None:
if select17[i][6] == None:
if select18[i][6] == None:
ans10 = '측정불가'
else:
ans10 = select18[i][6]
else:
if select18[i][6] == None:
ans10 = select17[i][6]
else:
ans10 = (select17[i][6] + select18[i][6]) / 2
else:
if select17[i][6] == None:
if select18[i][6] == None:
ans10 = select16[i][6]
else:
ans10 = (select16[i][6] + select18[i][6]) / 2
else:
if select18[i][6] == None:
ans10 = (select16[i][6] + select17[i][6]) / 2
else:
ans10 = (float(select16[i][6]) + float(select17[i][6]) + float(select18[i][6])) / 3
average10.append(ans10)
#pm25(초미세먼지) 3년간의 일 평균 초미세먼지 농도를 가지고 새로운 일 평균 초미세먼지 값을 찾는 과정
for i in range(len(select18)):
#None 인 데이터 처리
if select16[i][7] == None:
if select17[i][7] == None:
if select18[i][7] == None:
ans25 = '측정불가'
else:
ans25 = select18[i][7]
else:
if select18[i][7] == None:
ans25 = select17[i][7]
else:
ans25 = (select17[i][7] + select18[i][7]) / 2
else:
if select17[i][7] == None:
if select18[i][7] == None:
ans25 = select16[i][7]
else:
ans25 = (select16[i][7] + select18[i][7]) / 2
else:
if select18[i][7] == None:
ans25 = (select16[i][7] + select17[i][7]) / 2
else:
ans25 = (float(select16[i][7]) + float(select17[i][7]) + float(select18[i][7])) / 3
average25.append(ans25)
elif ans == '2':
print()
mon = input("원하는 달을 숫자로 한개만 입력하세요.(ex 10, 1, 2):")
print("입력완료!")
print()
monwant10 = []
monwant25 = []
if mon == '1':
mon = int(mon)
monwant10 = average10[0:31:1]
monwant25 = average25[0:31:1]
elif mon == '2':
mon = int(mon)
monwant10 = average10[31:60:1]
monwant25 = average25[31:60:1]
elif mon == '3':
mon = int(mon)
monwant10 = average10[60:91:1]
monwant25 = average25[60:91:1]
elif mon == '4':
mon = int(mon)
monwant10 = average10[91:121:1]
monwant25 = average25[91:121:1]
elif mon == '5':
mon = int(mon)
monwant10 = average10[121:152:1]
monwant25 = average25[121:152:1]
elif mon == '6':
mon = int(mon)
monwant10 = average10[152:182:1]
monwant25 = average25[152:182:1]
elif mon == '7':
mon = int(mon)
monwant10 = average10[182:213:1]
monwant25 = average25[182:213:1]
elif mon == '8':
mon = int(mon)
monwant10 = average10[213:244:1]
monwant25 = average25[213:244:1]
elif mon == '9':
mon = int(mon)
monwant10 = average10[244:274:1]
monwant25 = average25[244:274:1]
elif mon == '10':
mon = int(mon)
monwant10 = average10[274:305:1]
monwant25 = average25[274:305:1]
elif mon == '11':
mon = int(mon)
monwant10 = average10[305:335:1]
monwant25 = average25[305:335:1]
elif mon == '12':
mon = int(mon)
monwant10 = average10[335:366:1]
monwant25 = average25[335:366:1]
else:
print()
print("잘못입력하셨습니다. 다시 입력해주세요.")
print()
#지역과 달설정이 되었을 때만 결과를 출력합니다. Three_min(mon,L)함수 사용
elif ans == '3':
if loc_list.count(loc) != 1:
print()
print("없는 지역이거나 잘못된 지역명입니다.")
print()
elif loc =='None':
print()
print('지역명을 먼저 입력해주세요!')
print()
elif mon == 0 or mon =='':
print()
print("달 설정이 되지 않았습니다.")
print()
else:
print()
print(str(loc)+"지역의 "+str(mon)+"월달 미세먼지가 가장 적은 날은")
print(Three_min(mon,monwant10), end="")
print("이고")
print("초미세먼지가 가장 적은 날은")
print(Three_min(mon,monwant25), end="")
print("입니다.")
print()
#사용자가 사용을 다 했을때 종료할 수 있도록 만든 코드.
elif ans == '4':
break
#제시한 숫자는 1부터 5까지 이므로 이외의 문자, 숫자(사실상 문자로 입력됨)를 입력하면 다시입력하게 됨.
else:
print()
print("다시 입력해주세요.")
print()
확인했는가? 많은게 바뀌어있다. 설명이 필요한건 아마도 아래 코드일 것이다.
loc_list = []
for i in range(38):
i = i + 1
loc_list.append(all_value16[i][1])
#사용자가 원하는 기능을 계속 사용할 수 있도록 하여 다시 실행하였을 때 생길 파일리딩 시간을 줄임.
while True:
print("1)지역설정")
print("2)달 설정")
print("3)결과 확인")
print("4)프로그램종료")
ans = input("원하시는 기능의 숫자를 입력해주세요 (ex 3):")
#지역설정을 하는 코드
if ans == '1':
print()
loc = input("지역명을 한개만 입력하세요(ex 은평구, 서대문구):")
print("입력완료!")
print()
#loc_list.count가 1 이여야 데이터가 존재하는 지역.
if loc_list.count(loc) != 1 or loc =='None':
print("없는 지역이거나 잘못된 지역명입니다.")
print()
else:
for i in range(len(all_value16)):
if all_value16[i][1] == loc: #원하는 지역인 것만 모아온 것.
select16.append(all_value16[i])
for i in range(len(all_value17)):
if all_value17[i][1] == loc: #원하는 지역인 것만 모아온 것.
select17.append(all_value17[i])
for i in range(len(all_value18)):
if all_value18[i][1] == loc: #원하는 지역인 것만 모아온 것.
select18.append(all_value18[i])
#pm10(미세먼지) 3년간의 일 평균 미세먼지 농도를 가지고 새로운 일 평균 미세먼지 값을 찾는 과정
for i in range(len(select18)):
#None 인 데이터 처리
if select16[i][6] == None:
if select17[i][6] == None:
if select18[i][6] == None:
ans10 = '측정불가'
else:
ans10 = select18[i][6]
else:
if select18[i][6] == None:
ans10 = select17[i][6]
else:
ans10 = (select17[i][6] + select18[i][6]) / 2
else:
if select17[i][6] == None:
if select18[i][6] == None:
ans10 = select16[i][6]
else:
ans10 = (select16[i][6] + select18[i][6]) / 2
else:
if select18[i][6] == None:
ans10 = (select16[i][6] + select17[i][6]) / 2
else:
ans10 = (float(select16[i][6]) + float(select17[i][6]) + float(select18[i][6])) / 3
average10.append(ans10)
#pm25(초미세먼지) 3년간의 일 평균 초미세먼지 농도를 가지고 새로운 일 평균 초미세먼지 값을 찾는 과정
for i in range(len(select18)):
#None 인 데이터 처리
if select16[i][7] == None:
if select17[i][7] == None:
if select18[i][7] == None:
ans25 = '측정불가'
else:
ans25 = select18[i][7]
else:
if select18[i][7] == None:
ans25 = select17[i][7]
else:
ans25 = (select17[i][7] + select18[i][7]) / 2
else:
if select17[i][7] == None:
if select18[i][7] == None:
ans25 = select16[i][7]
else:
ans25 = (select16[i][7] + select18[i][7]) / 2
else:
if select18[i][7] == None:
ans25 = (select16[i][7] + select17[i][7]) / 2
else:
ans25 = (float(select16[i][7]) + float(select17[i][7]) + float(select18[i][7])) / 3
average25.append(ans25)
elif ans == '2':
print()
mon = input("원하는 달을 숫자로 한개만 입력하세요.(ex 10, 1, 2):")
print("입력완료!")
print()
monwant10 = []
monwant25 = []
if mon == '1':
mon = int(mon)
monwant10 = average10[0:31:1]
monwant25 = average25[0:31:1]
elif mon == '2':
mon = int(mon)
monwant10 = average10[31:60:1]
monwant25 = average25[31:60:1]
elif mon == '3':
mon = int(mon)
monwant10 = average10[60:91:1]
monwant25 = average25[60:91:1]
elif mon == '4':
mon = int(mon)
monwant10 = average10[91:121:1]
monwant25 = average25[91:121:1]
elif mon == '5':
mon = int(mon)
monwant10 = average10[121:152:1]
monwant25 = average25[121:152:1]
elif mon == '6':
mon = int(mon)
monwant10 = average10[152:182:1]
monwant25 = average25[152:182:1]
elif mon == '7':
mon = int(mon)
monwant10 = average10[182:213:1]
monwant25 = average25[182:213:1]
elif mon == '8':
mon = int(mon)
monwant10 = average10[213:244:1]
monwant25 = average25[213:244:1]
elif mon == '9':
mon = int(mon)
monwant10 = average10[244:274:1]
monwant25 = average25[244:274:1]
elif mon == '10':
mon = int(mon)
monwant10 = average10[274:305:1]
monwant25 = average25[274:305:1]
elif mon == '11':
mon = int(mon)
monwant10 = average10[305:335:1]
monwant25 = average25[305:335:1]
elif mon == '12':
mon = int(mon)
monwant10 = average10[335:366:1]
monwant25 = average25[335:366:1]
else:
print()
print("잘못입력하셨습니다. 다시 입력해주세요.")
print()
#지역과 달설정이 되었을 때만 결과를 출력합니다. Three_min(mon,L)함수 사용
elif ans == '3':
if loc_list.count(loc) != 1:
print()
print("없는 지역이거나 잘못된 지역명입니다.")
print()
elif loc =='None':
print()
print('지역명을 먼저 입력해주세요!')
print()
elif mon == 0 or mon =='':
print()
print("달 설정이 되지 않았습니다.")
print()
else:
print()
print(str(loc)+"지역의 "+str(mon)+"월달 미세먼지가 가장 적은 날은")
print(Three_min(mon,monwant10), end="")
print("이고")
print("초미세먼지가 가장 적은 날은")
print(Three_min(mon,monwant25), end="")
print("입니다.")
print()
#사용자가 사용을 다 했을때 종료할 수 있도록 만든 코드.
elif ans == '4':
break
#제시한 숫자는 1부터 5까지 이므로 이외의 문자, 숫자(사실상 문자로 입력됨)를 입력하면 다시입력하게 됨.
else:
print()
print("다시 입력해주세요.")
print()
일단 loc_list의 경우 while문 속에서 1을 입력했을 때 즉 지역을 설정할 때 없는 지역을 집어넣었을 때 대비해 만든 것이다. 계속 말하지만 프로그램은 어떤 상황에서도 동작해야한다. 이 리스트를 통해 없는 지역이거나 잘못 입력했을 때 프로그램이 멈추지 않도록 할 것이다. 감이 왔겠지만 loc_list아래 for문을 통해 지역명들을 추가했다.
이제 while 문을 살펴보자.
내가 만드려는 프로그램은
사용자가 원하는 기능의 숫자를 입력하는 것이다.
1을 입력하면 지역을 입력하게 되고
2는 달을 설정한다. 현재 1에서 12사이의 숫자(입력이므로 사실은 str형식)만 입력받고 그 외의 경우 다시 처음으로 돌아가게 했다. 하지만 위 코드에서는 지역을 설정하지 않았을 때에 대한 코드가 없다. 지역 설정이 안된상태면 2번에서 monwant리스트를 생성하지 못하므로 3을 입력했을 때 우리가 만든 함수를 통한 결과 출력이 되지 않을 것이다.
현재는 여기까지가 완성이다.
기타 오류를 개선한 뒤 글을 올리도록 하겠다.
시간이 된다면 api를 통해 실시간 미세먼지 농도를 구하는 것에 대해 포스팅하도록 하겠다.
'[파이썬]Python > 미세먼지 프로젝트' 카테고리의 다른 글
[Python Project 1.5]미세먼지 예측 프로그램 개발-오류수정 (0) | 2020.07.08 |
---|---|
[Python Project 1.3]미세먼지 예측 프로그램 개발-리스트슬라이싱,날짜계산 (0) | 2020.07.04 |
[Python Project 1.2]미세먼지 예측 프로그램 개발-평균데이터 구하기 (0) | 2020.07.02 |
[Python Project 1.1]미세먼지 예측 프로그램 개발 (0) | 2020.06.29 |