// 실습 코드
# 10이하의 짝수 출력하기
i = 1
while i <= 10:
if i % 2 == 0:
print(i)
i += 1
i = 90
while i:
if i == 100:
print("축하합니다. %d번째 방문자입니다." %i)
break
i += 1
print("감사합니다. 이벤트가 종료되었습니다.")
i = 0
while i < 11:
i += 1
if i == 6:
continue
if i % 2 == 0:
print(i)
i = 0
while i < 11:
i += 1
if i == 6:
pass
if i % 2 == 0:
print(i)
i = 0
while i < 11:
i += 1
if i == 6:
break
if i % 2 == 0:
print(i)
for x in range(0, 5):
print(x)
for x in range(5, -1, -1):
print(x)
word = 'hello!'
for w in word:
print(w)
for a, b in [(2, 1), (2, 2), (2, 3), (2, 4)]:
print(a * b)
이중 반복문
# 구구단 2단과 3단 출력하기
for i in range(2, 4):
print("===", i, "단===")
for j in range(1, 10):
print(i * j)
# 1부터 10까지 합을 구하시오. (range 함수를 이용하시오.)
sum = 0
for i in range(1, 11):
sum += i
print(sum)
연습 문제
# 사용자로부터 정수를 입력받아, 해당 정수만큼 "안녕"을 출력하세요.
num = int(input("정수를 입력하세요: "))
for i in range(num):
print("안녕")
# 사용자로부터 정수를 입력받아, 입력된 정수만큼 별(*)찍기
# 왼쪽 아래가 직각인 n만큼의 높이를 가지는 직각삼각형
num = int(input("정수를 입력하세요: "))
for i in range(num):
print("*" * (i+1))
for i in range(num):
print("*" * (i+1), end = ' ')
# (1) 계단형, n을 입력받아, n만큼 줄을 만들고 계단 형태로 별찍기
num = int(input("정수를 입력하세요: "))
for i in range(num):
print(" "* i + "*" * num)
# (2) 오른쪽 아래가 직각인 n만큼의 높이를 가지는 직각삼각형
num = int(input("정수를 입력하세요: "))
for i in range(num):
print(" " * (num-i) + "*" * (i+1))
# (3) 왼쪽 위가 직각인 n만큼의 높이를 가지는 직각삼각형(역삼각형)
num = int(input("정수를 입력하세요: "))
for i in range(num):
print("*" * (num-i) + " " * i)
# (4) 오른쪽 위가 직각인 n만큼의 높이를 가지는 직각삼각형
num = int(input("정수를 입력하세요: "))
for i in range(num):
print(" " * i + "*" * (num-i))
# (5) n만큼 높이를 가지는 홀수개의 별 피라미드
num = int(input("정수를 입력하세요: "))
for i in range(1, num+1):
print(" " * (num-i) + "*" * (2 * i -1))
# (1) x = [3, 6, 9, 20, -7, 5] 의 값의 모든 요소에 10을 곱한뒤 출력하세요
x = [3, 6, 9, 20, -7, 5]
for i in x:
print(i*10)
# 심화 : 출력과 리스트 x 의 값에도 모두 10을 곱해주세요
x = [3, 6, 9, 20, -7, 5]
for i in range(0, len(x)):
x[i] = x[i]*10
print(x)
# (2) y = {"math": 70, "science": 80, "english": 20} 의 값의 모든 요소에 10을 더한뒤 출력하세요
y = {"math": 70, "science": 80, "english": 20}
for i in y.values():
print(i+10)
# 심화 : 출력과 딕셔너리 y 의 값에도 모두 10을 더해주세요
y = {"math": 70, "science": 80, "english": 20}
for key in y:
val = y[key]
y[key] = y[key] + 10
print("%s : %d" %(key, val + 10))
print(y)
# (3) 숫자를 입력받고 입력받은 정수의 구구단을 출력하세요
num = int(input("정수를 입력하세요: "))
for i in range(1, 10):
print(f"{num} * {i} = {num * i}")
# 구구단을 1단부터 9단까지 출력하세요
for i in range(1, 10):
print("%d %s" %(i, "단"))
for j in range(1, 10):
print("%d * %d = %d" %(i, j, i*j))
print("\n")
# # 1~100 임의의 숫자를 맞추시오
import random
true_value = random.randint(1, 100)
input_value = 99999 # 임의의 값 할당
print('숫자를 맞춰보세요(1~100)')
while true_value != input_value:
input_value = int(input())
if input_value > true_value: # 사용자의 입력값이 true_value보다 클 때
print("숫자가 너무 큽니다.")
elif input_value == true_value:
print(f"정답입니다. 입력한 숫자는 {true_value}입니다.")
else:
print("숫자가 너무 작습니다.") # 사용자의 입력값이 true_value보다 작을 때
# word = ["school", "game", "piano", "science", "hotel", "mountain"] 중 글자수가 6글자 이상인 문자를 모아 새로운 리스트를 생성하세요
word = ["school", "game", "piano", "science", "hotel", "mountain"]
a = []
for i in range(len(word)):
if len(word[i]) >= 6:
a.append(word[i])
print(a)
# 1-100까지 숫자중 3과 5의 공배수일경우 "3과 5의 공배수"
# 나머지 숫자중 3의 배수일경우 "3의 배수"
# 나머지 숫자중 5의 배수일경우 "5의 배수"
# 모두 해당되지 않을 경우 그냥 숫자를 출력하세요.
for i in range(1, 101):
if i % 3 == 0:
if i % 5 == 0:
print(f"{i} : 3과 5의 공배수")
else:
print(f"{i} : 3의 배수")
elif i % 5 == 0:
print(f"{i} : 5의 배수")
else:
print("%d" %i)
# 심화: 1-입력한숫자까지의 숫자중
num = int(input("1~100 사이의 숫자를 입력하세요: "))
for i in range(1, num+1):
if i % 3 == 0:
if i % 5 == 0:
print(f"{i} : 3과 5의 공배수")
else:
print(f"{i} : 3의 배수")
elif i % 5 == 0:
print(f"{i} : 5의 배수")
else:
print("%d" %i)
# 사용자로부터 숫자를 계속 입력받다가 s or S를 입력하면 합계출력(단, 다른 문자는 받을 수 없다.)
sum = 0
while True:
num = input()
if (num == 's' or num == 'S'):
break
else:
sum += int(num)
print(sum)
# 변수를 활용하여 루프를 탈출하는 방법
c = 0
d = 1
while (d==1):
a = input()
if (a=='s' or a =='S'):
d=0
else:
a = int(a)
c += a
print(c)
# 사람별 평균을 구하라.
# kor_score = [39, 69, 20, 100, 80]
# math_score = [32, 59, 85, 30, 90]
# eng_score = [49, 70, 48, 60, 100]
# midterm_score = [kor_score, math_score, eng_score]
kor_score = [39, 69, 20, 100, 80]
math_score = [32, 59, 85, 30, 90]
eng_score = [49, 70, 48, 60, 100]
midterm_score = [kor_score, math_score, eng_score]
# 학생별 총점 계산을 위한 리스트 초기화
student_score = [0] * len(kor_score)
# 각 과목의 점수를 학생별로 합산
for subject in midterm_score:
for i in range(len(student_score)):
student_score[i] += subject[i]
# 학생별 평균 계산
student_average = []
for score in student_score:
average = score / len(midterm_score)
student_average.append(average)
print(student_average)
# return이 있는 경우
def add(a, b):
result = a + b
return result
c = add(3, 5)
print(c)
# return이 없는 경우
def sub(a, b):
print("뺄셈의 결과는 %d입니다." %(a - b))
return
d = sub(1, 2)
print(d) # None
def f(x):
print(x + 10)
f(10)
c = f(10)
print(c) # None
# 함수를 사용하지 않을 때
for i in range(1, 10):
print(f'====={i}단=====')
for j in range(1, 10):
print(i * j)
# 함수를 사용할 때
def gugu(num):
print(f'====={num}단=====')
for i in range(1, 10):
print(f'{num} x {i} = {num * i}')
gugu(2)
def Sandwich(eggs):
eggs.append(1) # 기존 객체의 주소값에 [1] 추가
eggs = [2, 3]
ham = [0]
Sandwich(ham)
print(ham)
print(eggs) # eggs는 지역변수라 접근이 불가능함
# name 'eggs' is not defined
swap_value(x, y) (값에 의한 호출)def swap_value(x, y):
temp = x
x = y
y = temp
동작 방식: 이 함수는 값을 복사해서 사용합니다.
a[1]과 a[2]의 값을 함수로 전달하면, 새로운 변수 x와 y가 그 값을 복사받습니다.x와 y를 바꿔도 원본 리스트 a에는 아무 영향을 주지 않습니다.메모리:
x와 y를 생성하여, a[1]과 a[2]의 값을 복사합니다.x와 y는 메모리에서 사라집니다.결과: 리스트 a는 변경되지 않습니다.
=> 즉, 함수에 인자를 넘길 때 값만 넘기고 함수 내에 인자 값 변경시에 호출자에게 영향을 주지 않는다.
swap_offset(offset_x, offset_y) (참조에 대한 호출)def swap_offset(offset_x, offset_y):
temp = a[offset_x]
a[offset_x] = a[offset_y]
a[offset_y] = temp
동작 방식: 이 함수는 리스트 a의 인덱스(참조 위치)를 전달받아 해당 위치의 값을 직접 바꿉니다.
a[offset_x]와 a[offset_y]의 값을 교환합니다.a 자체가 수정됩니다.메모리:
offset_x와 offset_y는 값으로 전달되지만, 이 값은 리스트 a 내부의 요소를 참조합니다.a의 데이터는 기존 메모리를 그대로 사용하며, 직접 수정됩니다.결과: 리스트 a의 내용이 변경됩니다.
=> 즉, 함수에 인자를 넘길 때 메모리 주소를 넘기고 함수 내에 인자 값이 변경이 되면 호출자의 값도 변경된다.
swap_reference(list, offset_x, offset_y) (객체 참조에 대한 호출)def swap_reference(list, offset_x, offset_y):
temp = list[offset_x]
list[offset_x] = list[offset_y]
list[offset_y] = temp
동작 방식: 리스트 a의 객체 참조를 전달받아 해당 객체의 내용을 수정합니다.
list는 리스트 a를 참조합니다.list[offset_x]와 list[offset_y]의 값을 바꾸면 리스트 a의 내용도 바뀝니다.메모리:
list는 리스트 a를 참조합니다. 리스트의 내용은 새로운 메모리에 복사되지 않고, 기존 리스트의 메모리를 그대로 사용합니다.list[offset_x]와 list[offset_y]를 수정하면 원본 리스트 a도 변경됩니다.결과: 리스트 a의 내용이 변경됩니다.
=> 즉, 객체의 주소가 함수로 전달되고 전달된 객체를 참조하여 변경 시 호출자에게 영향을 주나, 새로운 객체를 만들 경우 호출자에게 영향을 주지 않는다.
swap_value: 새로운 변수에 값을 복사하여 사용 (원본 변경 X) swap_offset: 리스트 a의 특정 요소를 직접 참조하여 값 교환 (원본 변경 O) swap_reference: 리스트 객체 자체를 참조하여 수정 (원본 변경 O)a = [1, 2, 3, 4, 5]
swap_value(a[1], a[2]) # 값 복사, 원본 변경 없음
print(a) # [1, 2, 3, 4, 5]
swap_offset(1, 2) # 참조된 리스트 요소 직접 변경
print(a) # [1, 3, 2, 4, 5]
swap_reference(a, 1, 2) # 리스트 객체 참조를 통한 변경
print(a) # [1, 2, 3, 4, 5]