학습 로그/Python3

D+11 [Python] 간단한 프로그램(로직&순서도) 작성 실습

goodjop79 님의 블로그 2026. 4. 15. 21:47

◇ 일자: 2026년 4월 15일 (수)
◇ 내용 :
  1. 개인상담 
  2. 간단한 프로그램 작성 실습하기   
  
    #1. 로직과 순서도06 간단프로그램 작성하기 실습
 사용자에게 숫자 2개를 입력받고, 사칙연산 기호(+, -, *, /, %, //) 를 입력받으면, 그 연산 결과를 출력하라.
 공백(화이트 스페이스)를 입력받아도 무시되도록 구현
# 간단 프로그램 1번

num1 = int(input("계산할 첫번째 숫자를 입력하시요:"))
num2 = int(input("계산할 두번째 숫자를 입력하시요:"))
value = input("사칙연산 기호(+,-,*,/)를 입력하시요:")
# if value in value_str_list:: 변수 value(예: "+")가 문자열 리스트인 value_str_list(예: ["+", "-", "*", "/"])
 안에 존재하는지 확인한다.
   # a = value_str_list.index(value): 만약 존재한다면, 그 값이 리스트의 몇 번째 위치(인덱스)에 있는지 찾아 변수 a에 저장
   # 예를 들어, value가 "+"이고 리스트의 첫 번째 요소라면 a는 0이 된다,

>>> if value in value_str_list:
       a = value_str_list.index(value)
 

# 이 코드는 f-string을 사용하여 결과를 출력한다
   # value_list[a]: 실제 계산을 수행하는 함수들이 담긴 리스트. 앞서 구한 인덱스 a를 사용하여 리스트에서 특정 함수를 꺼내옴
   # 예: value_list = [add, sub, mul, div]일 때, a가 0이면 add 함수를 선택함.
   # (num1, num2): 선택된 함수에 두 숫자 num1과 num2를 인자로 전달하여 즉시 실행

>>> print("f{num1} {value} {num2}={value_list[a](num1,num2)}")
이 방식은 if...elif...else를 길게 쓰는 대신, "기호 리스트"와 "함수 리스트"의 순서를 맞춰놓고 인덱스로 매칭하는 효율적인 구조


# 질의 및 찾아보고 수정하기
***문제1 수정 사항

변수 선언: value_str_list를 생성하여 if문에서 검사

함수 연결: value_list에 실제 함수 객체들을 넣어 index 번호로 해당 함수를 바로 실행

f-string 문법: print("f{...}")를 print(f"{...}")로 수정하여 중괄호 안의 코드 정상 실행

예외 처리: 나누기 연산 시 0으로 나누는 경우를 대비한 로직 추가

 
#2. 로직과 순서도06 간단프로그램 작성하기 실습

# 간단프로그램 2번
# 계산 가능한 목록을 리스트에 저장한다.
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}") # 계산 과정과 결과를 출력한다.
        print() # 한 줄 띄운다

    # 원의 넓이를 구하는 경우
    elif result == "원의 넓이": 
        rad = float(input("반지름을 입력하시오: ")) # 반지름을 입력받는다 (변수명을 rad로 통일).
        pi = 3.14159 # 원주율 값을 설정한다
        circle_area = pi * rad ** 2 # 반지름의 제곱에 원주율을 곱한다.
       # import math # 수학 계산을 위한 math 모듈을 불러온다.
      # math.pow(반지름, 2)를 사용하여 지수 계산을 수행한다.
      # math.pi를 사용하여 직접 입력한 3.14159보다 훨씬 정밀한 원주율 값을 사용한다.
      # rad2 파이썬에서 가장 빠르고 직관적인 거듭제곱 연산자임
      # pow({rad},2) 내장함수로 가독성이 좋고 세번째 인자를 넣어 나머지 연산(pow(x,y,z)도 가능
      # math.pow(rad,2) 결과값을 항상 실수(float)로 반환하며, 수학적 의도를 명확히 전달시 사용
       print(f"math.pow({rad}, 2) * math.pi = {circle_area}") # 계산 결과를 출력한다.
       print() 

    # 삼각형의 넓이를 구하는 경우
    elif result == "삼각형의 넓이": 
        width = float(input("삼각형의 밑변을 입력하시오 : ")) # 밑변 길이를 입력받는다.
        length = float(input("삼각형의 높이를 입력하시오 : ")) # 높이 길이를 입력는다
        area = length * width / 2 # (밑변 * 높이) / 2    # 공식으로 넓이를 구한다
    # f-string을 사용하여 계산 과정과 결과를 문자열로 출력
    #  {width}: 삼각형의 밑변 값이 대입
    #  {length}: 삼각형의 높이 값이 대입
    #  / 2: 삼각형 넓이 공식인 (밑변 * 높이 / 2)를 시각적으로 보여짐
    #  {area}: 위에서 미리 계산된 넓이 변수값이 출력
        print(f"{width} * {length} / 2 = {area}")
        print() 

    # 원의 둘레를 구하는 경우
    # 사용자가 입력한 메뉴가 '원의 둘레'일 경우 실행되는 조건문
    elif result == "원의 둘레": 
        
        # 사용자로부터 반지름 값을 입력받아 소수점 계산이 가능한 실수형(float)으로 변환하여 rad 변수에 저장
        rad = float(input("반지름을 입력하시오: ")) 
        
        # 원주율(π)의 근삿값인 3.14159를 pi라는 변수에 할당하여 계산의 기준으로 삼는다
        pi = 3.14159 
        
        # 원의 둘레 공식인 '2 * π * 반지름'을 적용하여 계산한 결과값을 perimeter 변수에 저장
        perimeter = 2 * pi * rad 
        
        # f-string 포맷을 사용하여 사용자가 입력한 반지름, 설정된 원주율, 그리고 최종 계산된 둘레를 수식 형태로 화면에 보여준다
        print(f"{rad} * {pi} * 2 = {perimeter}")


