본문 바로가기

Challenge/SK 뉴스쿨 정보보안과 3기

SK 뉴스쿨 프로그래밍 기초 파이썬 (2022.04.07)

728x90
반응형

 

4/07 수업 정리 (python)

 

 

 

반복문

 

 

주어진 조건에 맞게 코드 블록을 반복

 

 

 

 

while문

 

조건이 참인 경우 반복 실행, 조건이 거짓이면 반복문 종료

반복문 내에서 break 명령을 기입하면 현재의 반복문 탈출,

반대로 반복문 내에서 continue 명령을 기입하면 현재의 반복문의 처음으로 돌아가서 조건을 비교

 

 

 

 

while 실습 코드

i = 1
while i <= 10:
	print(f"{i}번째")
	i = i + 1

 

 

while break 실습 코드

n = 10

while True:
    n = n - 1
    print(f"현재 {n}입니다.")

    if n == 0:
        print("n의 값은 0입니다.")
        break

 

 

while continue 실습 코드

i = 0
while i < 10:
    i = i + 1
    if i % 2 == 0:
        continue # i가 짝수면 다시 맨위로 즉, 홀수만 출력되게
    print(i)

 

 


 

while 연습문제1

 

조건

  • while 문으로 무한 반복 수행
  • “점수를 입력해주세요.” 출력 구문과 함께 점수를 입력받음
  • 국어, 영어, 수학 점수를 순서대로 입력
  • 해당 점수의 총합과 평균 출력
  • “다시 입력하시겠습니까?” 출력 구문과 함께 yes or no 입력 받음
  • yes 일 경우 처음부터 다시 수행
  • no 일 경우 프로그램 종료
while True:
    korean_score = int(input("점수를 입력해주세요. "))
    english_score = int(input("점수를 입력해주세요. "))
    math_score = int(input("점수를 입력해주세요. "))

    sum_score = korean_score + english_score + math_score
    avg_score = sum_score / 3
    print(f"점수의 총합: {sum_score}, 점수의 평균: {avg_score}")

    check = input("다시 입력하시겠습니까? yes or no ")
    if check == "yes":
        continue
    elif check == "no":
        break

 

 

 


 

 

for문

 

in 뒤에 오는 데이터의 집합의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입

 

 

 

for문 실습 코드

a = ((1, 2), (3, 4), (5, 6))
for first, second in a:
    print(first, second)

 

for문 continue 실습 코드

scores = [90, 25, 67, 45, 80]
for score in scores:
    if score < 60:
        print(f"{score}점: 불합격")
        continue
    print(f"{score}점: 합격")

 

 

리스트 안의 for문 실습 코드

temp_list = [i for i in range(1, 10)]
print(temp_list)

# [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

 

리스트 안의 for문 실습 코드2

temp_list = [i for i in range(1, 10) if i % 2 == 0]
print(temp_list)

# [2, 4, 6, 8]

 

 

연습문제 1

  • 리스트 내포를 활용하여 5단과 6단만 리스트에 넣기
  • 리스트는 하나만 있어야 됨
  • 코드는 출력문 포함 두 줄만 허용
temp_list = [i * x for i in range(5, 7) for x in range(1, 10)]
print(temp_list)

 

 

연습문제2

  • "i’ve failed over and over and over again in my life and that is why I succeed."
  • 위 문장에서 리스트 내포를 활용하여 영어의 모음인 “a,e,i,o,u”를 제거한 상태로 리스트를 만들고 해당 리스트를 문자열로 출력하세요.

내 코드:

text = "i've failed over and over and over again in my life and that is why i succeed."
vowels = ["a", "e", "i", "o", "u"]
text_list = [text[i] for i in range(len(text)) if text[i] not in vowels]
print("".join(text_list))

 

다른 코드:

vowels = "aeiou"
sentence = "i've failed over and over and over again in my life and that is why i succeed."
str_list = [data for data in sentence if data not in vowels]
print("".join(str_list))

 

 

 


 

 

함수(function)

 

 

 

함수의 사용 이유 : 코드 재사용 가능, 프로그램의 복잡성 감소, 프로그램이 모듈화 됨에 따라 효율성 증가

 

 

매개변수(parameter) vs 인수(argument)

def _sum(a, b): # a와 b는 매개변수(parameter)
    print(a + b)

