ㅇ 일자 : 20206년 4월 17일
ㅇ 내용 : 간단한 프로그램 만들기 (개인,팀 과제)
ㅇ 코드 작성 및 실행후 오류 정정 찾아보기 및 팀 토의
ㅇ 수정 및 보완할 사항 ( 보기 설정 : html 모드 )
- 외부함수와 내부 함수를 구분할 줄 알고 코드는 조합해서 사용할 줄 알아야 하며 이를 숙달시켜야 한다
- 별그램은 어렵다 고민하고 서로의 도움도 받을줄 알아야 한다
ㅇ 다이아몬드 형태 만들기
# 상단 부분 (1행부터 3행까지)
for i in range(1, 4):
print(" " * (4 - i), end="") # 공백 출력 (4-i개)
print("*" * (2 * i - 1)) # 별 출력 (홀수 개)
# 하단 부분 (4행부터 1행까지 역순)
for i in range(4, 0, -1):
print(" " * (4 - i), end="") # 공백 출력 (4-i개)
print("*" * (2 * i - 1)) # 별 출력 (홀수 개)
ㅇ 달력 만들기
def print_calendar(year,month):
월별 일수 = [31,28,31,30,31,30,31,31,30,31,30,31]
(연도 % 4 == 0이고 연도 % 100 != 0)이거나 (연도 % 400 == 0) 인 경우 :
days_in_month[1] = 29
총 일수 = 0
y가 1부터 년 범위
내에 있을 때마다 , y % 4 == 0이고 y % 100 != 0이거나 y % 400 == 0 이면 다음 조건을 만족합니다.
총 일수 += 366
또 다른 :
총 일수 += 365
m이 범위(월 - 1) 에 있는 경우 :
total_days += days_in_month[m]
시작일 = (총 일수 + 1) % 7
print(f"\n {year}년 {month}월")
print("일 월 화 수 목 금 토")
print(" "*start_day, end="")
for day in range(1, days_in_month[month-1]+1):
print(f"{day:2} ", end="")
if (start_day + day) % 7 ==0:
print()
print("\n")
if __name__ == "__main__":
노력하다:
y = int(input("년도를 입력하세요 (예: 2026): "))
m = int(input("월을 입력하세요 (1-12): "))
만약 1 <= m <= 12이면:
print_calendar(y, m)
else:
print("월은 1에서 12 사이로 입력해주세요.")
ValueError 제외:
print("숫자만 입력 가능합니다.")
※ 화면 캡쳐 : 달력만들기 (추가 입력 창)

문제6. 간단한 프로그램 함수로 구현하기 (야구게임 만들기) : 2팀 (숫자 야구 만들기) : 첨부 파일
문제 7. 함수 활용 Lotto 만들기 (2팀)

