본문 바로가기
학부 자료/Python

[Python] 파이썬 기초 7/20, 조건문 반복문 3, 리스트 내포(리스트 컴프리헨션), 내장함수

by jackMK 2023. 11. 7.

<내용정리>


- 관련 파일

7일차_221128.py
0.00MB
python_test_07_반복문_정답.py
0.00MB
python_test_07-2_반복문2_정답.py
0.00MB
python_test_07-3_별_정답.py
0.00MB

 

 

- 본문

## break
#0부터 99까지 출력
i = 0
while True:
    print(i, end=', ')
    i += 1
    if i == 100:
        break

while True:
    city = input('대한민국의 수도는 어디인가요? :')
    if city == '서울' or city == 'seoul' or city == 'SEOUL':
        print('정답입니다')
        break
    else:
        print('오답입니다. 다시 시도하세요')

hobbies = []
while True:
    hobby = input('취미를 입력하세요(종료는 엔터) : ')
    if hobby == '':
        print('입력한 취미가 모두 저장되었습니다')
        break
    else:
        hobbies.append(hobby)
print(hobbies)

# ex) 반복문을 이용한 커피 자판기 프로그램(커피만 판매, 커피 가격 300원, 한번에 한잔만 주문가능)
coffee = 3 # 커피의 개수
while True:
    money = int(input('돈을 넣어주세요 : '))
    if money == 300:
        print('커피 나왔습니다')
        coffee -= 1
        print(f'남은 커피의 양은 {coffee}개입니다')
    elif money > 300:
        print('커피 나왔습니다')
        coffee -= 1
        print(f'거스름돈 {money - 300}원을 받으세요')
        print(f'남은 커피의 양은 {coffee}개입니다')
    else:
        print('금액이 부족합니다')
        print(f'{money}원을 돌려드리겠습니다')
        print(f'남은 커피의 양은 {coffee}개입니다')

    if coffee == 0:
        print('커피가 다 떨어졌습니다. 판매를 중지합니다')
        break


## continue
# ex) 0~10 사이의 수 중 홀수만 출력
a = 0
while a < 10:
    a += 1
    if a % 2 == 0:
        continue # continue 바로 위의 조건식을 만족하면 while문 맨 처음으로 올라간다
    print(a)

fruits = ['사과', '귤']
count = 3 # 입력해야 할 남은 과일의 수
while count > 0:
    fruit = input('어떤 과일을 저장할까요? : ')
    if fruit in fruits:
        print('동일한 과일이 있습니다')
        continue
    fruits.append(fruit) # 포함되지 않았다면 리스트에 추가한다
    count -= 1
    print(f'입력이 {count}번 남았습니다')
print(f'5개의 과일은 {fruits}입니다')\

count = 0
total = 0
while count < 5:
    n = int(input(f'{count+1}번째 숫자를 입력하세요 : '))
    if n <= 0:
        print('0 이하의 정수는 처리할 수 없습니다')
        continue
    total += n
    count += 1
print(f'입력된 5개의 양의 정수의 총 합은 {total}입니다')


## 리스트 내포(리스트 컴프리헨션)(p121)
# <형식>
# 리스트 = [표현식 for 변수 in 반복가능객체]

# append 사용
num = []
for n in [1, 2, 3]:
    num.append(n * 2) # n에 2를 곱한 후 num리스트에 추가
print('append 사용 : ', num)

# 리스트 내포 사용
num2 = [n * 2 for n in [1, 2, 3]]
print('리스트 내포 사용 : ', num2)

# append, if 사용
li = [1, 2, 3, 4, 5]
num3 = []
for n in li:
    if n % 2 == 1:
        num3.append(n * 2)
print('append, if 사용: ', num3)

# 리스트 내포, if 사용(조건을 만족하는 데이터만 출력)
num4 = [n * 2 for n in li if n % 2 == 1]
print('리스트 내포, if 사용 : ', num4)


### 내장함수
## 문자열 내장 함수
# chr() 함수 : 유니코드를 문자로 변환
print(chr(48))
print(chr(49))
print(chr(65))
print(chr(66))
print(chr(97))
print(chr(98))