# 질의 및 찾아보고 수정하기
** 문제2 수정 사항

  1. 들여쓰기(Indentation): 1.1.if, elif, else 문은 코드들은 반드시 일정한 간격(보통 공백 4칸)**으로 들여써야 함 1.2. 원본 코드에서는 이 부분이 어긋나 있어 IndentationError가 발생
  2. 콜론(:)의 위치: * if result == "사각형의 넓이:" 처럼 문자열 안에 콜론을 넣으면, 사용자가 딱 맞게 입력하지 않는 한 작동하지 않음. 조건문 자체의 문법인 콜론은 반드시 따옴표 밖("넓이":)에 위치해야 함.
  3. 변수명 오타:red로 입력받고 rad로 계산하던 부분을 rad로 통일함. pirnt 오타를 print로 수정함.
  4. 수식 확인: * 원의 넓이는 S=πr2 이므로 pi * rad ** 2로 작성하는 것이 맞음 정삼각형의 넓이 계산 시 (length * width) / 2로 괄호를 추가

  
#3. 로직과 순서도06 간단프로그램 작성하기 실습

#3. 사용자가 숫자를 원하는 개수만큼 입력, 출력결과는 가장 큰 수와 가장 작은수, 홀수와 짝수인지 양수, 0, 음수의 판결 결과 출력
# 가장 큰 수를 구하는 함수 정의
def max_value(*value):
    max_v = 0  # 최댓값을 저장할 변수를 0으로 초기화
    for x in value: # 입력받은 숫자들을 하나씩 꺼내어 반복
        if x > max_v: # 현재 숫자(x)가 기존 최댓값보다 크면 실행
            max_v = x # 최댓값을 현재 숫자(x)로 업데이트
    return max_v # 반복이 모두 끝난 후 최종적인 최댓값을 반환

# 양수, 음수, 0을 판별하는 함수 정의
def nnnn(*value): # 매개변수 오타(vllue)를 수정
    for x in value: # 입력된 숫자 리스트에서 하나씩 꺼낸다
        if x == 0: # 숫자가 0인 경우를 확인
            print(f"{x}는 0 입니다.")  # 0임을 출력
        elif x > 0: # 숫자가 0보다 큰 경우(양수)를 확인
            print(f"{x}는 양수입니다.") # 양수임을 출력
        else: # 위의 조건에 해당하지 않는 경우(음수)를 확인
            print(f"{x}는 음수입니다.") # 음수임을 출력
    return "" # 함수 종료 후 빈 문자열을 반환하여 None 출력을 방지

# 홀수, 짝수를 판별하는 함수 정의
def hhh(*value):
    for x in value: # 입력된 숫자들을 순회
        if x % 2 == 0: # 2로 나눈 나머지가 0이면 실행 (대소문자 X를 x로 수정).
            print(f"{x}는 짝수입니다") # 짝수임을 출력
        else: # 2로 나눈 나머지가 0이 아니면 실행
            print(f"{x}는 홀수입니다") # 홀수임을 출력
    return "" # 함수 종료 후 빈 문자열을 반환

# 사용자로부터 숫자를 입력받는 구간
str_value = input("원하는 숫자를 공백으로 구분하여 입력하시오: ").split(" ") # 문자열로 입력받아 공백 기준으로 나눈다.
int_value2 = list(map(int, str_value))  # 입력받은 문자열 리스트를 숫자(정수) 리스트로 변환
print(int_value2) # 변환된 숫자 리스트를 화면에 출력

# 정의한 함수들을 호출하여 결과를 확인
print("최댓값:", max_value(*int_value2)) # 가장 큰 수를 찾아 출력
print("판별 결과:") # 구분선을 위해 출력
print(hhh(*int_value2)) # 홀수/짝수 판별 함수를 실행
print(nnnn(*int_value2)) # 양수/음수/0 판별 함수를 실행


# 질의 및 찾아보고 수정하기

