Week7.
Part 1. Loops and Iterations

' While '               (Jump to Python - while문 = 'https://wikidocs.net/21')
- 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--------

' for '          (Jump to Python - for문 = 'https://wikidocs.net/22')
- 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
  • Finding Smallest Number
가장 작은 값을 표시하는 변수를 특정 값으로 초기화 할 시 list 내에서 가장 작은 값을 못찾을 수도 있음. ex) smallest = -1로 초기화. list = [3, 41, 12]일 때 일반적인 방법으론 가장 작은 값은 -1로 출력됨.
해결책 -------> 가장 작은 값을 number가 아니라 다른 type으로 초기화하면 됨.
' none '
- 가장 작은 값임을 의미함.
#-*- coding: utf8 -*-
# == 파이참 한글주석 인코딩 해결 코드

smallest = None

print 'Before'

for value in [9411237415] :
    if smallest is None :       # ' is ' = 파이썬 연산자. '=='과 같은 의미
        smallest = value        # smallest를 list 내의 값으로 초기화 해주어야함. None은 Numeric한 값이 아니기 때문에 초기화해주지 않으면 대소를 비교할 수 없음.
    elif value < smallest :
        smallest = value
    print smallestvalue

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 largestsmallestonly_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 정리 끝------


최종후기
 7주차 수업까지 들음으로 이로써 Coursera의 Python 수업 중 1단계인 'Python for everyone'을 수료하였다!! 프로그래밍적 개념 자체는 딱히 어렵진않았다. 이 수업을 통해 파이썬이 어떤 언어인지에 대해 대략적으로나마 알게되고 실제로 다양한 퀴즈들과 과제를 해봄으로써 파이썬의 실제적인 사용까지 익힐 수 있었던 매우 좋은 코스였다. 또한 이 수업은 기초부터 매우 친절하고 재밌게 설명해주어 프로그래밍을 아얘 모르는 초보라도 수강해면 매우 유익한 기회가 될 것이라고 생각했다. 하지만 매우 기초적인 내용을 다루고 있어 좀 더 실질적인 이해와 활용을 위해선 추가로 수업을 듣거나 여러 전자책들(ex : Jump to python)이나 Codeacademy에서 추가적인 공부를 해야겠다고 느꼈다. 처음으로 듣는 인터넷 영어강의였으나 교수님이 쉬운 영어로 설명해주시고, 영어자막도 있어 보통사람도 큰 무리없이 수강할 수 있을 것이다. 
만족도: ★★★★☆











'Python' 카테고리의 다른 글

Coursera_Python for everyone_Chapter 6.  (0) 2016.07.30
Coursera_Python for everyone_Chapter 5.  (0) 2016.07.28
Coursera_Python for everyone_Chapter 2 & 3 & 4  (0) 2016.07.26
Week 6. Functions.

' 함수 정의하기. '
- syntax
     def '함수명' (Parameter) :
          ~~~~

' Arguments '
- 함수에 대한 입력으로서 전달하는 값.
- 함수 호출할 때의 입력

' Parameter '
- A parameter is a variable which we use in the function definition that is a 'handle'
  that allows the code in the function to access the arguments for a particular function invocation.
- 함수 정의에 사용.

' Return Values '

Assignment
4.6 Write a program to prompt the user for hours and rate per hour using raw_input to compute gross pay. Award time-and-a-half for the hourly rate for all hours worked above 40 hours. Put the logic to do the computation of time-and-a-half in a function called computepay() and use the function to do the computation. The function should return a value. Use 45 hours and a rate of 10.50 per hour to test the program (the pay should be 498.75). You should useraw_input to read a string and float() to convert the string to a number. Do not worry about error checking the user input unless you want to - you can assume the user types numbers properly. Do not name your variable sum or use the sum() function.

def computepay(hr):
    if h > 40:
        pay = 40 * r + (h - 40) * r * 1.5

    else:
        pay = h * r
    return pay

try :
    hrs = raw_input("Enter Hours:")
    rate = raw_input("Enter Rate Per Hours : ")
    h = float(hrs)
    r = float(rate)
    p = computepay(hr)
    print p

except :
    print "please input numeric numbers"





후기

 함수라는 개념에 대한 기초중에 기초라 딱히 새롭거나 어렵지는 않았다. Parameter와 Argument의 정의를 내가 이해한게 맞는지는 잘 모르겠다. 나중에 정확히  두 개념의 정의와 차이에 대해 알아보고 정리해야겠다. 

Week 5. 정리노트


week 5 Conditional Statement 

