본문 바로가기

연습문제

 

 

예제18

1부터 10까지 출력하기(1)

1로 시작되는 i를 1씩 증가하면서 i 값이 10보다 작거나 같은 동안 반복하며 i 값을 출력한다.

i=1
while i<=10:
    print(i, end=" ")
    i = i+1

 

예제19

1부터 10까지 출력하기(2)

i가 1부터 1씩 증가하며 10이 될 때까지 반복하며 i 값을 출력한다.

for i in range(1, 11):
    print(i, end=" ")

 

예제20

10부터 1까지 출력하기

i가 10부터 1씩 감소하며 1이 될 때까지 반복하며 i 값을 출력한다.

for i in range(10, 0, -1):
    print(i, end=" ")

 

예제21

1부터 100까지의 합 구하기

0으로 초기화되어 있는 변수 sum에 1부터 100까지 1씩 증가하는 i 값을 더해 1부터 100까 지의 합을 구한다.

sum = 0
for i in range(1, 101):
    sum = sum+i
print(sum)

 

예제22

1부터 100까지의 수 중 짝수의 합 구하기(1)

i가 2부터 2씩 증가하며 100이 될 때까지 반복하며 sum에 i 값을 누적한다.

sum = 0
for i in range(2, 101, 2):
    sum = sum+i
print(sum)

 

예제23

1부터 100까지의 수 중 짝수의 합 구하기(2)

i가 1부터 1씩 증가하며 100이 될 때까지 반복하며 i가 짝수인 경우 sum에 i 값을 누적한다.

i를 2로 나눈 나머지가 0이면 i는 짝수이다.

sum = 0
for i in range(1, 101):
    if i%2==0:
        sum = sum+i
print(sum)

 

 

예제24

1, -2, 3, -4, ..., 99, -100의 합 구하기

i가 1부터 1씩 증가하며 100이 될 때까지 반복하며 i가 홀수면 sum에 i 값을 더하고, i가 짝 수면 sum에서 i 값을 뺀다.

sum = 0
for i in range(1, 101):
    if i%2==0:
        sum=sum-i
    else:
        sum=sum+i
print(sum)

 

 

예제25

계승 구하기

계승이란 1부터 임의의 양의 정수 n까지의 수를 모두 곱한 것을 말하며 n!로 나타낸다. 예를 들어 5의 계승은 5!로 표시하며 1*2*3*4*5 이다. 그런데, 여기서 0!은 1로 정의한다.
5!은 1로 초기화되어 있는 변수 fact에 5부터 1까지 1씩 감소하는 i 값을 곱해 구한다.

fact = 1
for i in range(5, 0, -1):
    fact = fact*i
print(fact)

 

예제26

약수 구하기

임의의 수를 나누었을 때 나누어떨어지게 하는 수를 약수라 한다. 즉, n의 약수는 1부터 n까지의 수로 n을 나누어떨어지게 하는 수가 된다.

예를 들면, 10의 약수는 1부터 10까지 수들로 나누었을 때 나머지가 0이 되게 하는 수, 즉 1, 2, 5, 10이 된다.

n = int(input("정수: "))
for i in range(1, n+1):
    if n%i == 0:
        print(i, end=" ")

 

예제 27

공약수 구하기

공약수란 0이 아닌 두 정수의 공통되는 약수를 말한다. 즉, 두 정수를 나누어떨어지게 하는 공통의 수를 의미한다.
n1과 n2의 공약수는 1부터 n1까지 1씩 증가하는 i로 n1과 n2 모두를 나누어떨어지게 하는수가 된다. 

단, n1이 n2보다 작다고 가정한다.

n1 = int(input("정수: "))
n2 = int(input("정수: "))
for i in range(1, n1+1):
    if n1%i == 0 and n2%i == 0:
        print(i, end=" ")

 

 

예제 28

최대공약수 구하기

두 정수의 공약수 중 가장 큰 것을 최대공약수라 한다.

그러므로 n1과 n2의 최대공약수는 n1부터 1까지 1씩 감소하는 i로 n1과 n2 모두를 나누어떨어지게 하는 첫 번째 수가 된다. 단, n1이 n2보다 작다고 가정한다.

n1 = int(input("정수: "))
n2 = int(input("정수: "))
for i in range(n1, 0, -1):
    if n1%i==0 and n2%i==0:
        print(i)
        break

 

예제 29

소수 판별하기

소수란 2, 3, 5, 7, …과 같이 1과 자기 자신 이외의 양의 약수를 가지지 않는 1보다 큰 자연수를 말한다.

약수 소수판별
2 1,2 O
3 1,3 O
4 1,2,4 X
5 1,5 O
6 1,2,3,6 X
7 1,7 O

임의의 수를 2부터 자기 자신보다 1 작은 수까지의 수로 차례로 나누어서 나누어떨어지는 경우가 생기면 소수가 아니고, 나누어떨어지는 경우가 생기지 않으면 소수이다.