**문제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 (대소문자 구분) 등 변수명과 키워드
#4. 로직과 순서도06 간단프로그램 작성하기 실습
# 세 수를 입력, 가장 큰수와 가장 작은수 사이의 수를 합산 계산하시요
# 결과를 저장할 빈 리스트를 생성
num_list = [ ] 

 
# 0부터 2까지 총 3번 반복하여 숫자를 입력받는다.
for i in range(0, 3):
    # 사용자로부터 숫자를 입력받아 정수형(int)으로 변환
    value = int(input("숫자를 입력하시요:"))
    # 입력받은 숫자를 리스트(num_list)의 끝에 추가
    num_list.append(value)

# 리스트에 저장된 숫자들 중 가장 큰 값을 찾아 출력
print(f"가장 큰 수: {max(num_list)}")

# 리스트에 저장된 숫자들 중 가장 작은 값을 찾아 출력
print(f"가장 작은 수: {min(num_list)}")

# 사이의 숫자들을 합산할 결과 변수를 0으로 초기화
result = 0

# 최솟값보다 1 큰 수부터 최댓값 직전의 수까지 범위를 설정하여 반복.
for i in range(min(num_list) + 1, max(num_list)):
    # 범위 내에 해당하는 숫자(i)를 result 변수에 더하기
    result += i

# 가장 큰 수와 가장 작은 수 사이에 있는 정수들의 합계를 출력
print(f"가장 큰 수와 작은 수 사이의 합: {result}")


#5. 로직과 순서도06 간단프로그램 작성하기 실습

# 해당 번호 도형을 출력하기

# 1번. 도형 (좌이등변삼각형 별)
for i in range(1, 7): # 1부터 6까지 6회 반복
    print(i * "*") # 반복 횟수(i)만큼 별을 출력하여 아래로 갈수록 길어짐
    print() # 가독성을 위해 한 줄을 띄운다

# 2번. 도형 (우이등변삼각형 별)
for i in range(1, 7): # 1부터 6까지 6회 반복
    print((6 - i) * " ", end="") # 전체 길이 6에서 별 개수를 뺀 만큼 왼쪽 공백을 출력
    print("*" * i)   # 공백 뒤에 별을 붙여 우측 정렬 효과를 준다
    print() # 줄 바꿈을 수행한다

# 3번. 도형 (좌이등변 역삼각형 별)
for i in range(6, 0, -1):   # 6부터 1까지 1씩 감소하며 반복
    print(i * "*")    # i의 값이 줄어듦에 따라 별의 개수도 점차 줄어든다
    print()   # 줄 바꿈을 수행

# 4번. 도형 (우이등변 역삼각형 별)
for i in range(6, 0, -1):  # 6부터 1까지 감소하며 반복
    print(" " * (6 - i), end="")  # 줄어드는 별의 개수만큼 공백을 늘려 우측 정렬을 유지
    print(i * "*")    # 남은 공간에 별을 출력
    print()   # 줄 바꿈을 수행

# 5번. 도형 (크리스마스트리 별)
for i in range(1, 7):   # 1층부터 6층까지 반복
    print((6 - i) * " ", end="")  # 삼각형 모양을 만들기 위해 왼쪽에 공백을 출력
    print("*" * (2 * i - 1)) # 홀수 개(1, 3, 5...)로 별을 찍어 중심을 맞춘다
    print() # 줄 바꿈을 수행

# 6번. 도형 (역방향 크리스마스트리 별)
for i in range(6, 0, -1): # 6층부터 1층까지 역순으로 반복
    print((6 - i) * " ", end="") # 아래로 갈수록 공백을 늘려 역삼각형 형태를 만든다
    print("*" * (2 * i - 1))  # 별의 개수를 홀수 개로 유지하며 줄여나간다
    print() # 줄 바꿈을 수행

# 7번. 도형 (다이아몬드형 별)
# 위쪽 삼각형 부분 (1층부터 3층까지)
for i in range(1, 4): 
    print(" " * (4 - i), end="")   # 피라미드 형태를 위한 왼쪽 공백 출력
    print((i * 2 - 1) * "*") # 중심 기준 홀수 개의 별 출력

# 아래쪽 역삼각형 부분 (4층부터 1층까지)
for i in range(4, 0, -1): 
    print(" " * (4 - i), end="") # 아래로 갈수록 공백이 늘어나는 역피라미드 형태
    print((i * 2 - 1) * "*") # 별의 개수를 줄여가며 다이아몬드 하단을 완성



 4. 결 론
처음에는 주어진 문제를 제대로 이해하지 못하고, 임의로 숫자를 부여해서 기초구문 실습을 했다.
그러나 생각하다 보니 이게 아닌가? 팀원들의 사례를 벤치마킹 해보니 예시문 그대로를 간단한 프로그램우로 구현해 보는 것이다.
함수구문은 역시나 초보자에겐 어렵게 느껴진다. 수없이 반복하며 좀더 많은 숙달이 필요할거 같다.
 

Untitled7(간단한프로그램260415) (1).ipynb
0.02MB