# ord() 함수 : 문자를 유니코드로 변환
print(ord('A'))
print(ord('한'))

# eval() 함수 : 문자열로 된 값을 계산
print('100 + 200')
print(eval('100 + 200'))

a = 10
print(eval('a * 5'))
print(eval('min(1, 2, 3)')) # min(): 최소값
print(eval('max(1, 2, 3)')) # max(): 최대값

# format() 함수 : 형식을 갖춘 문자열
print(format(10000, ','))
print(format(10000, '_'))

expr = input('계산식을 입력하세요 : ')
result = eval(expr)
print(type(result)) # int or float
print(expr + '=' + str(result)) # +는 문자열 연결 연산자

## 숫자 내장 함수
# abs() 함수 : 절대값
print(abs(10))
print(abs(-10))

# divmod() 함수 : 몫과 나머지
print(divmod(10, 3)) # 결과는 튜플형식 ( , )
d, m = divmod(5, 2)
print(d, m, sep=', ')

# pow() 함수 : 거듭제곱
print(pow(2, 10))
print(pow(10, -3))

# round() 함수 : 반올림 값
print(round(1.5))
print(round(1.4))
print(round(1.55, 1)) # 소수 첫째자리까지

# sum() 함수 : 합계
li = [1, 2, 3, 4 ,5]
print(sum(li))

 


- 문제 및 정답

1)

# 반복문
'''
[문제] while 문을 이용해서 1부터 100까지의 홀수만 출력하기

[출력결과]
1
3
5
...
97
99


[정답]
i = 1
while i < 100:
    print(i)
    i += 2 # i = i + 2
'''



'''
[문제] for문을 이용해서 1~5까지의 숫자들을 차례대로 출력하기

[출력결과]
1 2 3 4 5


[정답]
for i in range(1, 6, 1):
    print(i, end = ' ')
    
'''



'''
[문제] for문을 이용해서 1부터 10까지의 합을 구하시오.

[출력결과]
1부터 10까지의 합 : 55


[정답]
hap = 0

for i in range(1, 11, 1):
    hap += i                       # hap = hap + i

print('1부터 10까지의 합 : {}' .format(hap))  

'''



'''
[문제] for문을 이용해서 1부터 100사이의 정수 중 5와 7의 공배수 출력하기

[출력결과]
35 : 5와 7의 공배수!!
70 : 5와 7의 공배수!!

[정답]
for i in range(1, 101):
    if i % 5 == 0 and i % 7 == 0:
        print(i, ': 5와 7의 공배수!!')
        
'''

 

 

2)

# 반복문 추가 문제
'''
[문제] while 문을 이용. 무한 루프를 사용해 입력한 두 숫자의 합계를 반복해서 계산하기

[출력결과]
더할 첫 번째 수를 입력하세요 : 55
더할 두 번째 수를 입력하세요 : 22
55 + 22 = 77
더할 첫 번째 수를 입력하세요 : 77
더할 두 번째 수를 입력하세요 : 120
77 + 120 = 197
더할 첫 번째 수를 입력하세요 : 


[정답]
hap = 0

while True:
    a = int(input('더할 첫 번째 수를 입력하세요 : '))
    b = int(input('더할 두 번째 수를 입력하세요 : '))
    hap = a + b
    print(f'{a} + {b} = {hap}')

'''