chk = 1
n = int(input("정수: "))
for i in range(2, n):
    if n%i == 0:
        chk = 0
        break
if chk==1:
    print(n, ": 소수임")
else:
    print(n, ": 소수아님")

 

예제30 

x

a = 1
b = 1
print(a, b, end=" ")
for i in range(3, 21):
    c = a+b
    print(c, end=" ")
    a = b
    b = c
    
# 05 전전항 a와 전항 b를 더한 값을 현재항 c에 저장한다.
# 07~08 전항 b 값을 a에 저장하고 현재항 c 값을 b에 저장한다.

# 실행결과

# 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765

 

 

예제 31

최댓값 구하기

max 값과 새롭게 입력받은 a 값을 비교하여 큰 값을 max에 저장하는 동작을 반복하며 최댓값을 구한다

a = int(input("정수: "))
m = a
while a!=0:
    if a>m:
        m = a
    a = int(input("정수: "))
print("최댓값 :", m)

#03~06 a가 0이 아닌 동안 04~06을 반복해서 실행한다.
#04~05 a가 m보다 크면 a 값을 m에 저장한다. m은 최댓값을 저장하는 변수이다.

 

예제32

직각 삼각형 모양으로 수 출력하기

바깥쪽 반복문은 i 값을 1부터 5까지 반복하고, 안쪽 반복문은 j 값을 1부터 i까지 반복하며 j 값을 출력하면 다음과 같이 된다. 단, 안쪽 반복문을 마치면 “ \n”을 이용해서 다음 줄로 넘긴다.

for i in range(1, 6):
    for j in range(1, i+1):
        print(j, end=" ")
    print()
    
#01~02 i 값이 1부터 1씩 증가하며 5가 될 때까지 02~04를 반복해서 실행한다.
#02~03 j 값이 1부터 1씩 증가하며 i가 될 때까지 03을 반복해서 실행한다.
#04 다음 줄로 넘어간다.

 

 

 

예제33

1부터 10까지의 정수에 대한 약수 구하기

중첩 반복 구조를 이용해서 1부터 10까지의 정수에 대한 약수를 구한다.

약수를 구하는 방법은 예제 26에서 살펴보았다.

for i in range(1, 11):
    print(i, "약수:", end=" ")
    for j in range(1, i+1):
        if i%j==0:
            print(j, end=" ")
    print()

#01~06 i 값이 1부터 1씩 증가하며 10이 될 때까지 02~06을 반복해서 실행한다.
#03~05 j 값이 1부터 1씩 증가하며 i가 될 때까지 04~05를 반복해서 실행한다.

 

 

 

예제34

2부터 100까지의 소수 구하기

i가 2부터 1씩 증가하며 100이 될 때까지 반복하며 각 i 값이 소수인지 판별한다.

소수를 판별하는 방법은 예제 29에서 살펴보았다.

아래 실행 결과와 같은 값을 출력하세요.

for i in range(2, 101):
    chk = 1
    for j in range(2, i):
        if i%j==0:
            chk = 0
            break
        if chk==1:
            print(i, end=" ")
            
#01~08 i 값이 2부터 1씩 증가하며 100이 될 때까지 02~08을 반복해서 실행한다.
#03~06 j 값이 1부터 1씩 증가하며 i-1이 될 때까지 04~06을 반복해서 실행한다.
#04~06 i를 j로 나눈 나머지가 0이면 chk에 0을 저장하고 break에 의해 안쪽 반복 구조를빠져 나와 07로 이동한다.

 

 

예제35

1, (1+2), (1+2+3), …, (1+2+ … +10)의 합 구하기

i가 1부터 1씩 증가하며 10이 될 때까지 반복하며 n은 i 값을 누적하고, sum은 n 값을 누적하여 원하는 값을 구한다.

 

i n sum
1 1 1
2 1+2 1+(1+2)
3 1+2+3 1+(1+2)+(1+2+3)
... ... ...
9 1+2+3+…+8+9 1+(1+2)+(1+2+3)+…+(1+2+3+4+5+6+7+8+9)
10 1+2+3+…+9+10 1+(1+2)+…+(1+2+3+4+5+6+7+8+9+10)

n = 0
sum = 0
for i in range(1, 11):
    n = n+i
    sum = sum+n
print(sum)

#03~05 i 값이 1부터 1씩 증가하며 10이 될 때까지 04~05를 반복해서 실행한다.

 

 

예제36

구구단

다음과 같은 형식으로 출력되는 구구단 순서도와 프로그램을 작성한다.

2*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*1= 3 3*2= 6 3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
...
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

단에 해당하는 2부터 9까지의 수는 변수 i로, 곱하여지는 수 1부터 9까지는 변수 j로, 곱한결과는 j*j로 나타낸다.

for i in range(2, 10):
	for j in range(1, 10):
		print(i, "*", j, "=", i*j, end=" ")
	print()
 
# 01~04 i 값이 2부터 1씩 증가하며 9가 될 때까지 02~04를 반복해서 실행한다.
# 02~03 j 값이 2부터 1씩 증가하며 9가 될 때까지 03을 반복해서 실행한다.
# 04 다음 줄로 넘긴다.

 

 

 

