while , for 기본개념

gyeorrr·2023년 1월 19일
0

while 과 for

while은 한계치를 지정해줘야하고, 세부적으로 설정을 해줘야하는 느낌이라면
for은 조금 더 발전한 반복문이라고 생각한다
예를들어 같은 출력이어도 길이가 다르다

주의할 점은 들여쓰기다 꼭 들여쓰기를 잘 하자 아마 오류가 뜨거나 원하는 답이 나오지않는다면 들여쓰기와 문장이 거쳐가는지 봐야할것

for문 안에 값이 매번 바뀌어야하는, 소수라고 가정하기를 바깥에 써서, 계속 오답만 나왔었다.

같은문자를 5번 출력하는 코드를 만들어보겠다

while

i = 0
while i != 5:
	print('hello')
    i += 1
또는
i = 0
while i < 5:
	print('hello')
    i += 1

이런느낌이고

for

for i in range(5):
	print('hello')
    
 괄호안에 (0,5),(0,5,1)를 넣어도 형식은 같다
 for i in [0, 1, 2, 3, 4]:
 	print('hellp')
도 같으며, [] 리스트 안에는 str을 넣어도 인식이 된다.

이처럼, 내가 느끼기로는 while 보다는 조금 간단하다는 느낌을 받았다
이를 이용해서 문제를 풀어보도록하겠다

1부터 100까지의 숫자 중, 홀수의 합과 짝수의 합 구하기

evensum,oddsum = 0,0

for i in range(1,101):
   if i % 2 == 0:
      evensum += i
   else:
      oddsum += i

form = '짝수의 합 :{} 홀수의 합 :{}'
print (form.format(evensum,oddsum))

for i in range ( 1, 101): 1부터 100까지의 범위를 지정한다 (i는 이제 반복될 떄 마다 1~100을 순서대로 선언)
if i % 2 == 0: 각 i의 값이 2로 나누어서 0으로 떨어지면
evensum += i evensum이라는 곳에 값을 누적으로 더해서 저장
else: oddsum += i 아니면, oddsum에 값을 누적으로 더해서 저장

1부터 100까지의 숫자 중, 소수만 출력하기

for i in range (1,101):
    primenumber = True
    for j in range(2,i):
        if i % j == 0:
            primenumber = False
    if primenumber:
        print(i,end=' ')     

해석

for i in range(1,101): 숫자 범위 지정
primenumber = True 숫자를 모두 실수라고 (가정)한다 (이거진짜 중요)
for j in range(2,i): 1을 제외하고 2부터 i 전 까지의범위(두번째로 중요 실수를 구할 수 있는 명령어다)
if i % j ==0: i가 j로 나누어서 0 으로 나누어 떨어진다면 (2부터 i까지 나누어질 때 까지 시도했을 때) False
if primenumber: primenumber이 참값(True)이라면 print

문제를 풀어나가면서 아는 게 많아지면 응용 할 수 있는것도 되게 많아지지 않을까

이번 건 꽤 많이 어려웠고 이해하기도 어려웠지만 지금 이렇게 쓰고나니깐 이해가 된다

추가(값을 받아서 소수만 출력하기)

primenum = True

cnt = int(input('정수 입력 :'))

for i in range(2,cnt):
    if cnt % i == 0:
        primenum = False
        break
    
print(cnt,end=' ')
print(primenum and '소수입니다' or '소수가 아닙니다')

primenum = True 모든 수를 소수라고 가정하기 *들여쓰기 주의 꼭 for문 안에 넣을것!!!!!
cnt = int(input('정수 입력:')) 받은 수를 cnt에 저장
for i in range(2,cnt): i 를 2 부터 cnt 까지 반복
if cnt % i == 0: cnt 를 i 로 나눴을 때 0으로 떨어진다면, primenum은 거짓
break 확실하게 이해를 못하겠다만, 반복이 끝났다면 탈출
print(primenum and '소수입니다' or '소수가 아닙니다')
primenum이 참이라면 자동적으로 소수입니다 출력 아니라면, 소수가 아닙니다 출력

이중for문의 성질

for i in range(6):
    for j in range(7):

        print(f'({i},{j})',end=' ')
    print()

i 안에 j 가 들어있는데 j를 먼저 수행한 뒤에 i를 수행함

예시

(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6)
(1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6)
(2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6)
(3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6)
(4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6)
(5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6)

원래는 값이 아래로 향하지만 print로 i와 j를 잡아뒀기 때문에 왼쪽에서 우측으로 값이 출력됨
보이는 것 처럼 i 는 0 으로 쭉 출력 j는 0, 1, 2, 3, 4, 먼저 출력됨
i가 반복이 끝나면 그다음 값이 출력된다 i는 1로 쭉 출력 j는 또 0, 1, 2, 3, 4,....
이런 성질을 가지고 있다는 걸 알아두자

주의할 점

바뀌어야 하는 값은 for ,while 바깥에 있어야하고
고정되어야 하는 값은 for, while 안에 있어야한다.

ex) 숫자 뒤집기

num = 1234
result = 0

while num > 0:
	result *= 10
    result += num % 10
    num //= 10
print(result) -출력-> 4321

num 과 result 는 값이 수시로 변동 된다 그러므로 while 바깥에 위치하는 걸 볼 수 있다.

0개의 댓글