#1. 로직과 순서도06 간단프로그램 작성하기 실습
문제1: 사용자에게 숫자 2개를 입력받고, 사칙연산 기호(+, -, *, /, %, //) 를 입력받으면, 그 연산 결과를 출력하라.
공백(화이트 스페이스)를 입력받아도 무시되도록 구현하시요
문제1: 사용자에게 숫자 2개를 입력받고, 사칙연산 기호(+, -, *, /, %, //) 를 입력받으면, 그 연산 결과를 출력하라.
공백(화이트 스페이스)를 입력받아도 무시되도록 구현하시요
안에 [ ]:
# 간단 프로그램 1번
num1 = int(input("계산할 첫번째 숫자를 입력하시요:"))
num2 = int(input("계산할 두번째 숫자를 입력하시요:"))
value = input("사칙연산 기호(+,-,*,/)를 입력하시요:")
값이 _str_ 리스트에 있으면:
a = 값 _str_ 리스트.index(값)
print("f{num1} {value} {num2}={value_list[ a ]( num1,num2 )}")
계산할 첫번째 숫자를 입력하시요:10 계산할 두번째 숫자를 입력하시요:20 사칙연산 기호(NameError Traceback (most recent call last=이름 오류 추적) /tmp/ipykernel_2595/3111162001.py in <cell line: 0>() 2 num2 = int(input("계산할 두번째 숫자를 입력하시요:")) 3 value = input("사칙연산 기호(+,-,*,/)를 입력하시요:") ----> 4 if value in value_str_list: 5 a = value_str_list.index(value) 6 print("f{num1} {value} {num2}={value_list[a](num1,num2)}") NameError: name 'value_str_list' is not defined
문제1 수정 사항
1. 변수 선언: value_str_list를 생성하여 if문에서 검사
2. 함수 연결: value_list에 실제 함수 객체들을 넣어 index 번호로 해당 함수를 바로 실행
3. f-string 문법: print("f{...}")를 print(f"{...}")로 수정하여 중괄호 안의 코드 정상 실행
4. 예외 처리: 나누기 연산 시 0으로 나누는 경우를 대비한 로직 추가
1. 변수 선언: value_str_list를 생성하여 if문에서 검사
2. 함수 연결: value_list에 실제 함수 객체들을 넣어 index 번호로 해당 함수를 바로 실행
3. f-string 문법: print("f{...}")를 print(f"{...}")로 수정하여 중괄호 안의 코드 정상 실행
4. 예외 처리: 나누기 연산 시 0으로 나누는 경우를 대비한 로직 추가
안에 [ ]:
# 질의 및 찾아보고 수정하기
# 1. 사칙연산 함수 정의
def add(a, b): return a + b
def sub( a , b): return a - b
def mul( a , b): return a * b
def div(a, b): return a / b if b != 0 else "0으로 나눌 수 없습니다"
# 2. 기호 리스트와 함수 리스트 정의 (이 부분이 빠져서 NameError가 발생)
value_str_list = ['+', '-', '*', '/']
value_list = [ add , sub , mul , div ]
# 3. 사용자 입력
num1 = int(input("계산할 첫번째 숫자를 입력하시요: "))
num2 = int(input("계산할 두번째 숫자를 입력하시요: "))
value = input("사칙연산 기호(+,-,*,/)를 입력하시요: ")
# 4. 연산 및 결과 출력
if value in value_str_list:
a = value_str_list.index(value)
# f-string 사용 시 f를 따옴표 밖에 붙여야 변수가 인식됩니다.
result = value_list[a](num1, num2)
print(f "{num1} {value} {num2} = {result}" )
else :
print("잘못된 기호를 입력하셨습니다. 똑바로 입력하시요")
계산할 첫번째 숫자를 입력하시요: 10 계산할 두번째 숫자를 입력하시요: 15 사칙연산 기호(+,-,*,/)를 입력하시요: / 10 / 15 = 0.6666666666666666
#2. 로직과 순서도06 간단프로그램 작성하기 실습
문제2:사용자가 사각형의 넓이, 원의 넓이, 삼각형의 넓이, 원의 둘레를 선택하도록 구현하라.
그리고 계산에 필요한 값을 입력받고, 그 결과를 출력하는 프로그램을 구현하라.
문제2:사용자가 사각형의 넓이, 원의 넓이, 삼각형의 넓이, 원의 둘레를 선택하도록 구현하라.
그리고 계산에 필요한 값을 입력받고, 그 결과를 출력하는 프로그램을 구현하라.
안에 [ ]:
# 간단프로그램 2번
list_kkkk = ["사각형의 넓이","원의 넓이", "삼각형의 넓이", "원의 둘레"]
print("구할수 있는 계산식은" + "".join(list_kkkk)+"등이 있습니다.")
result = input("구하려는 계산식을 입력하세요:")
결과가 list_kkkk에 있으면:
if result == "사각형의 넓이:"
width = float(input("사각형의 가로를 입력하시요 : "))
length = float(input("사각형의 높이를 입력하시요 : "))
면적 = 길이 * 너비
print(f "{width} * {length} = {area}" )
인쇄()
elif result == "원의 넓이:"
red = float(input("반지름을 입력하시요:"))
파이 = 3.14159
원의 면적 = 파이 * 라디안 **2
print(f "rad)^2 * {pi} = {circle_area}" )
인쇄()
elif result=="삼각형의 넓이:"
width = float(input("삼각형의 밑변을 입력하시요 : "))
length = float(input("삼각형의 높이를 입력하시요 : "))
면적 = 길이 * 너비 / 2
print(f "{width} * {length} /2 = {area}" )
인쇄()
elif result == "원의 둘레:"
red = float(input("반지름을 입력하시요:"))
파이 = 3.14159
둘레 = 2 * 파이 * 라디안
pirnt(f "{rad} * {pi} * 2 = {perimeter}" )
File "/tmp/ipykernel_2473/3580174457.py", line 6 if result == "사각형의 넓이:" ^ SyntaxError: expected ':'
문제2 수정 사항
1. 들여쓰기(Indentation):
1.1.if, elif, else 문은 코드들은 반드시 일정한 간격(보통 공백 4칸)으로 들여써야 함
1.2. 원본 코드에서는 이 부분이 어긋나 있어 IndentationError가 발생
2. 콜론(:)의 위치: * if result == "사각형의 넓이:" 처럼 문자열 안에 콜론을 넣으면, 사용자가 딱 맞게 입력하지 않는 한 작동하지 않음.
조건문 자체의 문법인 콜론은 반드시 따옴표 밖("넓이":)에 위치해야 함.
3. 변수명 오타:red로 입력받고 rad로 계산하던 부분을 rad로 통일함.
pirnt 오타를 print로 수정함.
4. 수식 확인: 원의 넓이는 $S = \pi r^2$ 이므로 pi rad 2로 작성하는 것이 맞음 정삼각형의 넓이 계산 시 (length * width) / 2로 괄호를 추가
1. 들여쓰기(Indentation):
1.1.if, elif, else 문은 코드들은 반드시 일정한 간격(보통 공백 4칸)으로 들여써야 함
1.2. 원본 코드에서는 이 부분이 어긋나 있어 IndentationError가 발생
2. 콜론(:)의 위치: * if result == "사각형의 넓이:" 처럼 문자열 안에 콜론을 넣으면, 사용자가 딱 맞게 입력하지 않는 한 작동하지 않음.
조건문 자체의 문법인 콜론은 반드시 따옴표 밖("넓이":)에 위치해야 함.
3. 변수명 오타:red로 입력받고 rad로 계산하던 부분을 rad로 통일함.
pirnt 오타를 print로 수정함.
4. 수식 확인: 원의 넓이는 $S = \pi r^2$ 이므로 pi rad 2로 작성하는 것이 맞음 정삼각형의 넓이 계산 시 (length * width) / 2로 괄호를 추가
In [ ]:
# 질의 및 찾아보고 수정하기
list_kkkk = ["사각형의 넓이", "원의 넓이", "삼각형의 넓이", "원의 둘레"]
print("구할 수 있는 계산식은 " + ", ".join(list_kkkk) + " 등이 있습니다.")
result = input("구하려는 계산식을 입력하세요: ")
# 사용자가 입력한 값이 리스트에 있는지 확인
if result in list_kkkk:
if result == "사각형의 넓이":
width = float(input("사각형의 가로를 입력하시오 : "))
length = float(input("사각형의 높이를 입력하시오 : "))
area = length * width
print(f"{width} * {length} = {area}\n")
elif result == "원의 넓이":
rad = float(input("반지름을 입력하시오 : ")) # 변수명 통일 (red -> rad)
pi = 3.14159
circle_area = pi * rad ** 2
print(f"{rad}^2 * {pi} = {circle_area}\n")
elif result == "삼각형의 넓이":
width = float(input("삼각형의 밑변을 입력하시오 : "))
length = float(input("삼각형의 높이를 입력하시오 : "))
area = (length * width) / 2
print(f"{width} * {length} / 2 = {area}\n")
elif result == "원의 둘레":
rad = float(input("반지름을 입력하시오 : "))
pi = 3.14159
perimeter = 2 * pi * rad
print(f"{rad} * {pi} * 2 = {perimeter}\n") # pirnt 오타 수정
else:
print("목록에 없는 계산식입니다. 정확하게 입력해주세요.")
구할 수 있는 계산식은 사각형의 넓이, 원의 넓이, 삼각형의 넓이, 원의 둘레 등이 있습니다. 구하려는 계산식을 입력하세요: 원의 넓이 반지름을 입력하시오 : 18 18.0^2 * 3.14159 = 1017.8751599999999
#3. 로직과 순서도06 간단프로그램 작성하기 실습
문제3:사용자가 숫자를 원하는 개수만큼 입력한다.
출력 결과는, 가장 큰 수와 가장 작은수, 홀수와 짝수인지, 양수, 0, 음수의 판결 결과를 출력하는 프로그램을 구현하라
사용자가 입력하는 숫자와 숫자 사이를 구분하는 방법은 개발자가 선택하세요.
문제3:사용자가 숫자를 원하는 개수만큼 입력한다.
출력 결과는, 가장 큰 수와 가장 작은수, 홀수와 짝수인지, 양수, 0, 음수의 판결 결과를 출력하는 프로그램을 구현하라
사용자가 입력하는 숫자와 숫자 사이를 구분하는 방법은 개발자가 선택하세요.
In [ ]:
#3. 사용자가 숫자를 원하는 개수만큼 입력, 출력결과는 가장 큰 수와 가장 작은수, 홀수와 짝수인지 양수, 0, 음수의 판결 결과 출력하기
# 작은수 구하기
def max_value(*value):
max_value=0
for x in value:
if x > max_value:
max_value = x
return max_value
# 양수, 음수, 0 구하기
def nnnn(*vllue):
for x in value:
if x ==0:
print(f"{x}는 0 입니다.")
elif x>0:
print(f"{x}는 양수입니다.")
elif x>0:
print(f"{x}는 음수입니다")
return ""
# 홀수, 짝수 구하기
def hhh(*value):
for x in value:
if X % 2==0:
print("짝수입니다")
else:
print("홀수입니다")
retrun""
# 숫자입력 명령하기
str_value=input("원하는 숫자를 입력하시요:").split(" ")
int_value2 = list(map(int,str_value))
print(int_value2)
print(max_value(*int_value2))
print(min_value(*int_value2))
print(hhhhhh_value(*int_value2))
print(nnnnn(*int_value2))
File "/tmp/ipykernel_2595/1094724582.py", line 26 retrun"" ^ SyntaxError: invalid syntax
문제3 수정사항
1. 최솟값 알고리즘 (get_min_value):
기존 코드에서 max_value = 0으로 초기화하면, 입력값들이 모두 10, 20 같은 양수일 때 최솟값이 0으로 잘못 나올 수 있음.
그래서 리스트의 첫 번째 값(values[0])으로 시작하는 것이 안전
2. return 문은 반복문이 모두 끝난 뒤에 한 번만 실행되어야 함
3. 논리조건(check_sign): * 기존 코드에 elif x > 0이 중복되어 있음. 음수는 x < 0 또는 else 처리
4. 오타 수정:
vllue → values,
retrun → return,
X → x (대소문자 구분) 등 변수명과 키워드
1. 최솟값 알고리즘 (get_min_value):
기존 코드에서 max_value = 0으로 초기화하면, 입력값들이 모두 10, 20 같은 양수일 때 최솟값이 0으로 잘못 나올 수 있음.
그래서 리스트의 첫 번째 값(values[0])으로 시작하는 것이 안전
2. return 문은 반복문이 모두 끝난 뒤에 한 번만 실행되어야 함
3. 논리조건(check_sign): * 기존 코드에 elif x > 0이 중복되어 있음. 음수는 x < 0 또는 else 처리
4. 오타 수정:
vllue → values,
retrun → return,
X → x (대소문자 구분) 등 변수명과 키워드
In [ ]:
# 질의 및 찾아보고 수정하기
# 1. 작은 수(최솟값) 구하기
def get_min_value(*values):
# 첫 번째 값을 초기 최솟값으로 설정
min_val = values[0]
for x in values:
if x < min_val:
min_val = x
return min_val
# 2. 양수, 음수, 0 판별하기
def check_sign(*values):
for x in values:
if x == 0:
print(f"{x}는 0입니다.")
elif x > 0:
print(f"{x}는 양수입니다.")
else: # x < 0 인 경우
print(f"{x}는 음수입니다.")
return ""
# 3. 홀수, 짝수 판별하기
def check_even_odd(*values):
for x in values:
if x % 2 == 0:
print(f"{x}는 짝수입니다.")
else:
print(f"{x}는 홀수입니다.")
return ""
# --- 메인 실행부 ---
# 숫자 입력 받기
user_input = input("원하는 숫자를 여러 개 입력하세요 (공백으로 구분): ").split()
# 입력받은 문자열 리스트를 정수 리스트로 변환
int_values = list(map(int, user_input))
print("\n--- 결과 출력 ---")
print(f"입력된 리스트: {int_values}")
# 최솟값 출력
print(f"가장 작은 수: {get_min_value(*int_values)}")
# 홀짝 판별
check_even_odd(*int_values)
# 양수/음수/0 판별
check_sign(*int_values)
원하는 숫자를 여러 개 입력하세요 (공백으로 구분): 10 20 30 40 50 11 12 13 14 15 --- 결과 출력 --- 입력된 리스트: [10, 20, 30, 40, 50, 11, 12, 13, 14, 15] 가장 작은 수: 10 10는 짝수입니다. 20는 짝수입니다. 30는 짝수입니다. 40는 짝수입니다. 50는 짝수입니다. 11는 홀수입니다. 12는 짝수입니다. 13는 홀수입니다. 14는 짝수입니다. 15는 홀수입니다. 10는 양수입니다. 20는 양수입니다. 30는 양수입니다. 40는 양수입니다. 50는 양수입니다. 11는 양수입니다. 12는 양수입니다. 13는 양수입니다. 14는 양수입니다. 15는 양수입니다.
''
#4. 로직과 순서도06 간단프로그램 작성하기 실습
In [ ]:
# 세 수를 입력, 가장 큰수와 가장 작은수 사이의 수를 합산 계산하시요
num_list = [ ]
for i in range(0, 3):
value = int(input("숫자를 입력하시요:"))
num_list.append(value)
# 큰수 구하기 max, min 사용
print(max(num_list))
print(min(num_list))
result = 0
for i in range(min(num_list)+1, max(num_list)):result +=i
print(result)
숫자를 입력하시요:10 숫자를 입력하시요:20 숫자를 입력하시요:5 5 5 0
#5. 로직과 순서도06 간단프로그램 작성하기 실습
In [ ]:
#선택문제(어려움)
#도형(크리스마스트리 별)
for i in range(1,7):
print((5-i)*"",end="")
print("*"*(2*i-1))
print()
#도형(역방향 크리스마트트리 별)
for i in range(7,0,-1):
print((5-i)*"",end="")
print("*"*(2*-i-1))
print()
In [ ]:
# 해당 번호 도형을 출력하기
# 1번. 도형(좌이등변삼각형 별)
for i in range(1, 7):
print(i*"*")
print()
# 2번. 도형(우이등변삼각형 별)
for i in range(1, 7):
print((6-i)*"", end="")
print("*"*i)
print()
#3번. 도형(좌이등변 역삼각형 별)
for i in range(6,0,-1):
print(i*"*")
print()
#4번. 도형(우이등변 역삼각형 별)
for i in range(6,0,-1):
print(""*(6-i),end="")
print(i*"*")
print()
#5번. 도형(크리스마스트리 별)
for i in range(1,7):
print((5-i)*"",end="")
print("*"*(2*i-1))
print()
#6번. 도형(역방향 크리스마트트리 별)
for i in range(7,0,-1):
print((5-i)*"",end="")
print("*"*(2*-i-1))
print()
#7번. 도형(다이아몬드형 별)
for i in range(1,4):
print(""*(4-i),end="")
print((i*2-1)*"*")
for i in range(4,0,-1):
print(""*(4-i),end="")
print((i*2-1)*"*")
문제5 수정사항
1. 공백의 역할: print(" " * (4-i))에서 큰따옴표 사이에 공백이 있어야 별을 오른쪽으로 밀어주어 중심을 맞출 수 있음
2. 홀수 공식 (2i - 1): 다이아몬드나 피라미드를 만들 때 별의 개수를 1, 3, 5, 7... 순으로 늘리기 위해 사용하는 표준 공식
3. 연결성: 위 코드에서는 중앙 가장 긴 줄(별 7개)이 하단 루프의 시작(range(4, 0, -1))에서 출력되도록 설계됨
4. 가장 긴 줄이 하나만 있게 하고 싶다면 하단 루프의 범위를 range(3, 0, -1)로 수정하면 됨
5. 파이썬의 문자열 메서드인 center()를 사용하면 공백 계산 없이도 코드 작성. 근데 기초단계에서는 함수내부외부 함수 구분해서 사용 반복 숙달
별그램은 어렵다 도움을 받아야 한다
1. 공백의 역할: print(" " * (4-i))에서 큰따옴표 사이에 공백이 있어야 별을 오른쪽으로 밀어주어 중심을 맞출 수 있음
2. 홀수 공식 (2i - 1): 다이아몬드나 피라미드를 만들 때 별의 개수를 1, 3, 5, 7... 순으로 늘리기 위해 사용하는 표준 공식
3. 연결성: 위 코드에서는 중앙 가장 긴 줄(별 7개)이 하단 루프의 시작(range(4, 0, -1))에서 출력되도록 설계됨
4. 가장 긴 줄이 하나만 있게 하고 싶다면 하단 루프의 범위를 range(3, 0, -1)로 수정하면 됨
5. 파이썬의 문자열 메서드인 center()를 사용하면 공백 계산 없이도 코드 작성. 근데 기초단계에서는 함수내부외부 함수 구분해서 사용 반복 숙달
별그램은 어렵다 도움을 받아야 한다
In [ ]:
# 질의 및 찾아보고 수정하기
# 상단 부분 (1행부터 3행까지)
for i in range(1, 4):
print(" " * (4 - i), end="") # 공백 출력 (4-i개)
print("*" * (2 * i - 1)) # 별 출력 (홀수 개)
# 하단 부분 (4행부터 1행까지 역순)
for i in range(4, 0, -1):
print(" " * (4 - i), end="") # 공백 출력 (4-i개)
print("*" * (2 * i - 1)) # 별 출력 (홀수 개)
#06. 간단한 프로그램 함수로 구현하기 (달력만들기)
문제 6. 년,월을(원하는 방식으로) 입력받아 해당 년도와 월을 정렬해서 깔끔하게 출력하세요
* 윤년 계산 (그레고리력의 윤년 규칙)
서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. (1988년, 1992년, 1996년*, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년, 2032년, 2036년, 2040년, 2044년 ...)
서력 기원 연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년, 2300년, 2500년...)
서력 기원 연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다. (2000년, 2400년...)
기원후 1년 1월 1일, 월요일 이탤릭체 텍스트*
예) 입력: 1년 3월 달력을 보여줘
1월의 31일과 2월의 28일을 더하고, 일주일 7일로 나누면, 나머지 3(월,화,수)은 2월 마지막에 출력된 요일들입니다.
3월 1일을 출력하는 시작일은 나머지 3의 다음날인 (목요일)입니다.
In [ ]:
# 윤년 판별 조건을 확인한다
# 조건1 년도가 4로 나누어 떨어지면 윤년
# 조건2 그중 100으로 나누어 떨어지면 평년
# 조건3 그중 400으로 나누어 떨어지면 윤년
def print_calendar(year,month):
# 1월부터 12월까지 일수 (평년 일때)
days_in_month = [31,28,31,30,31,30,31,31,30,31,30,31]
# 윤년은 2월이 28일이거나 29일이다 4년마다 28일인 월이 있다
if (year % 4 == 0 and year % 100!=0) or (year % 400 == 0):
days_in_month[1] = 29
total_days = 0
# 일수가 366일 경우와 365일인 경우
for y in range(1, year):
if (y % 4 == 0 and y % 100! = 0) or (y % 400 == 0):
total_days += 366
else:
total_days += 365
for m in range (month - 1):
total_days += days_in_month[m]
start_day = datatime % 7
print(f"\n {year}년 {month}월")
print(" 월 화 수 목 금 토 일")
# 시작 요일 전까지 공백으로 출력
print(""*start_day, end="")
# 날짜 출력
for day in range(1, days_in_month[month-1] + 1):
# 아래 f" day:2는 일자를 두자리로 나타내려고, {}사이띄기"를 해주어 일자와 요일의 간격을 맞추어 준다
print(f"{day:2d} ", end="")
if (start_day + day) % 7 == 0:
print()
print("\n")
#구문 오류 찾아보고 수정하기
# print(f"{day:2d}", end="")
# 달력 1과 10일의 경우 자리수를 맞추기 위해 {day:2d}라고 적어서 깔끔하게 정리함
def print_calendar(year,month):
days_in_month = [31,28,31,30,31,30,31,31,30,31,30,31]
if (year % 4 == 0 and year % 100 !=0) or (year % 400 == 0):
days_in_month[1] = 29
total_days = 0
for y in range(1, year):
if (y % 4 == 0 and y % 100 !=0) or (y % 400 == 0):
total_days +=366
else:
total_days +=365
for m in range(month - 1):
total_days +=days_in_month[m]
start_day = (total_days + 1) % 7
print(f"\n {year}년 {month}월")
print("일 월 화 수 목 금 토")
print(" "*start_day, end="")
for day in range(1, days_in_month[month-1]+1):
# 아래 f" day:2는 일자를 두자리로 나타내려고, {}사이띄기"를 해주어 일자와 요일의 간격을 맞추어 준다
print(f"{day:2} ", end="")
if (start_day + day) % 7 ==0:
print()
print("\n")
print_calendar(2026, 4)
2026년 4월 일 월 화 수 목 금 토 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
In [ ]:
if __name__ == "__main__":
try:
y = int(input("년도를 입력하세요 (예: 2026): "))
m = int(input("월을 입력하세요 (1-12): "))
if 1 <= m <= 12:
print_calendar(y, m)
else:
print("월은 1에서 12 사이로 입력해주세요.")
except ValueError:
print("숫자만 입력 가능합니다.")
년도를 입력하세요 (예: 2026): 2030 월을 입력하세요 (1-12): 12 2030년 12월 일 월 화 수 목 금 토 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
In [ ]:
def print_calendar(year,month):
days_in_month = [31,28,31,30,31,30,31,31,30,31,30,31]
if (year % 4 == 0 and year % 100 !=0) or (year % 400 == 0):
days_in_month[1] = 29
total_days = 0
for y in range(1, year):
if (y % 4 == 0 and y % 100 !=0) or (y % 400 == 0):
total_days +=366
else:
total_days +=365
for m in range(month - 1):
total_days +=days_in_month[m]
start_day = (total_days + 1) % 7
print(f"\n {year}년 {month}월")
print("일 월 화 수 목 금 토")
print(" "*start_day, end="")
for day in range(1, days_in_month[month-1]+1):
print(f"{day:2} ", end="")
if (start_day + day) % 7 ==0:
print()
print("\n")
if __name__ == "__main__":
try:
y = int(input("년도를 입력하세요 (예: 2026): "))
m = int(input("월을 입력하세요 (1-12): "))
if 1 <= m <= 12:
print_calendar(y, m)
else:
print("월은 1에서 12 사이로 입력해주세요.")
except ValueError:
print("숫자만 입력 가능합니다.")
년도를 입력하세요 (예: 2026): 2029 월을 입력하세요 (1-12): 5 2029년 5월 일 월 화 수 목 금 토 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
과제6. 달력 만들기 [[추가]]
조건 : 기원후 1년 1월 1일, 월요일
예) "입력:" 1년 3월 달력을 보여줘
1월의 31일과 2월의 28일을 더하고, 일주일 7일로 나누면, 나머지 3(월,화,수)은 2월 마지막에 출력된 요일들입니다.
3월 1일을 출력하는 시작일은 나머지 3의 다음날인 (목요일)입니다.
조건 : 기원후 1년 1월 1일, 월요일
예) "입력:" 1년 3월 달력을 보여줘
1월의 31일과 2월의 28일을 더하고, 일주일 7일로 나누면, 나머지 3(월,화,수)은 2월 마지막에 출력된 요일들입니다.
3월 1일을 출력하는 시작일은 나머지 3의 다음날인 (목요일)입니다.
In [ ]:
# 3월 1일 입력
def print_calendar_year_1_march():
year = 1
month = 3
days_in_month = 31
# 시작 요일 계산 (기원후 서기 1년 1월 1일 월요일)
# 1월(31일) + 2월(28일) = 총 59일이 지났으므로 60번째 날인 3월 1일(목) 요일을 계산
# 일주일 7일로 나누면, 나머지 3(월,화,수)는 2월의 마지막 출력된 요일들
# (0:월, 1:화, 2:수, 3:목, 4:금, 5:토, 6:일)
start_weekday = 59 % 7
# 달력 헤더 출력 (예,1년 3월)
print(f"1년 3월의 달력을 보여줘")
print(f" {year}년 {month}월")
print("월 화 수 목 금 토 일")
# 1일 시작 전까지 공백 채우기
print(" " * start_weekday, end="")
# 날짜 출력
for day in range(1, days_in_month + 1):
# 날짜를 2자리 공간에 맞춰 출력 (정렬)
print(f"{day:2d} ", end="")
# 요일 확인 후 일요일(6)이면 줄바꿈
if (day + start_weekday) % 7 == 0:
print()
print() # 마지막 줄바꿈
# 함수 실행
print_calendar_year_1_march()
1년 3월의 달력을 보여줘 1년 3월 월 화 수 목 금 토 일 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
In [ ]:
# 3월 1일 입력
def print_calendar_year_1_march():
year = 1
month = 3
days_in_month = 31
# 시작 요일 계산 (기원후 서기 1년 1월 1일 월요일)
# 1월(31일) + 2월(28일) = 총 59일이 지났으므로 60번째 날인 3월 1일(목) 요일을 계산
# 일주일 7일로 나누면, 나머지 3(월,화,수)는 2월의 마지막 출력된 요일들
# (0:월, 1:화, 2:수, 3:목, 4:금, 5:토, 6:일)
start_weekday = 59 % 7
# 달력 헤더 출력 (예,1년 3월)
print(f"1년 3월의 달력을 보여줘")
print(f" {year}년 {month}월")
print("월 화 수 목 금 토 일")
# 1일 시작 전까지 공백 채우기
print(" " * start_weekday, end="")
# 날짜 출력
for day in range(1, days_in_month + 1):
# 날짜를 2자리 공간에 맞춰 출력 (정렬)
print(f"{day:2d} ", end="")
# 요일 확인 후 일요일(6)이면 줄바꿈
if (day + start_weekday) % 7 == 0:
print()
print() # 마지막 줄바꿈
# 함수 실행
result = input("보고 싶은 연월을 입력하세요. 예문, 1년 3월을 보여줘 라고 입력하세요:")
print(result)
print_calendar_year_1_march()
보고 싶은 연월을 입력하세요. 예문, 1년 3월을 보여줘 라고 입력하세요:1년 3월을 보여줘 1년 3월을 보여줘 1년 3월의 달력을 보여줘 1년 3월 월 화 수 목 금 토 일 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
06. 간단한 프로그램 함수로 구현하기 (야구게임 만들기) : 2-1팀
문제 7. 숫자 야구 만들기
방법은 개발자가 선택하세요.
입력받은 값은, 예외가 없도록 만들어 주세요.
게임을 시작하면, 컴퓨터가 랜덤한 숫자를 0~9 사이에 중복되지 않게 순서를 정해서 저장합니다.
매 라운드, 사용자에게 예상한 숫자 3개를 입력 받습니다.
fi in input ("사용자가 입력한 숫자와 랜덤한 숫자가 맞고, 입력 순서까지 맞으면, 1strike) ("사용자가 입력한 숫자와 랜덤한 숫자는 맞지만, 입력 순서가 맞지 않으면", 1ball) ("숫자가 맞지 않고, 위치도 맞지 않으면", out)
입력 후 결과에 대해 출력합니다. print strike, print ball, print out
9라운드까지 진행됩니다.
팀과제로 진행되어 참고 및 찾아보고 수정하기
문제 7. 숫자 야구 만들기
방법은 개발자가 선택하세요.
입력받은 값은, 예외가 없도록 만들어 주세요.
게임을 시작하면, 컴퓨터가 랜덤한 숫자를 0~9 사이에 중복되지 않게 순서를 정해서 저장합니다.
매 라운드, 사용자에게 예상한 숫자 3개를 입력 받습니다.
fi in input ("사용자가 입력한 숫자와 랜덤한 숫자가 맞고, 입력 순서까지 맞으면, 1strike) ("사용자가 입력한 숫자와 랜덤한 숫자는 맞지만, 입력 순서가 맞지 않으면", 1ball) ("숫자가 맞지 않고, 위치도 맞지 않으면", out)
입력 후 결과에 대해 출력합니다. print strike, print ball, print out
9라운드까지 진행됩니다.
팀과제로 진행되어 참고 및 찾아보고 수정하기
In [112]:
#팀과제. 야구 게임 만들기
#딕셔너리 score 생성해서 만들기
score = {"strike": 0,
"ball": 0,
"out": 0,
"round": 1}
#strike, ball,out 라운드가 끝날때마다 리셋
def reset(score):
score["strike"] = 0
score["ball"] = 0
score["out"] = 0
#랜덤 리스트
import random
def com(lst): #lst는 매개변수용 가짜 #실제 리스트는 comp에 저장
while len(lst) < 3:
ran_num = random.randint(1,9)
if ran_num not in lst:
lst.append(ran_num)
comp = []
#유저 리스트
def user(lst_a): #lst_a는 매개변수용 가짜 #실제 리스트는 throw에 저장
lst_a.clear()
while len(lst_a) < 3:
user_num = int(input("enter number 1 ~ 9 : "))
if user_num in lst_a:
print("중복된 숫자는 입력할 수 없습니다.") #같은 숫자 여럿 입력은 불가
elif user_num not in lst_a:
lst_a.append(user_num)
#조건 판별, display에서 comp, throw 넣어줄것
def counter(compu, throwi):
for i in range(3):
if comp[i] == throw[i]:
score["strike"] = score["strike"] + 1
elif throw[i] in comp:
score["ball"] = score["ball"] + 1
if throw[i] not in comp:
score["out"] = score["out"] + 1
return compu, throwi
# 보이는 화면
def display():
com(comp)
# print("computer", comp) 정답인지 유무 확인 구문
print(f" {score["round"]} ROUND")
user(throw)
counter(comp,throw)
# 조건을 판별할때 함수comp, throw 대입시킴
if score["strike"] == 0 and score["ball"] == 0:
print(" [ OUT ]")
else:
print("[",score["strike"],"strike",score["ball"],"ball","]")
def base_ball():
while score["round"] < 9: #라운드 9까지 반복
display()
score["round"] = score["round"] + 1
if score["strike"] == 3: #3스트라이크 나오면 즉시 종료
print("======WIN======")
break
elif score["round"] == 9: #9라운드 도달시 종료 + 정답 출력
print("======LOSE======")
print(f"정답은 {comp}였습니다.")
break
reset(score)
base_ball()
[ OUT ] 1 ROUND
--------------------------------------------------------------------------- NameError Traceback (most recent call last) /tmp/ipykernel_1602/1765013459.py in <cell line: 0>() 71 reset(score) 72 ---> 73 base_ball(),,,,,,
6번 수정사항
#07. 간단한 프로그램 함수로 구현하기 (Lotto키오스크 만들기)
문제 7. 함수 활용 Lotto 만들기 (팀과제 2팀)
문제 7. 함수 활용 Lotto 만들기 (팀과제 2팀)
In [ ]:
# 팀별 구분 과제로 참고하여 작성 및 실습
# 함수를 활용하여 로또 구매를 위한 키오스크 프로그램 개발 실습하기
def lotto():
# 값 입력받기
recieve_data = input("System : 몇개를 구매 하시겠어요 ? : ")
try:
recieve_data=recieve_data.strip()
int_recieve_date = int(recieve_data)
if int_recieve_date > 6:
print("범위를 벗어났습니다. ")
return 0
elif int_recieve_date < 0:
print("범위를 벗어났습니다. ")
return 0
how_do = input("System : 1. 자동 2. 반자동 3. 수동 ")
how_do=how_do.strip()
int_how_do = int(how_do)
if int_how_do > 4:
print("범위를 벗어났습니다. ")
return 0
elif int_how_do < 0:
print("범위를 벗어났습니다. ")
return 0
if int_how_do ==1:
#자동
auto(int_recieve_date)
elif int_how_do == 2:
semi_auto(int_recieve_date)
elif int_how_do == 3:
#수동
manual(int_recieve_date)
#금액에 (단위 원)을 추가 입력함
print(f"금액(원) : {int_recieve_date * 1000} 입니다")
except:
print("비정상적인 값이 입력이 되었습니다. ")
def auto(number):
current_tim = datetime.today()
print(f" Looto 6/45")
print(f"발행일 : {current_tim.strftime('%Y / %m / %d %H : %M : %S' )}")
looto_number = []
for i in range(number):
while len(lotto_number):
ranint_value = randint(1,45)
if randint_value in lotto_number:
pass
else:
lotto_number.append(randint_value)
print(f"|{lotto_number[0]:3} | {lotto_number[1]:3} | {lotto_number[2]:3}|{lotto_number[3]:3}| {lotto_number[4]:3} | {lotto_number[5]:3}|")
lotto_number = []
def semi_auto(number):
lotto_number = []
current_tim = datetime.todat()
print(f" Lotto 6/45")
print(f"발행일 : {currrent_tim.strftime('%Y / %m / %d %H : %M : %S' )}")
print("System : 2. 반자동을 선택하셨습니다.", "\n", "[0을 입력하시면, 나머지는 자동으로 입력됩니다.]")
for j in range(number):
while True:
if len(lotto_number) > 5:
break
str_value = input(f"Lotto {len(lotto_number)+1}번 수동 입력:")
if str_value == "0":
break
else:
int_value=int(str_value)
lotto_number.append(int_value)
# 0을 눌려 탈출 또는 6개를 다 입력할수도 있음
while len(lotto_number) < 6:
randint_value = randint(1,45)
if randint_value in lotto_number:
pass
else:
lotto_number.append(randint_value)
print(f"|{lotto_number[0]:3} | {lotto_number[1]:3} | {lotto_number[2]:3}|{lotto_number[3]:3}| {lotto_number[4]:3} | {lotto_number[5]:3}|")
def manual(number):
lotto_number = []
current_tim = datetime.today()
print(f" Lotto 6/45")
print(f"발행일 : {current_tim.strftime('%Y / %m / %d %H : %M : %S' )}")
print("System : 2.반자동을 선택하셨습니다.", "\n", "[0을 입력하시면, 나머지는 자동으로 입력됩니다.]")
for j in range(number):
while True:
if len(lotto_number) > 5:
break
str_value = input(f"Lotto{len(lotto_number)+1}번 수동입력 : ")
int_value = int(str_value)
lotto_number.append(int_value)
print(f"|{lotto_number[0]:3} | {lotto_number[1]:3} | {lotto_number[2]:3}|{lotto_number[3]:3}| {lotto_number[4]:3} | {lotto_number[5]:3}|")
lotto()
System : 몇개를 구매 하시겠어요 ? : 1 System : 1. 자동 2. 반자동 3. 수동 1 Looto 6/45 발행일 : 2026 / 04 / 17 03 : 21 : 06 비정상적인 값이 입력이 되었습니다.
In [ ]:
def lotto():
# 값 입력받기
recieve_data = input("System : 몇개를 구매 하시겠어요 ? : ")
try:
recieve_data=recieve_data.strip()
int_recieve_date = int(recieve_data)
if int_recieve_date > 6:
print("범위를 벗어났습니다. ")
return 0
elif int_recieve_date < 0:
print("범위를 벗어났습니다. ")
return 0
how_do = input("System : 1. 자동 2. 반자동 3. 수동 ")
how_do=how_do.strip()
int_how_do = int(how_do)
if int_how_do > 4:
print("범위를 벗어났습니다. ")
return 0
elif int_how_do < 0:
print("범위를 벗어났습니다. ")
return 0
if int_how_do ==1:
#자동
auto(int_recieve_date)
elif int_how_do == 2:
semi_auto(int_recieve_date)
elif int_how_do == 3:
#수동
manual(int_recieve_date)
#### 금액에 (단위 원)을 추가하였음
print(f"금액(원) : {int_recieve_date * 1000} 입니다")
except:
print("비정상적인 값이 입력이 되었습니다. ")
def auto(number):
current_tim = datetime.today()
print(f" Lotto 6/45")
print(f"발행일 : {current_tim.strftime('%Y/%m/%d %H:%M:%S')}")
lotto_number =[]
for i in range(number):
while len(lotto_number) < 6:
randint_value = randint(1,45)
if randint_value in lotto_number:
pass
else:
lotto_number.append(randint_value)
print(f"|{lotto_number[0]:3}|{lotto_number[1]:3}|{lotto_number[2]:3}|{lotto_number[3]:3}|{lotto_number[4]:3}|{lotto_number[5]:3}|")
lotto_number=[]
def semi_auto(number):
lotto_number = []
current_tim = datetime.today()
print(f" Lotto 6/45")
print(f"발행일 : {current_tim.strftime('%Y/%m/%d %H:%M:%S')}")
print("System : 2.반자동을 선택하셨습니다.", "\n", "[0을 입력하시면, 나머지는 자동으로 입력됩니다.]")
for j in range(number):
while True:
if len(lotto_number) > 5:
break
str_value = input(f"Lotto {len(lotto_number)+1}번 수동 입력 :")
if str_value == "0":
break
else:
int_value = int(str_value)
lotto_number.append(int_value)
#0 눌러 탈출 OR 6개 다채움
while len(lotto_number) < 6:
randint_value = randint(1, 45)
if randint_value in lotto_number:
pass
else:
lotto_number.append(randint_value)
print(f"|{lotto_number[0]:3}|{lotto_number[1]:3}|{lotto_number[2]:3}|{lotto_number[3]:3}|{lotto_number[4]:3}|{lotto_number[5]:3}|")
lotto_number = []
def manual(number):
lotto_number = []
current_tim = datetime.today()
print(f" Lotto 6/45")
print(f"발행일 : {current_tim.strftime('%Y/%m/%d %H:%M:%S')}")
print("System : 2.반자동을 선택하셨습니다.", "\n", "[0을 입력하시면, 나머지는 자동으로 입력됩니다.]")
for j in range(number):
while True:
if len(lotto_number) > 5:
break
str_value = input(f"Lotto {len(lotto_number) + 1}번 수동 입력 :")
int_value = int(str_value)
lotto_number.append(int_value)
print(
f"| {lotto_number[ 0 ]: 3 } | {lotto_number[ 1 ]: 3 } | {lotto_number[ 2 ]: 3 } | {lotto_number[ 3 ]: 3 } | {lotto_number[ 4 ]: 3 } | {lotto_number[ 5 ]: 3 } |" )
lotto_number = []
숫자 카드 맞추기 놀이()
System : 몇개를 구매 하시겠어요 ? : 5 System : 1. 자동 2. 반자동 3. 수동 1 Lotto 6/45 발행일 : 2026/04/17 06:02:58 | 14| 39| 35| 23| 29| 7| | 31| 37| 16| 10| 45| 38| | 18| 5| 31| 2| 33| 29| | 44| 43| 4| 15| 21| 32| | 7| 20| 4| 14| 35| 21| 금액(원) : 5000 입니다
Untitled7(간단프로그램260417-1-8번) (1).html
0.33MB
Untitled7(간단프로그램260417-1-8번).ipynb
0.33MB
'학습 로그 > Python3' 카테고리의 다른 글
| D+15 [Team Project] 팀프로젝트 준비 (0) | 2026.04.27 |
|---|---|
| D+14 [ PyCharm] Module, Package, Library 개념 (0) | 2026.04.21 |
| D+11 [Python] 리스트 실습 (0) | 2026.04.16 |
| D+12 [Python] 함수를 활용한 간단한 프로그램 만들기 (0) | 2026.04.16 |
| D+12 [Python] 함수 예제 풀이 (1) | 2026.04.16 |