_sum(1, 2) # 1과 2는 인수(argument)

 

매개변수 : 함수에 전달된 값을 받는 변수

인수 : 함수를 호출할 때 전달하는 입력값

 


 

 

스코핑 룰(Scoping rule)

 

 

지역 영역(Local scope) : 함수 내부의 공간

전역 영역(Global scope) : 함수 외부의 공간

내장 영역(Built-in scope) : Python 자체에서 정의된 공간

 

이름을 검색하는 규칙(Local scope → Global scope → Built-in scope 순서)

앞 글자를 따서 LGB 규칙이라고도 불림

 

 

global 선언된 변수는 Local scope에서 Global scope로 변경

 

a = 10 # 함수 외부 의 공간(Global scope)에 위치한 변수

def func(x):
	global a # 함수 내부의 공간(Local scope)에 위치한 변수 a에 global 선언
	return x + a # a라는 변수가 존재하는지 L, G, B 순으로 찾음

print(func(1))

 

 


 

 

람다(lambda)

 

def와 동일한 역할을 하고 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰임

 

 

 

람다 실습 코드

def add(x, y):
    return x + y
result = add(3, 4)
print(result) # 7

add = lambda x, y: x + y
result = add(3, 4)
print(result) # 7

둘 다 결과는 동일

 

 


 

과제 :

반복문과 조건문을 이용하여 사용자가 입력하는 숫자에 따라 구구단을 출력하는 코드를 작성하시오.

 

조건 1 : 사용자가 입력하는 것은 숫자이나 exit 라는 문자를 입력했을 시에는 무한루프 반복문이 종료되면서 프로그램 실행이 종료되도록 하여야함.

 

조건 2 : 어떤 숫자가 들어와도 구구단을 출력할 수 있도록 하여야 함

 

조건 3 : 양수 또는 exit 외 다른 문자가 입력될 시에는 재입력하도록 되돌아가기


조건 1 설정하기:

num = input("숫자를 입력해 주세요: ")
    if num == "exit":
        break

num이라는 변수에 input 함수를 통해 입력받은 값을 저장시키고

만약 exit라는 문자열을 받게 된다면 즉시 프로그램을 종료 시킨다.

 

 

조건 2 & 3 설정하기:

zero_to_nine = [f"{i}" for i in range(0,10)]

zero_to_nine이라는 변수를 만들고 리스트 안에 0부터 9까지 숫자를 넣어준다.

단, 주의할 점은 문자열로 받아서 첫 번째로 설정한 num 변수와 비교할 때 에러가 발생하지 않게 한다.

 

 

while True:
    num = input("숫자를 입력해 주세요: ")
    num_temp = [num[i] for i in range(len(num))]
    if num == "exit":
        break

while 문 안에 num_temp라는 변수를 설정해주고

변수 num을 통해 입력받은 길이 만큼 리스트 형태로 저장해 준다.

 

 

if num == "exit":
	break
elif num_temp[0] not in zero_to_nine:
	continue
else:
	num = int(num)

elif문을 활용해 만약 입력받은 값이 숫자인지 문자열인지 구분하는 기준점인 zero_to_nine 변수와 비교를 해봤을 때,

만약 num_temp 변수 값에 숫자가 없으면 다시 처음으로 되돌아가고,

그렇지 않다면 처음 input으로 문자열 형태로 받은 num 변수를 int로 형변환 해준다.

 

 

 

for i in range(10):
	print(f"{num} X {i} = {num * i}")
break

마지막으로 for 문을 통해 1~9 까지 넘을 곱하고 그 값을 출력한다.

출력이 끝나면 break 문을 통해 while문이 종료하는 동시에 프로그램이 종료된다.

 

 

전체 코드:

zero_to_nine = [f"{i}" for i in range(0,10)]

while True:
    num = input("숫자를 입력해 주세요: ")
    num_temp = [num[i] for i in range(len(num))]
    if num == "exit":
        break
    elif num_temp[0] not in zero_to_nine:
        continue
    else:
        num = int(num)

    for i in range(1, 10):
        print(f"{num} X {i} = {num * i}")
    break

 

 

결과(숫자를 입력했을 때):

 

결과(문자 포함 숫자를 입력하거나 exit외의 문자를 입력했을 때):

 

결과(exit 문자를 입력했을 때):

728x90
반응형