'''
[문제] 위의 문제에서 참고. while문 이용.
위의 문제에서 덧셈 외에 뺄셈, 곱셈, 나눗셈, 나머지까지 계산해보자.
연산자가 아닌 문자를 입력하면 반복문을 종료하게 하자.

[출력결과]
계산할 첫 번째 수를 입력하세요 : 30
계산할 두 번째 수를 입력하세요 : 20
계산할 연산자를 입력하세요 : -
30 - 20 = 10
계산할 첫 번째 수를 입력하세요 : 30
계산할 두 번째 수를 입력하세요 : 20
계산할 연산자를 입력하세요 : *
30 * 20 = 600
계산할 첫 번째 수를 입력하세요 : 30
계산할 두 번째 수를 입력하세요 : 20
계산할 연산자를 입력하세요 : /
30 / 20 = 1.5
계산할 첫 번째 수를 입력하세요 : 30
계산할 두 번째 수를 입력하세요 : 20
계산할 연산자를 입력하세요 : %
30 % 20 = 10
계산할 첫 번째 수를 입력하세요 : 30
계산할 두 번째 수를 입력하세요 : 20
계산할 연산자를 입력하세요 : !
연산자를 잘못 입력하셨습니다.
계산을 종료합니다!


[정답]
while True:
    a = int(input('계산할 첫 번째 수를 입력하세요 : '))
    b = int(input('계산할 두 번째 수를 입력하세요 : '))
    ch = input('계산할 연산자를 입력하세요 : ')
    
    if ch == '+':
        print(f'{a} + {b} = {a + b}')
    elif ch == '-':
        print(f'{a} - {b} = {a - b}')
    elif ch == '*':
        print(f'{a} * {b} = {a * b}')
        
    elif ch == '/':
        print(f'{a} / {b} = {a / b}')
    elif ch == '%':
        print(f'{a} % {b} = {a % b}')
    else:
        print('연산자를 잘못 입력하셨습니다.')
        print('계산을 종료합니다!')
        break

'''



'''
[문제] for문을 이용해서 500과 1000사이에 있는 홀수의 합계 구하기

[출력결과]
500과 1000사이에 있는 홀수의 합계 : 187500


[정답]
hap = 0

for i in range(501, 1001, 2):
    hap += i # hap = hap + i

print(f'500과 1000사이에 있는 홀수의 합계 : {hap}')
    
'''



'''
[문제] for문을 이용.
1부터 키보드로 입력한 값까지의 합계 구하기

[출력결과]
값을 입력하세요 : 123
1부터 123까지의 합계 : 7626


[정답]
hap = 0
num = int(input('값을 입력하세요 : '))

for i in range(1, num + 1):
    hap += i

print(f'1부터 {num}까지의 합계 : {hap}')

'''



'''
[문제] for문을 이용. 위의 문제 참고.
시작값과 끝값, 증가값까지 사용자에게 숫자를 입력받아 시작값과 끝값까지의 합계 구하기

[출력결과]
시작값을 입력하세요 : 3
끝값을 입력하세요 : 300
증가값을 입력하세요 : 3
3에서 300까지 3씩 증가시킨 값의 합계 : 15150

[정답]
hap = 0
num1 = int(input('시작값을 입력하세요 : '))
num2 = int(input('끝값을 입력하세요 : '))
num3 = int(input('증가값을 입력하세요 : '))

for i in range(num1, num2+1, num3):
    hap += i

print(f'{num1}에서 {num2}까지 {num3}씩 증가시킨 값의 합계 : {hap}')
        
'''

 

 

3)

# for문을 이용한 별 모양 출력하기

'''
[문제] for문을 이용해서 사각형으로 별 출력하기

[출력결과]
*****
*****
*****
*****
*****


[정답]
for i in range(5):
    for j in range(5):
        print('*', end = '')
    print()
    
'''

'''
[문제] for문을 이용해서 계단식으로 별 출력하기

[출력결과]
*
**
***
****
*****


[정답1]
for i in range(5):
    for j in range(i+1):
        print('*', end = '')
    print()
    
[정답2[
for i in range(5):
    for j in range(5):
        if j <= i:
            print('*', end = '')
    print()
    
'''

'''
[문제] for문을 이용해서 대각선으로 별 출력하기

[출력결과]
*    
 *   
  *  
   * 
    *
    

[정답]
for i in range(5):
    for j in range(5):
        if j == i:
            print('*', end = '')
        else:
            print(' ', end = '')
    print()
    
'''

'''
[문제] for문을 이용해서 역삼각형으로 별 출력하기

[출력결과]
*****
 ****
  ***
   **
    *


[정답]
for i in range(5):                   
    for j in range(5):               
        if j < i:
            print(' ', end ='')
        else:
            print('*', end ='')
    print()

'''

loading