' if '

' elif '

' else '

*indent : 들여쓰다.
-조건문은 들여쓰기(indentation)로 구분.

' indentation errors ' - 들여쓰기 할 때 tap이랑 space bar랑 섞어쓰면 안됨. 무조건 tap으로만.

' The try  / except Structure '. 예외처리 구문.
- 코드오류로 인해 프로그램이 죽는걸 방지.
- 오류가 날 가능성이 있는 코드들을 try 구문에 적음. 
- try가 실패할 시 실행할 코드들을 except에 적음.

- syntax
try:
     ~~~
except:
     ~~!@

Assignment 1.
      3.1 Write a program to prompt the user for hours and rate per hour using raw_input to compute gross pay. Pay the hourly rate for the hours up to 40 and 1.5 times the hourly rate for all hours worked above 40 hours. Use 45 hours and a rate of 10.50 per hour to test the program (the pay should be 498.75). You should use raw_input to read a string and float() to convert the string to a number. Do not worry about error checking the user input - assume the user types numbers properly.

-----CODE
try :
hrs = raw_input("Enter Hours : ")
h = float(hrs)

rate = raw_input("Enter Rate Per Hours : ")
r = float(rate)

except :
print 'please input numeric values'

pay = 0

if h < 40:
pay = r * h

else:
pay = 40 * r + (h - 40) * r * 1.5

print pay
-----CODE------

Assignment 2.
3.3 Write a program to prompt for a score between 0.0 and 1.0. If the score is out of range, print an error. If the score is between 0.0 and 1.0, print a grade using the following table:
Score Grade
>= 0.9 A
>= 0.8 B
>= 0.7 C
>= 0.6 D
< 0.6 F
If the user enters a value out of range, print a suitable error message and exit. For the test, enter a score of 0.85.

----CODE---
try:
    score = raw_input("Enter Score: ")
    s = float(score)
    if s >= 0.0 and s <= 1.0:
        if s >= 0.9:
            print 'A'

        elif s >= 0.8:
            print 'B'

        elif s >= 0.7:
            print 'C'

        elif s <= 0.6:
            print'D'

        else:
            print 'F'

    else:
        print 'please input appropriate numeric value(0.0~1.0)'


except:
    print 'please input appropriate numeric value(0.0~1.0)'

----CODE---



수업후기

이번 5주차에서는 제어문 중에서도 'if문들(if, elif, else)'과 파이썬에서의 예외처리 구문인 'try -- except'에 대해서 공부했다. if문들은 새로운 내용이 딱히 없었으나 try-except 문은 C에서 내가아는 수준에서는 몰랐던 내용이라 재밌게 들었다. 과제 2번에서 입력이 숫자가 아닐때의 예외처리를 하고싶어 처음에는

s = float(score) 

까지만 try문에 적었었다. 예상으론 숫자가 안들어오면 float으로 캐스팅 하는 것 자체가 안돼 바로 except 문으로 갈 줄 알았는데 다음 코드도 자동으로 실행되는지 s값이 존재하지 않는다는 오류가 뜨며 실행되지 않았었다. 그래서 그냥 전체 코드를 다 try문에 넣으니 이상없이 실행됬다. 첫번째 시도 떄 왜 안됬는지 아직도 잘 모르겠다.

3강, 4강 강의 들으면서 적었던 노트들


Week 2 & 3.
어떻게 인간은 문제를 해결하는가?
난 어떻게 이 문제를 해결할 것인가?
답이 중요한 것이 아님. 어떻게 생각하였나?
인간으로서 내가 문제를 푼 방법을 컴퓨터가 이해할 수 있게 바꿔주는 작업.

ex) 가장 큰 숫자 찾기.
-한자리수, 두자리수는 빠르게 무시. 자리수가 가장 큰 수들만 고려.
-세자리수의 백의자리 숫자들 비교.
-원소 하나하나를 모두 비교하여 가장 큰 숫자로 정하기
-찾은 수 보다 더 큰 수가 나왔다면 큰 수 갱신하기






소감
 3강까지는 아직 가볍게 프로그래밍에 대해 소개하는 내용이라 딱히 새로운 내용은 없었다. 그럼에도 문제해결에 관한 설명은 인상깊게 들었다. 컴퓨터 공부를 시작한지 1년 반 정도 되는 코딩 초심자로서의 '프로그래밍'이라는 것은 어떠한 문제를 해결할 때의 인간의 사고과정을 컴퓨터의 언어로 매우 정교하게 구체화하는 작업인 것 같다. 코딩을 배우기 전까지는 몰랐는데 이와같은 추상적인 과정을 실제적으로 구체화하는 '컴퓨팅적 사고'가 확실히 여러방면에서 도움이 될 수밖에 없겠구나라는 것을 공부하면 할수록 느낀다.


