WHEREIS

코딩 연습

2018. 4. 18. 13:13


데이터 입력 받아 출력하기

=============================================================

print("Enter your name:")

somebody = input()

print ("Hi", somebody, "How are you today?")


-> 줄여서


somebody = str(input("Enter your name: "))

print ("Hi", somebody, "How are you today?")


* input 을 받을땐 data type 은 string 으로 들어온다



연습 문제

=============================================================

온도 변환 (화씨 -> 섭씨)



print("본 프로그램은 섭씨를 화씨로 변환해주는 프로그램입니다.")


ondo = float(input("변환하고 싶은 섭씨 온도를 입력해 주세요: "))

changeondo = (ondo*1.8)+38


print('섭씨온도:',ondo)

print('화씨온도:',changeondo)




리스트 강의

============================================================

len = 리스트 길이 출력

ex - len(변수)


 in = 해당 리스트 안에 값이 있는지 확인

ex - 값 in 변수


# 추가

변수.append("값")   리스트에 새로운 값 추가

변수.extend("값","값2")   리스트 값을 추가하여 확장

변수.insert(0,"값")   리스트 값을 추가하여 확장


# 삭제 

변수.remove("whilte")   리스트에 white 삭제

del 변수[0] 리스트 내 특정 주소 값 삭제


element -> 리스트 안에 객체 


일반적으로 컴파일러 언어들은 메모리확보를 위해 하나의 리스트 안에 다양한 데이터(타입) 을 담지 않는다.


# 리스트의 메모리 저장 방식


a=[5,4,3,2,1]

b=[1,2,3,4,5]


b=a                  <- a 와 같은 메모리 주소를 보게 됨

print(b)  

[5,4,3,2,1]


따라서 a.sort() 를 하면 print(b) 도 결과가 같아짐


[1,2,3,4,5]



# 파이썬 메모리의 특징
256까지의 값은 특정 메모리 영역에 저장함
-> 255까지의 값은'is'에 'True' 를 출력
-> 256 이상의 값에는 'False' 를 출력


>>>a=10
>>>a is 10     메모리 주소가 같냐
True


>>>a=400
>>>a is 400
False



# 패킹/언패킹

>>>t=[1,2,3]

>>>a,b,c = t


>>>a

1

>>>b

2

>>>c

3





#조건문  

if 조건 < 30:

명령어


else:

명령어


x == y (값이 같다)

x is y (메모리 주소가 같다)




부정 !, is noet



#기타 사용법

조건절에 True(1), False(0) 이 사용 가능


if "abc" 참

if "" 거짓 



# 반복문 (for)

for looper in range(0,5):

print(looper)



- for 문 안에 list 사용

test_list = list(range(5))


for i in test_list:

print(i)




sequence type

> 한 글자씩 순서대로 출력

> for문 뒤에 입력 가능



range(1,10,2) 1부터 10까지 2씩 증가, 역순도 가능






# 반복문 (while)


i=1

while i<20:

print(i)

i+=1


# 역순으로 글자 출력

sentence = "I love You"

reverse_sentence=''

for char in sentence:

  reverse_sentence = char + reverse_sentence

  print (reverse_sentence)



# 2진수 변환

decimal = 10

result = ''

while (decimal > 0):

remainder = decimal % 2

decimal = decimal/2

result = str(remainder) + result

print(result)


# 가변적인 중첩 반복문(variable nested loops)

두 개 이상의 반목문이 중첩되어 만들어진 반복문


# 라이브러리

import random # 난수 발생 함수 호출

-> random.randint(1, 100)  # 1~100 사이 정수 생성


import random

guess_number = random.randint(1,100)

print ("숫자를 맞춰보세요 (1~100)")

user_input = int(input())


while (user_input != guess_number):

  if user_input > guess_number:

    print ("숫자가 너무 큽니다")

  else:

    print ("숫자가 너무 작습니다")

  user_input = int(input())

else: print ("정답입니다. " , "입력한 숫자는", user_input ,"입니다.")



#점수 계산

kor_socre = [49,79,20,100,80]

math_score = [43,59,85,30,90]

eng_score = [49,79,48,60,100]

midterm_score = [kor_socre,math_score,eng_score]

#print(midterm_score)


student_core = [0,0,0,0,0]


i = 0


for subject in midterm_score:

  for score in subject:

    print(score)

    student_core[i] += score

    print(student_core)

    i += 1

  i = 0

else:

  a,b,c,d,e = student_core

  student_average = [a/3,b/3,c/3,d/3,e/3]

#print(student_average)



# 함수
필요한 부분을 나눠서 합침

함수, 객체, 모듈

def 함수명(입력값, 입력값)
반복적인 수행이 필요한 프로그램
함수는 긴 코드를 논리적인 단위로 분리시킴
캡슐화 : 함수인터페이스를 이해하면 타인의 함수도 다양하게 사용 가능

# 함수 선언

# def 함수_이름(파라메터):
수행문#1(statements)
수행문#2(statements)
return <반환값>

리턴값과 파라메터는 사용자가 선택적으로 입력 가능
리턴이 있을 때에는 print 문을 찍어줘야 함.




