×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 1,683,642명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
728x90
반응형


파이썬을 처음 배우는 분들에게 도움이 되는 포스팅일지는 모르겠지만, 일단 파이썬 자체가 쉽기에


이전 포스트 및 이후 포스트를 보고 이해하기 어렵다고는 하지 않을 것 같다.


필자도 파이썬을 처음 배우고 있는 입장인데 C++에 비해 매우 신기한 부분도 많고 머신 러닝을 위해 초석부터 천천히 하고자 한다.



이번에는 for문 while문같은 반복문에 대해 알아보고자 한다. 


일단 이전에 C를 배운적이 있다면 반복문에서 또 너무 간단하게 모든게 표현돼서 C를 배운게 후회될 정도로 놀랍다.



for문의 이용 방식은 다음과 같다.


우선적으로 for문의 범위로 이용되는 것은 

시퀸스(연속) 자료형, 반복 가능한 자료, 문자열, 리스트, 튜플, 사전, range() 등등의 객체가 존재한다.  



for문의 기본 작성 방식은 다음과 같다.


for 변수 in 범위:

 for문에 해당하는 코드


쉬우니깐 바로 코드를 통해 알아보자.




위의 스크린샷에서 틀린 부분을 한번 찾아보자. 무엇이 틀렸을까?



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
list1 = [1,2,3,4,5,6,7,8,9,10]
sum = 0
 
for i in list1: # 기본적인 for문
    sum += i
 
print("1부터 10까지 모두 더한 값 sum :: ", sum)
 
string1 = "\n설마 한글도 for문이 적용될까?"
 
for ch in string1: # ... 2byte를 먹는 한글도 가뿐하게 실행이 된다.
    print(ch, end = "")
 
ascii = {'a':97'b':9899:'c''d':100'e':101}
 
print("\n\n사전은 key를 기준으로 출력됨을 알 수 있다.")
for dic in ascii:
    print(dic, end = "")
 
sum = 0.0;
for c in range(101): # for(int i = 0 ; i < 101; i ++)를 이렇게 range(101)으로 표현한다.
    sum += c
print("\n\nsum이 double형으로 변환되고 0~101까지 합 :: ", sum)
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


위의 질문에 대한 정답은 다음과 같다.


range(x) :: 0<= k < x를 의미한다. 즉, 100까지 합을 구하고 싶다면 range(101)을 해야한다.



신기한 부분들이 매우 많다.


string도 그냥 혼자 척척 출력이 되고, dictionary도 출력이 key값을 기준으로 된다.


그리고 range(101)를 써서 우리가 흔히 C, Java에서 쓰던 for(int i = 0; i < 101; i ++)를 나타낼 수 있다.


다른 언어들에 비해 아주아주아주 간단해졌다는 것을 또 느낄 수 있다.


참고로 end = ""는 개행을 무시하도록 하는 코드이다.




이제 for문을 배웟으면 어디서나 한번쯤은 해볼 구구단을 한번 만들어보자.


c에서 최소 8줄을 구성하는 코드는 단 3줄만에 끝나고야 말았다.


그리고 아래에서 또 하나의 주석 방법을 언급해 두었는데


"""

내용

""" 를 하면 주석처리가 된다.







여기서 또 파이썬의 특이점은, 헤더파일이 어디갔는지 없고, main함수따위도 없고 return도 하지 않는다는 것이다.


사용자의 편의성을 위해 노력했음이 적나라하게 드러나는 언어이다.





이번에는 파이썬에서 새로 등장한 for ~ else문에 대해 알아보자.


for ~ else문의 설명은 다음과 같다.


for문이 break없이 끝까지 정상 출력된다면 else를 통해 for문이 정상 작동했는것에 대한 코딩을 해줄 수 있다.






for ~ else문의 기본 작성 방식은 다음과 같다.


for 변수 in 범위:

 for문에 해당하는 코드


else:

 for문 성공시 나타나는 코드



1
2
3
4
5
6
7
8
9
10
for i in range(110):  # range(x,y)를 하면 x부터 y까지 라는 의미가 된다.
    for j in range(110):
        print(i, ' * ', j, ' = ', i * j)
    else:
        print("***", i, "단 완료! ***")
else:
    print("구구단 전체 출력 완료")
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


이 부분은 파이썬에서 새롭게 등장한 부분이고 언제 쓰일지는 정확히 파악을 할 순 없지만, 적재적소에 쓰일 기회가 있을 것으로 생각된다.



이제 마지막으로 while문에 대해 알아보자.



while문의 기본 작성 방식은 다음과 같다.


while 조건:

 while문에 들어갈 코드

 

#이때 continue, break도 들어갈 수 있다.(for문도 마찬가지)





1
2
3
4
5
6
7
8
9
10
11
12
13
= 0
= 0
while x < 10:
    print("현재 x :: ", x, " y :: ", y)
    if y <= x + and y < 10:
        y += 1
    else:
        x += 1
# while은 else로 최종 확인이 안된다.
print("최종 x :: ", x, " y :: ", y)
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



y가 먼저 3칸을 도망가고 x와 3의 간격을 계속 맞추는 코드이다.


매우 간단한 예제이긴 하지만, 알고리즘 파트에서 투 포인터라는 개념으로 이용되는 알고리즘이다.


이렇게 보면 쉽지만, 어렵게 나타난다면 상당히 어려운 투 포인터 알고리즘이다. 


위의 방식에서 보면 알다시피 if( 조건 && 조건 ) 이런식이 아닌 if 조건 and 조건 이런식이고 조건 or 조건도 된다.


물론 while도 마찬가지로 while 조건 and 조건 혹은 조건 or 조건이 된다.




반응형
  1. 2017.07.16 15:06

    비밀댓글입니다

    • 가누 2017.07.16 16:13 신고

      cnt가 결국 7의 배수에 해당하는 난수가 '몇번 생긴지' count하는 변수입니다.

      for x in range(0,100):
      rand = int(random()*100)을 통해 지금 0~100미만 수의 난수를 생성중이고

      if rand % 7 == 0은 7로 나눌때 나머지가 0인것들, 즉 난수가 7의 배수라면

      print('{:3}'.format(rand), end='')
      로 해당하는 난수를 출력하네요

      그런데 굳이 저렇게 프린트하는 이유는 모르겠네요
      그냥 print(rand, end='')로 하면 될텐데요 ㅎ

      그리고 cnt = cnt + 1을통해 7의 개수를 카운트해주고
      마지막에 총 몇개가 나왔는지 출력하는것같습니다.