본문 바로가기

파이썬/파이썬 예제 코드

[파이썬 예제코드] 반복문 (for, while)

# 【for 반복문 구조】
# for 변수 in 시퀀스(리스트 또는 튜플, 문자열)):
#     <구현할 내용>
#     .
#     .
# planets 이름을 가진 리스트 타입의 변수를 만들었습니다.
from builtins import enumerate

planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']
# planets에 있는 요소 하나하나 씩이 planet 변수에 할당 되고,
# 마지막 요소까지 할당이 되고 for 문 끝까지 도달하면,
# for 문을 빠져나옵니다.
for planet in planets:
    print(planet)
# 문법은 for 사용할 변수 in 반복할 시퀀스입니다.

# 반복문 예제
# 정수형으로 정해진 횟수만큼 반복 할 수도 있고, 리스트 및 튜플을 사용 할 수도 있습니다.
muliplicands = {2, 2, 2, 3, 3, 5}
product = 1
# 리스트에서 값을 하나씩 가져와 product 변수에 곱하기를 합니다.
# -> 1*2*2*2*3*3*5 => 360
for mult in muliplicands:
    product = product * mult
    print(product)
print(product)

# 문자열의 글자에도 반복문 사용이 가능하다.
# isupper() 메소드는 대문자인지를 묻고 참, 거짓으로 리턴한다.
s = 'steganograpHy is the practicE of conceaLing a file, message, image, or video within another fiLe, message, image, Or video.'
# 변수에 담긴 문장에서 모든 대문자를 출력합니다.
for char in s:
    if char.isupper():
        # print 함수에 end 파라미터 고정 값을 ''로 지정했기 때문에, 출력시
        # 다음 라인에 출력하지 않고, 붙어서 출력합니다.
        print(char, end='')

# range() 는 숫자의 시퀀스를 반환하는 함수이며 반복문에서 자주 사용됩니다.
# 예를 들어 어떤 조건을 5번 반복하고 싶다면 방법은 아래와 같이 작성할 수 있습니다.
for i in range(5) :
    print("숫자를 출력해 봅시다. i =", i)

r = range(5)
print(r)

# 인덱스와 리스트요소 두가지를 모두 얻고 싶을경우 enumerate 내장함수 사용
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons))
print(list(enumerate(seasons)))

# 홀수인경우에 *2를 하는 함수
def double_odds(nums):
    for i, num in enumerate(nums):
        # num 변수가 홀수인 경우에 아래 코드를 실행한다.
        if num % 2 == 1:
            nums[i] = num * 2
            print(nums[i])

x = list(range(10))

# 정의된 double_odds 함수를 호출
double_odds(x)

list(enumerate(['a','b']))

print(list(enumerate(['a','b'])))

#
x = 0.125
numerator, denominator = x.as_integer_ratio()
print(numerator, denominator )

#
nums = [
    ('one', 1, 'I'),
    ('two', 2, 'II'),
    ('three', 3, 'III'),
    ('four', 4, 'IV'),
]

for word, integer, roman_numeral in nums:
    print(integer, word, roman_numeral, sep=' = ', end='; ')

# while 반복문
# for가 정해진 조건내의 대한 반복문이었다면 while은 조건이 만족할때까지 반복하는 반복문 입니다.
# while 조건문:
#     <구현할 내용>
#     .
#     .
# while 반복문은 조건이 참일 경우에만 실행이 됩니다.
i = 0
# i라는 변수가 10보다 작은 경우에만 while문 안에 있는 코드를 실행 합니다.
while i < 10:
    print(i, end=' ')
    i += 1

# List Comprehension
# iterable한 오브젝트를 생성하기 위한 방법 중 하나로 파이썬에서 사용할 수 있는 유용한 기능
squares = [n**2 for n in range(10)]
print(squares)

# 기존 방식으로 구현한 코드
squares_01 = []
for n in range(10):
    squares_01.append(n**2)
    print(squares_01)

# 일반 for문과 List Comprehension 비교
# 일반 for 문
# 리스트 내부의 음수의 수를 반환하는 함수입니다.
def count_negatives(nums):
    n_negative = 0
    for num in nums:
        if num < 0:
            n_negative = n_negative + 1
    return n_negative

count_negatives([5, -1, -2, 0, 3])
print(count_negatives([5, -1, -2, 0, 3]))

# LC를 사용한 예시
def count_negatives(nums):
    return len([num for num in nums if num < 0])

count_negatives([5, -1, -2, 0, 3])
print(count_negatives([5, -1, -2, 0, 3]))

#
def count_negatives(nums):

    # num < 0 조건문
    # [5, -1, -2, 0, 3
    # F, T, T, F, F => 2
    return sum([num < 0 for num in nums])

count_negatives([5, -1, -2, 0, 3])
print(count_negatives([5, -1, -2, 0, 3]))

# 위의 세 코드는 모두 동일한 기능을 하는 코드지만 모두 다른 형태를 취하고 있습니다. 가능하다면 코드를 줄이는 것이 좋지만 항상 그런 것은 아닙니다.
# 일반적으로 중요한점은 다음과 같습니다.
# 높은 가독성
# 직관적인 코드
# 가독성과 직관적인 코드 요소를 고려 했을 때, count_negatives예시의 마지막 코드는 가장 짧은 코드이지만, 좋은 코드라고 볼 수 없습니다.