# 사각형 넓이를 구하는 함수

def calculate_rectangel_area(x,y):

return x*y


rectangle_x=10

rectangle_y=20


print("사각형 x의 길이:", rectangle_x)

print("사각형 y의 길이:", rectangle_y)


print("사각형의 넓이:", calculate_rectangel_area(rectangle_x,rectangle_y))


# 변수가 사용되는 범위

> 지역변수 : 함수내에서만 사용

> 전역변수 : 프로그램 전체에서 사용


def test(t):

print(x)

t=20

print("In Function:", t)


x=10

test(x)

print(t)



# 지역변수와 전역변수에 같은 값을 주려면 변수 앞에 global 을 입력한다.

def f():

global s

s="I love London!"

print(s)


s="I love Paris!"

f()

print(s)


# 재귀함수

> 자기자신을 호출하는 함수

> 점화식과 같은 재귀적 수학 모형을 표현할 때 사용

> 재귀 종료 조건이 있고, 종료 조건까지 함수호출 반복

> 대표적 재귀식 : 팩토리얼 계산

> 너무 큰 숫자를 일렵하거나 잘못 활용하면, 메모리를 과도하게 많이 차지


# 예시


def factorial(n):

if n ==1:

return 1

else:

return n*factorial(n-1)

print(factorial(int(input("input number for factorial calcualtion:"))))



# 파이썬 디벙기

if __name__='__main__':

import <모듈> 실행 시, 메모리에 바로 적재

name 사용 시, 해당 과정을 생략 가능




- 점프 투 파이썬

https://wikidocs.net/book/1


- 코드카데미

https://www.codecademy.com


- 코드파이트

https://codefights.com/


- 생활코딩

https://opentutorials.org/course/1750



#코딩 검사

flake8 모듈로 체크 - flake8 <파일명>


cmd 창에서.

conda install flake8


# 메모리 사용 확인

하나의 변수 안에 있는 값이 메모리주소를 얼마만큼 차지하는지 확인

import sys

sys.getsizeof('a')

string은 1byte 크기로, 한 글자 당 메모리 공간이 할당됨



# 문자열 처리

\e -> esc

\b -> backspace



# 파일 안에 글자수 찾기

f = open("test.txt", 'r') #파일 열기


yesterday_lyric = ""


while 1:

    line = f.readline()   # 1줄씩 파일 읽기

    if not line:

        break

    yesterday_lyric = yesterday_lyric + line.strip() + "\n"

f.close()


n_of_yesterday = yesterday_lyric.upper().count("YESTERDAY")

print("Number of a Word 'Yesterday'", n_of_yesterday)




# 스택과 큐

스택 : 나중에 넣은 데이터를 먼저 반환

LIFO (LAST IN FIRST OUT)


append(),pop() 구문 사용



>> a = [1,2,3]

>> a.append(4)

[1,2,3,4]


마지막에 들어온 데이터부터 차례대로 빠져나감

>> a.pop()

4




word = input("Input a word : ")

word_list = list(word)

for i in range(len(word_list)):

print(word_list.pop())



// pop()end='' 모든 수가 한줄에서 연속 출력 됨


# 큐
먼저 넣은 데이터를 먼저 반환
First in first out
stack 과 반대되는 개념

append(),pop() 사용하여 구현


>>test_test = [1,2,3,4,5]

>>test_test.append(6)

>>test_test

[1,2,3,4,5,6]


>>test_test.pop(0)

1


# 튜플

리스트와 동일하나 값의 변경이 불가능(새로운 값 할당 불가)

선언 시 [] 가 아닌 ()를 사용

리스트의 연산,인덱싱,슬라이싱 등을 동일하게 사용



a = (1,2,3)

type(a)

<class 'tuple'>


목적 : 프로그램을 작동하는 동안 변경되지 않는 데이터를 저장하기 위함


a = (1)

-> int type


a = (1,)

-> tuple type


# 셋 (set)

값을 순서 없이 저장하는 자료형

* 중복을 불허 하는 자료형

set 객체 선언을 이용하여 객체 생성

수학에서의 집합 연산들을 동일하게 사용 가능


set_1 = set([1,2,3,4,5])

set_1.add(6)

set_1.remove(1)

set_1.update([1,2,3])



set_1 | set_2  (union, 합집합)

set_1.union(set_2)


set_1 - set_2 차집합

set_1 & set_2 교집합


> 문자로도 표현 가능(intersection,difference)



#사전 (dictionary)


데이터를 저장 할 때 데이터의 값(key)과 함께

그 값을 구분 지을 수 있는 특지 값을 함께 저장하는 방식



key 값을 활용하여, 데이터 값을 관리




student_info = {20140012:'tt',20140059:'ss'}


student_info[20140012]

-> 해당 사번의 이름 출력



student_info[20151191] = "sungmin"

-> 추가


country_code = {}

country_code = {82:"korea", 1:"usa"}

country_code.keys()

-> key 값만 출력

country_code.items()

-> items 값만 출력


country_code.values()

-> 값만 출력


for k, v in country)code.times():

print(k,v)


# 소스코드

