Week7.
Part 1. Loops and Iterations
- syntax :
while 종료조건:
~~~~
- Iteration Variables : 루프를 돌 때마다 변하는 변수로써 루프의 종료조건을 나타내기 위해 사용.
- ' break '
#-*- coding: utf8 -*-
# 파이참 한글주석 인코딩 해결 코드임
while True : # 'True' = 예약어. 항상 참
line = raw_input('>') # 'line'이라는 이름으로 입력을 계속해서 받음
if line == 'done' : # 만약 line이라는 입력의 내용으로 'done'이 들어온다면,
break # 'break' 반복문이 break를 만나면 루프탈출
print line # input이 'done'이 아닌이상 입력된 내용을 계속 출력
print 'Done!'
- ' continue '
The continue statement ends the current iteration and jumps to the top of the loop and starts the
next iteration. == continue 문은 최근의 반복문을 종료하고 loop의 처음으로 돌아가 반복을 다시
시작. 즉 continue 밑에 코드들은 무시하고 iteration의 시작부분으로 올라감. loop의 종료조건에
영향 안끼침.
#-*- coding: utf8 -*-
# 파이참 한글주석 인코딩 해결 코드임
while True : # 'True' = 예약어. 항상 참
line = raw_input('>') # 'line'이라는 이름으로 입력을 계속해서 받음
if line[0] == '#' : # 파이썬은 문자열을 자동으로 array 형식으로 저장하는 모양이다.
continue
if line == 'done' : # 만약 line이라는 입력의 내용으로 'done'이 들어온다면,
break # 'break' 반복문이 break를 만나면 루프탈출
print line # input이 'done'이 아닌이상 입력된 내용을 계속 출력
print 'Done!'
----output-----
C:\Users\Hyunwoo\Anaconda2\python.exe C:/Users/Hyunwoo/PycharmProjects/coursera/coursera_practice.py
>hello there
hello there
>print this
print this
># don't print this
>done
Done!
Process finished with exit code 0
------end--------
- syntax
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장1수행할 문장2...
- ' in '
set이나 tuple or list에 있는 element들을 순서대로 한 단위씩 훑음.
Part 2. Loop Idioms. - How We Construct Loops?
Loop를 활용한 다양한 예시들.
- 예제. list에서 가장 큰 수 찾기.
- 예제 2. Counting in a Loop. Summing in a Loop. Finding the Average in a Loop.
- Serach Using a Boolean Variable
Part 3. Largest and Smallest
가장 작은 값을 표시하는 변수를 특정 값으로 초기화 할 시 list 내에서 가장 작은 값을 못찾을 수도 있음. ex) smallest = -1로 초기화. list = [3, 41, 12]일 때 일반적인 방법으론 가장 작은 값은 -1로 출력됨.
해결책 -------> 가장 작은 값을 number가 아니라 다른 type으로 초기화하면 됨.
' none '
- 가장 작은 값임을 의미함.
#-*- coding: utf8 -*-
# == 파이참 한글주석 인코딩 해결 코드
smallest = None
print 'Before'
for value in [9, 41, 12, 3, 74, 15] :
if smallest is None : # ' is ' = 파이썬 연산자. '=='과 같은 의미
smallest = value # smallest를 list 내의 값으로 초기화 해주어야함. None은 Numeric한 값이 아니기 때문에 초기화해주지 않으면 대소를 비교할 수 없음.
elif value < smallest :
smallest = value
print smallest, value
print 'After', smallest
------output------
Before
9 9
9 41
9 12
3 3
3 74
3 15
After 3
Process finished with exit code 0
-------end------
' is ' and ' is not ' Operators
- 파이썬 연산자의 일종.
- ' == '과 같은 의미로 사용.
- ' == '은 numeric한 value일 때 주로사용.
- ' is '는 None이나 False 같이 logical expression에 주로 사용.
- ' is '를 너무 남용하는 것은 좋지 않음. 에러를 일으킬 수도. 적재적소에 쓰자!
----------Asignment---------
5.2 Write a program that repeatedly prompts a user for integer numbers until the user enters 'done'. Once 'done' is entered, print out the largest and smallest of the numbers. If the user enters anything other than a valid number catch it with a try/except and put out an appropriate message and ignore the number. Enter the numbers from the book for problem 5.1 and Match the desired output as shown.
------------CODE------------
#-*- coding: utf8 -*-
# == 파이참 한글주석 인코딩 해결 코드
largest = None
smallest = None
i = 0
num = range(100) # 100개의 list 선언. C의 array처럼 했었음(당연히 에러). list 선언하는 법 기억하기.
while True:
num[i] = raw_input("Enter a number: ")
if num[i] == 'done': # 입력이 'done'이면 종료.
break
try : # 종료조건인 'done' 또한 error를 발생시켜 except에 있는 continue 때문에 무한루프를
only_number = float(num[i]) #발생시켜 try위로 빼놓고 int형 변환을 하지않은 채로 두었다.
if smallest is None : #하나의 조건문으로 합쳐서 표현했었더니 이상하게 smallest만 list의
smallest = only_number #첫번째 원소로 초기화가 안되어 두개로 나누어주니 해결됨.. 왜지???
if largest is None :
largest = only_number
if only_number > largest :
largest = only_number
if only_number < smallest : #이것도 이상함. largest의 elif 밑에 바로 elif를 썼더니 왠지모르게 한번 값이 바뀐
smallest = only_number #이후로 더 작은 값이 나타나도 smallest가 변하지 않음..왜지
print largest, smallest, only_number # 값이 잘 들어가고 있나 확인을 위한 출력.
i = i + 1
except ValueError:
print 'Invalid value'
continue
print "Maximum is ", largest
print "Minimum is ", smallest
-------------END--------------
후기
1. 이번 수업에서는 프로그래밍에서 가장 중요한 반복문에 대해서 배웠다. while이나 for 모두 C에도 있는 문법이지만 파이썬에서 보니 느낌이 달랐다. while은 C나 python이나 아직은 큰 차이를 못느꼈으나, for은 'in'과 함께 쓰면서 훨씬 다양한 자료형들(list, tuple 등등)을 조건으로 유연하고 다양하게 활용될 수 있을 것 같았다.
2. 'is', 'is not'연산자 또한 인상깊었다. 이 연산자들은 '=='(equal), '!='(not equal)로 쓰여도 상관없지만 인간의 언어로 표현함으로써 코드가 더 쉽고 편하게 읽히게 하는 역활을 할 것 같았다.
3. 이번 과제는 개념적으로는 어려운 문제가 아니었으나, 파이썬에 익숙하지 않음 + Pycharm(파이썬 IDE)에서의 알 수 없는 다양한 오류들로 인해 해결하는데 꽤 애를 먹었다.(문제푸는데 거의 2시간 좀 넘게 걸린듯..) 그래도 오랜만에 challenging한 문제를 만나(그만큼 공부를 열심히 안했었다는ㅜㅜ) 구글링도 열심히하고, 파이참 디버거 사용법도 익히고, 문제를 해결하는 즐거움도 느낀 유익한 시간이었다. 이번 문제 해결과정은 추후에 따로 포스트를 작성해야겠다. 여튼 재밌었음!
-------Week 7 정리 끝------
![](https://t1.daumcdn.net/cfile/tistory/233AB95057B6BB5F0E)
최종후기
7주차 수업까지 들음으로 이로써 Coursera의 Python 수업 중 1단계인 'Python for everyone'을 수료하였다!! 프로그래밍적 개념 자체는 딱히 어렵진않았다. 이 수업을 통해 파이썬이 어떤 언어인지에 대해 대략적으로나마 알게되고 실제로 다양한 퀴즈들과 과제를 해봄으로써 파이썬의 실제적인 사용까지 익힐 수 있었던 매우 좋은 코스였다. 또한 이 수업은 기초부터 매우 친절하고 재밌게 설명해주어 프로그래밍을 아얘 모르는 초보라도 수강해면 매우 유익한 기회가 될 것이라고 생각했다. 하지만 매우 기초적인 내용을 다루고 있어 좀 더 실질적인 이해와 활용을 위해선 추가로 수업을 듣거나 여러 전자책들(ex :
Jump to python)이나
Codeacademy에서 추가적인 공부를 해야겠다고 느꼈다. 처음으로 듣는 인터넷 영어강의였으나 교수님이 쉬운 영어로 설명해주시고, 영어자막도 있어 보통사람도 큰 무리없이 수강할 수 있을 것이다.
만족도: ★★★★☆