Week 4.
'Constants.' 상수.
- 변하지 않는 값. 숫자, 글자, 문자열 등
-'' or ""은 스트링 출력 떄 사용..
ex) print 159
     print 'hello world'   에서 159, hello world 가 상수.

'Variable' 변수.
- 변하는 값. 따로 설정할 수 있는 값.
ex) x = 12.2, y=14

변수 이름 지을 때 유의사항. ex) 숫자먼저 쓰지 않기. 예약어조심하기. 특수문자 쓰지 않기 등등.

'Numeric Expressions'
+ 더하기
- 빼기
% 나머지연산.remainder
...
** 제곱. power

'Operator Precedence Rules'
  1. () Parenthesis
  2. Power
  3. Multiplication
  4. Additon
  5. Left to Right

파이썬 2에서의 나눗셈
- 정수연산만 함. == 결과가 소수점으로 안나옴.

Integer와 Float number(소수)들이 섞여있으면 결과는 소수로  표현되어나옴.

Type 
- type(내용) == 내용의 타입을 알려줌.
type의 종류들 = string, integer, float...

concatenate 
- '연결하다'는 의미. 문자열의 연결
- ex) eee = 'hello ' + 'there'
        print eee ---> hello there 출력.

#Traceback, ERROR를 Scholding(꾸짖음)으로 생각하지말고 컴퓨터가 난 무지하니 전능하신 프로그래머께서 옳바른 해답을 제시해주기를 기다리는 것으로 생각해봐라 ㅋㅋ

'Type Conversions'
          다른 타입으로 캐스팅 할 수 있음.
 ex) int(), float()....
      print 99/100 ----> 0
      print float(99)100 ----> 0.99

'String Conversions'
String이 숫자들로만 이루어젔다면 String이라도 int or float으로 캐스팅할 수 있음. 문자가 포함되어있으면 ERROR!
ex) sval = '123'
     type(sval) ---> string
     ival = int(sval)
     type(ival) ---> integer

User Input.

'raw_input() 함수'
- C에서의 scanf랑 같은 역활. 사용자의 입력을 받아옴. String 타입으로 받아오기 때문에 제대로 사용하기 위해선 다른 형식으로 캐스팅해야 하는 경우가 자주 있음.
ex) u_name = raw_input('Please input your name : ')
     print 'Welcome', u_name
---C code
#include <stdio.h>
#pragma warning (disable :4996) //scanf 보안문제로 인한 오류 무시.

int main(){
        char u_name[50];

       scanf( "%s", &u_name);
       printf( "Welcome %s", u_name);

       
        return 0;
}

'Converting User Input'
유럽식 층 표기법 = 1, 0(입구), -1 ...
미국식 층 표기법 = 2, 1(입구), B1 ...
---- 유럽식 층 표기 -> 미국식 층 표기로 바꾸는 코드.
inp = raw_input('Europe floor : ')
usf = int(inp) + 
print "Us floor is "usf
##string인 inp를 int형으로 캐스팅.

'파이썬에서의 주석처리.'
- '#' 사용.

'String Operations'
print 'abc' '123'
print 'hi' 5

'Mnemonic Variable Names'
- Mnemonic : (기억을 돕는)연상기호. 
- 변수의 이름을 정할 때 기억이 잘되고 알아보기 쉬운 이름으로 지을것. 




소감
이번 4강에서는 기본적인 내용이긴 하지만 파이썬에 맞는 새로운 연산들과 함수를 배워 더욱 집중해서 들었다. 특히 파이썬의 문자열 연산 내용과 입력함수인 'raw_input()'을 잘 기억해놔야겠다.

 + 파이썬 예제코드를 C로 바꾸는 작업에서 겨우 한달 C언어를 안했을 뿐인데 기본적인걸 너무 많이 까먹어서 충격받았다.... 얼른 파이썬 기본과정 끝내고 파이썬 자료구조 수업 때 부터는 C 복습도 할겸 꼭 C언어로의 표현을 같이 정리해야겠다.
++ scanf 보안문제로 인한 에러떔에 빌딩안되는 것도 내가 scanf 사용법을 잘몰라서 그런줄 알았다... 이거땜에 시간 꽤 날림 ㅜㅜ C 복습도 꼭꼭 해야지..








+ Recent posts