import csv


def getkey(item): #정렬을 위한 함수

    return item[1]


command_data = [] #파일 읽어오기

with open("command_data.csv", "r", encoding="utf-8") as csvfile:

    spamreader = csv.reader(csvfile, delimiter=',', quotechar='"')

    for row in spamreader:

        command_data.append(row)


command_counter = {} #dict 생성, 아이디를 key 값

for data in command_data: # list 데이터를 dict 로 변경

    if data[1] in command_counter.keys():

        command_counter[data[1]] += 1 # 기존 출현한 아이디

    else:

        command_counter[data[1]] = 1 # 처음 나온 아이디


dictlist = []

for key, value in command_counter.items():

    temp = [key,value]

    dictlist.append(temp)


sorted_dict= sorted(dictlist, key=getKey, reverse=True)

???


# join

list 에 있는 글자를 붙여 줌


colors=['red','blue','green']

result=".join(colors)

result

'redbluegreen'



# split 

string type 의 값을 나눠서 list 형태로 변환하는 함수

빈칸,콤마,문자 등을 기준으로 데이터를 나눔


example = 'python,jqeury,javascript'

print(example.split(","))


example = 'sungmin.co.kr'

subdomain, domain, tld = example.split('.')

print(subdomain, domain, tld)



# join


기준값을 중심으로 값을 합치는 함수

split 함수와 마찬가지로 빈칸, 콤마 문자 등을 기준으로 데이터를 합침


colors = ["RED","BLUE","GREEN"]


",".joint(colors)

print("\n".join(colors)




# list comprehensions


파이썬에서 필수적인 기법

기존 list 를 사용하여 간단히 다른 list를 만드는 기법

(for 문 없이 새로운 list생성 가능)

포괄적 리스트, 지능리스트, 포함되는 리스트 등으로 표현

파이썬에서 가장 많이 사용되는 기법 중 하나

일반적으로 for + append 보다 빠른 속도의 기법

for 문을 2개 이상 활용해서 사용 가능


result = []

for i in range(10):

result.append(i)

result



[i for i in range(10)]



text_1 = "hello"

text_2 = "world"

[a+b for a in text_1 for b in text_2]

[a+b for a in text_1 for b in text_2 if a==b]


[[a+b for a in text_1] for b in text_2 if a==b]

- 밖에 있는 for 문이 먼저 진행 됨.

- if 문은 괄호안에



.sort()

set() <- 중복값 삭제





# Enumerate


list 타입에서 주로 사용하는 기법

인덱스와 밸류 값을 함께 추출하는 기법


test = "bcde"

list(enumerate(test)


-> 어떤 문장속 단어들의 인덱스를 뽑을때


test = "Hello world python"

onehot = test.split()

for i, v in enumerate(onehot):

print(i, v)



# ZIP

같은 길이의 list 2개가 있을 때

같은 위치에 있는 값들을 추출하는 기법


a = [1,2,3]

b = [10,20,30]


>>> for c in zip(a,b):

...     print(c)

... 

(1, 10)

(2, 20)

(3, 30)


>>> [sum(x) for x in zip((1,2,3), (10,20,30), (100,200,300))]

[111, 222, 333]


>>> for c in enumerate(zip(a,b)):

...     print(c)

... 

(0, (1, 10))

(1, (2, 20))

(2, (3, 30))




#모듈에서 특정 함수 또는 클래스만 호출

from <함수명> import <모듈명>


#alias 설정 - 모듈명을 별칭으로 지정

import <함수명> as <별칭>


#모듈에서 모든 함수 또는 클래스 호출

import <모듈명> import *





response = urllib.request.urlopen("주소")


response.read()

> 웹페이지 소스를 보는 함수



가상환경 관리도구

virtualenv


conda



conda create -n 가상환경이름 python=3.4


# matplotlib

import matplotlib.pyplot as plt

plt.plot([1,2,3,4])

plt.ylabel('some sumbers')

plt.show()



#파일핸들링

f=open("파일이름","접근모드")

> 접근모드

R 일기

W 쓰기 - 기존 파일을 덮어써버림

A 추가 - 파일의 마지막에 새로운 내용을 추가할 때


f_read = f.read()

print(f_read_

f.close()




> colse 없이 파일을 열때 사용

with open("파일이름") as f:



> readlines 함수

파일을 리스트 형태로 읽음

.read().splt("\n") 함수와 동일 기능




#파일 쓰기 

f=open("txt",'w',encoding="utf8")

for i in range(1,11):

data = "%d번째 줄입니다.\n" % (i)

f.write(data)

f.close()



#파일 일기

with open("txt","r") as myfile:

i = 0

while 1:

line = myfile.readline()

if not line:

break


line = line.replace("\n","")

if line.strip() == "":

continue


print (str(i) + " === " + line)

i = i + 1


# 폴더가 없는지 확인하고 만들기

if os.path.isdir("폴더") == False:

os.mkdir("ddd")










'Language > Python' 카테고리의 다른 글

python 주식정보 가져오기  (0) 2019.02.08
xen 호스트 아이피 정보 가져오기  (0) 2018.06.15

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band
loading