연습문제 (148페이지)

 

Q5

A 학급에 총 10명의 학생이 있다. 이 학생들의 중간고사 점수는 다음과 같다. 

[70, 60, 55, 75, 95, 90, 80, 80, 85, 100]

for문과 while문 각각 사용하여 A 학급의 평균 점수를 구하는 문제를 만들어 보자.

아래는 for문의 예시다.

A = [70, 60, 55, 75, 95, 90, 80, 80, 85, 100]
total = 0
for score in A:
    total +=  ??? # A학급의 점수를 모두 더한다.
    average = ??? # 평균을 구하기 위해 총 점수를 총 학생수로 나눈다.
print (average)

 

 

 

과제

 

과제 15

5부터 15까지 출력하는 순서돠와와 파이썬 프로그램을 작성하여라.

for, while 둘 다 만드세요.

start = int(input("숫자 > "))
end = int(input("숫자 > "))

if start > end:
    temp = start
    start = end
    end = temp

while start < (end+1):
    print(start, end = " ")
    start+=1

# 실행결과

# 5 6 7 8 9 10 11 12 13 14 15

 

 

 

과제 16

while형 반복 구조를 이용해서 10부터 1까지 출력하는 순서도와 파이썬 프로그램을 작성하여라.

# 실행결과

# 10 9 8 7 6 5 4 3 2 1

 

 

과제 17

1부터 입력받은 수까지의 합을 출력하는 순서도와 파이썬 프로그램을 작성하여라.

# 실행결과

# 정수: 10

# 55

 

 

과제 18

1부터 100까지의 수 중 3의 배수의 합을 출력하는 순서도와 파이썬 프로그램을 작성하여라.

# 실행결과

# 1683

 

 

과제 19

1, 2, -3, 4, 5, -6, ..., -99, 100의 합을 구해 출력하는 순서도와 파이썬 프로그램을 작성하여라.

# 실행결과

# 1684

 

 

과제 20

약수와 약수의 개수를 출력하는 순 과제 서도와 파이썬 프로그램을 작성하여라.

# 실행결과

# 정수: 30

# 1 2 3 5 6 10 15 30 : 8

 

 

과제 21

세 수의 공약수를 출력하는 순 과제 서도와 파이썬 프로그램을 작성하여라.

# 실행결과

# 정수 : 300

# 정수 : 400

# 정수 : 256

# 1 2 4

 

 

 

과제 22

1부터 자기 자신까지의 수로 차례로 나누어서 나누어떨어지는 경우가 2번 발생하면 이 수는 소수이고, 그렇지 않으면 소수가 아니다. 이 방법을 이용해서 소수를 판별하는 순서도와 파이썬 프로그램을 작성하여라.

# 실행결과

# 정수: 45

# 45 : 소수아님

 

 

 

과제 23

x

 

과제 24

최솟값을 구하는 순서도와 파이썬 프로그램을 작성하여라.

0을 입력하기 전까지 입력값을 받아 최소값을 구하고, 0이 입력되면 최소값을 출력하도록 구현하라.

# 실행결과

# 정수: 2

# 정수: 4

# 정수: 6

# 정수: 9

# 정수: 5

# 정수: 0

# 최솟값 : 2

 

 

 

과제 25

다음과 같이 출력하는 순서도와 파이썬 프로그램을 작성하여라.

각각 출력하시면 됩니다.

 

과제 26

1!, 2!, 3!, 4!, 5!의 합을 출력하는 순서도와 파이썬 프로그램을 작성하여라.

# 실행결과

# 153

 

 

과제27

다음과 같은 형식으로 출력되는 구구단 순서도와 파이썬 프로그램을 작성하여라.

2*1= 2 3*1= 3 4*1= 4 5*1= 5 6*1= 6 7*1= 7 8*1= 8 9*1= 9
2*2= 4 3*2= 6 4*2= 8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18
2*3= 6 3*3= 9 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=27
2*4= 8 3*4=12 4*4=16 5*4=20 6*4=24 7*4=28 8*4=32 9*4=36
2*5=10 3*5=15 4*5=20 5*5=25 6*5=30 7*5=35 8*5=40 9*5=45
2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 7*6=42 8*6=48 9*6=54
2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8*7=56 9*7=63
2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 9*8=72
2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

 

 


달력만들기

 

년월을 (원하는 방식으로) 입력받아

해당 년도와 월을 출력하세요.

 

* 윤년 계산하세요.

그레고리력의 윤년 규칙은 다음과 같습니다.

  • 서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. (1988년, 1992년, 1996년, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년, 2032년, 2036년, 2040년, 2044년 ...)
  • 서력 기원 연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년, 2300년, 2500년...)
  • 서력 기원 연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다. (2000년, 2400년...)

* 정렬 해서 깔끔하게 출력하세요.

 

BasicLike

어? 나 프로그래밍 좋아하네?