PCDuckHu's Story

ubuntu & jenkins


sudo add-apt-repository ppa:webupd8team/java

sudo apt update; sudo apt install oracle-java8-installer

javac -version(확인)

sudo apt install oracle-java8-set-default


wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -

sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

apt-get update

apt-get install jenkins




cd /etc/apache2/sites-available

sudo nano jenkins.conf (NEW)

-----------------------------------------------

<VirtualHost *:80>

    ServerAdmin webmaster@localhost

    ServerName ci.company.com

    ServerAlias ci

    ProxyRequests Off

    <Proxy *>

        Order deny,allow

        Allow from all

    </Proxy>

    ProxyPreserveHost on

    ProxyPass / http://localhost:8080/ nocanon

    AllowEncodedSlashes NoDecode

</VirtualHost>

------------------------------------------------



a2enmod proxy


sudo apt update; sudo apt install oracle-java8-installer


sudo apt-get update


sudo apt-get install openjdk-7-jdk openjdk-7-jre-headless

'[개발노트] ' 카테고리의 다른 글

ubuntu & APM (2016ver)  (0) 2018.10.19

ubuntu & APM



0. 리눅스 설정

$ sudo apt-get update

$ sudo apt-get install update

$ sudo apt-get install unzip


($ sudo apt-get install ubuntu-desktop)


1. 아파치 설치하기

$ sudo apt-get install apache2

$ sudo service apache2 stop


2. php 설치

sudo apt-get install php5 libapache2-mod-php5


3. mysql 설치 - 설정

$ sudo apt-get install php5-mysql

$ sudo apt-get install mysql-server

- passwd 입력


$ cd /var/www/html

$ sudo nano info1.php (잘 설치됬는지 체크)


<?php

phpinfo();

?>

저장 - URL 확인


4. WP 설치

$ sudo wget http://ko.wordpress.org/wordpress-3.4.1-ko_KR.zip



$ sudo cp wp-config-sample.php wp-config.php

'[개발노트] ' 카테고리의 다른 글

ubuntu & jenkins (2017ver)  (0) 2018.10.19



1. 아파치 설치하기

$ sudo apt-get install apache2


4. php 설치 하기

$ sudo apt-get install php5-common php5 libapache2-mod-php5 php5-mysql php5-gd php5-curl php5-json

워드프레스 이미지 썸네일 생성 시 gd라이브러리가 필요하기 때문에 php5-gd 를 꼭 설치 하도록 하자.


3. MySQL 설치 하기

$ sudo apt-get install mysql-server mysql-client


2. mysql 인증 모듈 설치하기

$ sudo apt-get install libapache2-mod-auth-mysql


5. mod_rewrite 적용하기

$ sudo a2enmod rewrite

당장에 mod_rewrite 가 필요하지는 않지만 워드프레스주소를 변경하거나 등의 이유로 mod_rewrite가 필요로 하다.


8. 데이타베이스 설치

$ mysql -u root -p

mysql> create database 데이타베이스명;   (보통은 wordpress라는 이름으로 많이 만듭니다.)

mysql> create user '유저명'@'localhost' identified by '암호'; 

mysql> GRANT ALL PRIVILEGES ON wordpress.* TO '유저명'@'localhost';

mysql> FLUSH PRIVILEGES;

mysql> exit;


6. 테스트를 위한 도메인 설정 (도메인을 가지고 있다면 생략), 테스트를 위한 도메인 설명은 워드프레스 설치 준비 하기 – windows 편 를 참고한다. 우분투에서 테스트를 위한 도메인을 생성 한 후 연동하려면

$ sudo vi /etc/hosts 

에서 편집 (http://ssamture.net/archives/2173) 참고

$ sudo vi /etc/hostname 에 있는 host명과 동일하게 해야함



7. Wordpress 설치

$ cd /var/www/html

$ sudo wget https://wordpress.org/latest.tar.gz

$ sudo tar -xvzf latest.tar.gz

$ sudo rm latest.tar.gz

$ cd wordpress

$ sudo cp wp-config-sample.php wp-config.php


10. 소유자 권한 설정

$ cd /var/www/html

$ sudo chown -R www-data:www-data wordpress

$ sudo chmod -R 755 wordpress

$ sudo service apache2 restart


9. wp-config.php 파일 설정

$ sudo nano wp-config.php   (/var/www/html/wordpress)

파일을 편집 - 아래 명령어 찾아 수정

define('DB_NAME', '데이타베이스명');  

define('DB_USER', '유저명');

define('DB_PASSWORD', '암호');




10. 재시작 및 확인

$ sudo service apache2 restart

접속이 되는지 확인해보자


11. [워드프레스] 설정

브라우져에서 http://컴퓨터ip/wordpress/로 접속하여 id/password 설정 후 로그인

ip대신 localhost를 쓰시면 다른 컴퓨터에서 접속이 안되는 형태로 설정되니 주의

'[개발노트] > # Python' 카테고리의 다른 글

(크롤링) 코드 예문  (0) 2018.09.11
(기초2) 구문 예시  (0) 2018.09.11
(기초1) 구문 예시  (0) 2018.09.11
(기초1) 기호, 함수  (0) 2018.09.10
(설치&참고유틸)  (0) 2018.09.09


# 빗썸 조회 크롤링


import requests

import json

import time

import csv

from datetime import datetime



count = int(input("몇 번 조회할까요? "))

stocks = []


for n in range(0, count):

response = requests.get("https://api.bithumb.com/public/ticker/BTC")

content = response.content

data = json.loads(content)

date = datetime.fromtimestamp(int(data['data']['date']) / 1000)

open1 = data['data']['opening_price']

close = data['data']['closing_price']

max = data['data']['max_price']

min = data['data']['min_price']

volume = data['data']['volume_1day']

stocks.append([date, open1, close, max, min, volume])

time.sleep(5)


"""

file = open('stocks.csv', 'w', newline = '')

csvfile = csv.writer(file)

for stock in stocks:

csvfile.writerow(stock)

file.close()

"""


with open('stocks.csv', 'w', newline = '') as file:

csvfile = csv.writer(file)

for stock in stocks:

csvfile.writerow(stock)


"""

with open('stocks.csv', 'w', newline = '') as file:

data = json.dumps(stocks, indent = '    ')

file.write(data)

"""



# index.html 문서 내용중 프로그래밍 언어, 운영체제 목록을 목록(list)화하기


import requests

from bs4 import BeautifulSoup



# 파일을 이용하여 크롤링을 진행하는 과정

file = open("index\\index.html", "r")

data = file.read()

file.close()



# 웹사이트를 통해 크롤링을 진행하는 과정


response = requests.get("http://192.168.101.200")

data = response.content


html = BeautifulSoup(data, "html.parser")

lists = []


for tag in ["ul", "ol"]:

li_list = html.find(tag).find_all("li")

temp_list = []

for li in li_list:

temp_list.append(li.text)

lists.append(temp_list)

print(lists)

print("프로그래밍 언어 목록 : {}".format(lists[0]))

print("운영체제 목록 : {}".format(lists[1]))






# table1.html 문서의 테이블(표)를 2차원 목록화하기


import requests

from bs4 import BeautifulSoup



response = requests.get("http://192.168.101.200/table3.html")

response.encoding = 'eucKR'

data = response.text

html = BeautifulSoup(data, 'html.parser')

tr_list = html.find("body").find_all("tr")

lists = []


for tr in tr_list:

temp_list = []

td_list = tr.find_all("td")

for td in td_list:

temp_list.append(td.text)

lists.append(temp_list)


for item in lists:

print(item)




# professors.html 문서의 테이블(표)를 2차원 목록화하기


response = requests.get("http://192.168.101.200/professors.html")

data = response.text

html = BeautifulSoup(data, 'html.parser')

tr_list = html.find("table").find("tbody").find_all("tr")

professors = []


for tr in tr_list:

no = tr.find("td", {"class":"number"}).text

name = tr.find("td", {"class":"professor"}).text

lecture = tr.find("td", {"class":"lecture"}).text

grade = tr.find("td", {"class":"grade"}).text

eval = tr.find("td", {"class":"evaluation"}).text

professors.append([no, name, lecture, grade, eval])


file = open("professors.csv", "w", newline = "")

csvfile = csv.writer(file)


for professor in professors:

csvfile.writerow(professor)


file.close()




# www.mnet.com 사이트에서 순위 50위까지 크롤링하기



import requests

from bs4 import BeautifulSoup

import csv

import os


def findinfo(tr):

rank = int(tr.find("td", {"class":"MMLItemRank"}).find("span").text.strip("위"))

title = tr.find("td", {"class":"MMLItemTitle"}).find("a", {"class":"MMLI_Song"}).text

try:

artist = tr.find("td", {"class":"MMLItemTitle"}).find("a", {"class":"MMLIInfo_Artist"}).text

except:

artist = "None"

try:

album = tr.find("td", {"class":"MMLItemTitle"}).find("a", {"class":"MMLIInfo_Album"}).text.replace("\xa0", " ").replace("\u2013", "-")

except:

album = "None"

info = {"rank":rank, "title":title, "artist":artist, "album":album}

return info


def saveimage(rank, date, tr):

img_url = tr.find("img")["src"]

filename = "{}\{:03}.jpeg".format(date, rank)

response = requests.get(img_url)

image = response.content

with open(filename, "wb") as file:

file.write(image)


date = input("언제[YYYYmmdd] 가요순위를 크롤링할까요? ")

pages = int(input("총 페이지[50/page]를 크롤링할까요? "))

os.system("md {}".format(date))


chart = []


for page in range(1, pages + 1):

url = "http://www.mnet.com/chart/TOP100/{}?pNum={}".format(date, page)

response = requests.get(url)

response.encoding = 'UTF-8'

data = response.text

html = BeautifulSoup(data, 'html.parser')

tr_list = html.find("table").find("tbody").find_all("tr")


for tr in tr_list:

info = findinfo(tr)

saveimage(info["rank"], date, tr)

chart.append([info["rank"], info["title"], info["artist"], info["album"]])


filename = "{}\chart-{}.csv".format(date, date)

file = open(filename, "w", newline = "")

csvfile = csv.writer(file)


for item in chart:

csvfile.writerow(item)


file.close()






# 네이버 속보페이지 크롤링하기



import requests

from bs4 import BeautifulSoup


date = input("언제[YYYYmmdd] 기사를 크롤링할까요? ")

pages = int(input("총 몇페이지[20/page]를 크롤링할까요? "))


for page in range(1, pages + 1):

url = "https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date={}&page={}".format(date, page)

response = requests.get(url)

text = response.text

html = BeautifulSoup(text, 'html.parser')


li_list = html.find("div", {"class":"list_body"}).find_all("li")

for li in li_list:

title = li.find("dt", "").text.strip("\n\r\t ")

try:

img_url = li.find("dt", {"class":"photo"}).find("img")['src'].split("?")[0]

except:

img_url = "None"

body = li.find("dd").find("span", {"class":"lede"}).text 

writer = li.find("dd").find("span", {"class":"writing"}).text

print("기사제목 : {}".format(title))

print("기사사진 : {}".format(img_url))

print("기사본문 : {}".format(body))

print("기사제공 : {}".format(writer))

print("--------------------------------------------------------------------------------------")































'[개발노트] > # Python' 카테고리의 다른 글

ubuntu & Wordporess (2015.ver)  (0) 2018.10.18
(기초2) 구문 예시  (0) 2018.09.11
(기초1) 구문 예시  (0) 2018.09.11
(기초1) 기호, 함수  (0) 2018.09.10
(설치&참고유틸)  (0) 2018.09.09

# 운항 시간 계산하기



def flight(s, e):

s_hour = int(s) // 100

s_min = int(s) % 100

e_hour = int(e) // 100

e_min = int(e) % 100

if s_hour > e_hour or s_hour == e_hour and s_min >= e_min:

e_hour = e_hour + 24

if s_min > e_min:

e_hour = e_hour - 1

e_min = e_min + 60

hour = e_hour - s_hour

min = e_min - s_min

# time = "{:02}{:02}".format(hour, min)

# time = hour * 100 + min

return [hour, min]


start = input("출발 시각 : ")

end = input("도착 시각 : ")

time = flight(start, end) # time = [hour, min]

hour = time[0]

min = time[1]


if hour > 0 and min > 0:

print("운항 시간 : {}시간 {}분".format(hour, min))

elif min == 0:

print("운항 시간 : {}시간".format(hour))

elif hour == 0:

print("운항 시간 : {}분".format(min))




# 항공편 예약시스템


import csv


def start():

file = open("database.csv", "r")

csvfile = csv.reader(file)

database = []

for item in csvfile:

database.append(item)

file.close()

return database


def end(database):

file = open("database.csv", "w", newline = "")

csvfile = csv.writer(file)

for data in database:

csvfile.writerow(data)

file.close()


database = start()


def reserve(p, f):

if [p, f] not in database:

database.append([p, f])

else:

print("동일한 예약이 발견되었습니다.")


def cancel(p, f):

if [p, f] in database:

database.remove([p, f])

else:

print("동일한 예약이 발견되지 않았습니다.")


def flight(f):

print("-----------------")

print(" Flight : {}".format(f))

print("-----------------")

for data in database:

if f == data[1]:

print('', data[0])


def passenger(p):

print("-----------------")

print(" Passenger : {}".format(p))

print("-----------------")

for data in database:

if p == data[0]:

print('', data[1])


def all():

print("-----------------")

print(" Passenger Flight")

print("-----------------")

for data in database:

print(" {:<9} {:<6}".format(data[0], data[1]))


code = ''


while code != 'q':

cmd = input("command : ").split()

code = cmd[0] # 'r', 'f', 'p', 'q'

if code == 'r': # ['r', 'kim', '101']

p = cmd[1]

f = cmd[2]

reserve(p, f)

elif code == 'c': # ['c', 'kim', '101']

p = cmd[1]

f = cmd[2]

cancel(p, f)

elif code == 'f': # ['f', '101']

f = cmd[1]

flight(f)

elif code == 'p': # ['p', 'kim']

p = cmd[1]

passenger(p)

elif code == 'a': # ['a']

all()


end(database)




# 폭탄 돌리기



def finddrop(players, start, step):

drop = (start + step) % len(players)

return drop


# players = input("플레이어들을 빙둘선 순서로 입력하세요: ").split()


players = ["B", "K", "M", "A", "C", "D", "P"]

print("플레이어들의 목록: {}".format(players))

start = int(input("시작 위치를 0 이상의 숫자로 입력하세요: "))

step = int(input("간격을 몇 사람으로 할까요? "))

print("")


while len(players) > 1:

drop = finddrop(players, start, step)

start = drop - 1

print("{}가 게임에서 제외되었습니다.".format(players[drop]))

del players[drop]


print("\n최종 생존자 : {}".format(players[0]))




# MySQL Server 연동하기



import pymysql


def savefile(filename, result):

import csv

file = open(filename, "w", newline = "")

csvfile = csv.writer(file)

for item in result:

csvfile.writerow(item)

file.close()


connect = pymysql.connect(host = '192.168.101.200',

  port = 3306,

  user = 'user0',

  password = '0abc',

  db = 'shopping_db')

cursor = connect.cursor()


while True: # 반복문 

sql = input("sql> ")         # sql = 'quit'가 되기전까지 계속 질의하는 코드작성

# write

if sql == '':

pass # 2018.09.02_09:02

elif sql == 'write':

from datetime import datetime

now = datetime.now()

f_filename = "{:4}.{:02}.{:02}_{:02}{:02}".format(now.year, now.month, now.day, now.hour, now.minute)

filename = input("어떤 이름으로 저장할까요[{}]? ".format(f_filename)).strip(" ")

if filename == "":

f_filename = f_filename + ".csv"

savefile(f_filename, result)

else:

filename = filename + ".csv"

savefile(filename, result)

elif sql != 'quit':

try:

cursor.execute(sql)

result = cursor.fetchall()

for item in result:

print(item)

except:

print("잘못된 SQL문장입니다.")

else:

break







# 주민등록번호 (클래스) 생성 : ssn



# 1. 제약조건 : 문자열형이여야한다.

# 2. 자료길이 : 14

# 3. 인덱스 0 ~  5 : 문자들('0 ~ 9')

#    인덱스 6      : 문자('-')

# 인덱스 7 ~ 13 : 문자들('0 ~ 9')

# 4. 인덱스 0 ~  1 : '00 ~ 99'

#    인덱스 2 ~  3 : '01 ~ 12'

#    인덱스 4 ~  5 : '01 ~ 31'

#    인덱스 7      : '1 ~ 8'


class ssn:

def __init__(self, data):

numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

if type(data) != type(str()):

print("문자열형 데이터가 아닙니다.")

return None

if len(data) != 14:

print("14자리 주민등록번호가 아닙니다.")

return None

for i in range(0, 14):

if i != 6:

if data[i] not in numbers:

print("숫자가 아닌 문자를 포함하고 있습니다.")

return None

else:

if data[6] != '-':

print("7번째가 문자가 '-'가 아닙니다.")

return None

if int(data[2:4]) not in range(1, 13):

print("1월 ~ 12월 사이가 아닙니다.")

return None

if int(data[4:6]) not in range(1, 32):

print("1일 ~ 31일 사이가 아닙니다.")

return None

if int(data[7]) not in range(1, 9):

print("주민등록번호 8번째 자리는 1 ~ 8 만 가능합니다.")

return None

self.data = data

def gender(self):

if int(self.data[7]) in [1, 3, 5, 7]:

return 'Male'

else:

return 'Female'

def birthday(self): # 801205-1155666

from datetime import date # 081205-4422777

if int(self.data[7]) in [1, 2, 5, 6]:

year = int("19" + self.data[0:2]) # 1980

# year = 1900 + int(self.data[0:2]) # 1980

else:

year = int("20" + self.data[0:2]) # 2008

month = int(self.data[2:4])

day = int(self.data[4:6])

return date(year, month, day)

def age(self):

from datetime import date

birthday = int(self.birthday().strftime("%Y%m%d"))

today = int(date.today().strftime("%Y%m%d"))

age = (today - birthday) // 10000

return age

















'[개발노트] > # Python' 카테고리의 다른 글

ubuntu & Wordporess (2015.ver)  (0) 2018.10.18
(크롤링) 코드 예문  (0) 2018.09.11
(기초1) 구문 예시  (0) 2018.09.11
(기초1) 기호, 함수  (0) 2018.09.10
(설치&참고유틸)  (0) 2018.09.09

# 생년월일로부터 만 나이 계산하기


print("이름, 생년, 생일(네 자리 수)을 입력하세요:")

name = input("이름: ")

b_year = int(input("생년: "))

b_date = int(input("생일: "))

b_month = b_date // 100

b_day = b_date % 100


c_year = 2018

c_month = 8

c_day = 11


today = c_year * 10000 + c_month * 100 + c_day

birthday = b_year * 10000 + b_month * 100 + b_day

age = (today - birthday) // 10000



print("{} 님의 만나이는 {}세입니다.".format(name, age))




# 주민등록번호로부터 생년월일을 출력


def getbirthday(ssn): # 800512-115566

if ssn[7] in ["1", "2", "5", "6"]:

# year = 1900 + int(ssn[0:2])

year = int("19" + ssn[0:2])

elif ssn[7] in ["3", "4", "7", "8"]:

# year = 2000 + int(ssn[0:2])

year = int("20" + ssn[0:2])

month = int(ssn[2:4])

day = int(ssn[4:6])

return [year, month, day]


ssn = input("주민등록번호 : ")

birthday = getbirthday(ssn)

year = birthday[0]

month = birthday[1]

day = birthday[2]


print("생년월일 : {}년 {}월 {}일".format(year, month, day))

print("생년월일 : {}-{:02}-{:02}".format(year, month, day))




# 네 자리 수 암호 검증 프로그램


def verify(password):

p1 = int(password[0])

p2 = int(password[1])

p3 = int(password[2])

p4 = int(password[3])


# duplicate : 중복되는 숫자가 있는지를 검사

# increment : 4자리 수가 모두 1씩 증가하는지를 검사

# decrement : 4자리 수가 모두 1씩 감소하는지를 검사


duplicate = p1 == p2 or p1 == p3 or p1 == p4 or p2 == p3 or p2 == p4 or p3 == p4

increment = p1 + 1 == p2 and p2 + 1 == p3 and p3 + 1 == p4

decrement = p1 - 1 == p2 and p2 - 1 == p3 and p3 - 1 == p4


if duplicate or increment or decrement:

return False

else:

return True


def print_pass(result):

if result:

print("사용할 수 있는 암호입니다.")

else:

print("사용할 수 없는 암호입니다.")


for i in range(0, 100):

password = input("사용하고자 하는 암호를 입력하세요: ")

result = verify(password)

print_pass(result)




# 사용가능한 암호가 입력될 때까지, 반복적으로 암호 입력받기


# True : -1, 1, "0", "a", [0], [1, 2]

# False : 0, "", [], None


def verify(password):

p1 = int(password[0])

p2 = int(password[1])

p3 = int(password[2])

p4 = int(password[3])


# duplicate : 중복되는 숫자가 있는지를 검사

# increment : 4자리 수가 모두 1씩 증가하는지를 검사

# decrement : 4자리 수가 모두 1씩 감소하는지를 검사


duplicate = p1 == p2 or p1 == p3 or p1 == p4 or p2 == p3 or p2 == p4 or p3 == p4

increment = p1 + 1 == p2 and p2 + 1 == p3 and p3 + 1 == p4

decrement = p1 - 1 == p2 and p2 - 1 == p3 and p3 - 1 == p4


if duplicate or increment or decrement:

return False

else:

return True



# 해결방법 1


"""

password = input("사용할 암호는? ")

while not verify(password):

print("사용할 수 없는 암호입니다.")

password = input("사용할 암호는? ")

print("사용할 수 있는 암호입니다.")

"""


# 해결방법 2


"""

result = False

while not result:

password = input("사용할 암호는? ")

result = verify(password)

if result:

print("사용할 수 있는 암호입니다.")

else:

print("사용할 수 없는 암호입니다.")

"""


# 해결방법 3


"""

while True:

password = input("사용할 암호는? ")

result = verify(password)

if result:

print("사용할 수 있는 암호입니다.")

break

else:

print("사용할 수 없는 암호입니다.")

"""



# Pass/Fail 판정 프로그램


mid = int(input("중간고사 점수: "))

fin = int(input("기말고사 점수: "))

average = mid * 0.4 + fin * 0.6


if average >= 60:

message = "Pass"

else:

message = "Fail"


print("교양음악의 평균은 {:.1f}점이고, 최종학점은 {}입니다.".format(average, message))




# 거스름돈 계산하기


price = int(input("물건 값? "))

money = int(input("받은 돈? "))

change = money - price


if change > 0:

print("다음과 같이 거슬러주세요:")

m1 = change // 10000 # 10000원권 갯수

m2 = (change - 10000 * m1) // 5000

m3 = (change - 10000 * m1 - 5000 * m2) // 1000

if m1 > 0:

print("10000 x {}장".format(m1))

if m2 > 0:

print(" 5000 x {}장".format(m2))

if m3 > 0:

print(" 1000 x {}장".format(m3))




# 입장료 계산하기


# 성인(age >= 18) : 입장료 8000

# 미성년(age < 18) : 입장료 4000

# 나이를 입력받아 다음과 같은 메시지를 출력한다.

# 요금은 8000원입니다., 요금은 4000원입니다.


def computefee(age):

if age >= 18:

fee = 8000

else: # age < 18

fee = 4000

return fee


age = int(input("나이가 몇입니까? "))

fee = computefee(age)

print("요금은 {}원입니다.".format(fee))




# 세 개의 점수 가운데 최고점 찾기


def findmax(s1, s2, s3):

max = s1

if max < s2:

max = s2

if max < s3:

max = s3

return max


print("세 번의 TOFEL 점수를 입력하세요.")

score1 = int(input("시험1: "))

score2 = int(input("시험2: "))

score3 = int(input("시험3: "))

maximum = findmax(score1, score2, score3)

print("최고점: {}".format(maximum))




# 평균 점수로부터 합격/불합격 여부를 판정 프로그램



def findaverage(scores):

name = scores[0]

avg = (int(scores[1]) + int(scores[2]) + int(scores[3])) / 3

return [name, avg]                                   # [이름, 평균]


scores = input("학생명과 세 개의 점수: ").split()

result = findaverage(scores)

name = result[0]

avg = result[1]


if avg >= 60:

message = "합격"

else:

message = "불합격"


print("'{}'님의 평균점수는 {:.1f}점이고, {}입니다.".format(name, avg, message))





# 세금계산


# 1구간 -    0 ~ 1000 : 세율  0%

# 2구간 - 1000 ~ 2400 : 세율 10%

# 3구간 - 2400 ~ 4000 : 세율 12%

# 4구간 - 4000 ~ 6000 : 세율 15%

# 5구간 - 6000 ~      : 세율 20%

# 소득(3500) = 1구간(1000) * 0% + 2구간(1400) * 10% + 3구간(1100) * 12%


def findtax(income):

if income <= 1000:

tax = income * 0

elif income <= 2400:

tax = 1000 * 0 + (income - 1000) * 0.1

elif income <= 4000:

tax = 1000 * 0 + 1400 * 0.1 + (income - 2400) * 0.12

elif income <= 6000:

tax = 1000 * 0 + 1400 * 0.1 + 1600 * 0.12 + (income - 4000) * 0.15

else: # elif 6000 < income:

tax = 1000 * 0 + 1400 * 0.1 + 1600 * 0.12 + 2000 * 0.15 + (income - 6000) * 0.2

return tax


income = int(input("연소득을 입력하세요: "))

tax = findtax(income)

print("소득세 = {}".format(tax))




중첩 For문


# 학생들의 TOFEL 점수들을 입력받아 최고 높은 평균점수를 반환하는 함수

# 1. 학생들마다의 평균점수를 찾아야하고,

# 2. 평균 점수들 중에 가장 높은 점수를 반환한다.

# max = 0 , sum = 0 , avg, if max < avg


def str2int(slist):

nlist = []

for s in slist:

nlist.append(int(s))

return nlist


def findavg(students):

avgs = []

for student in students:

sum = 0

for score in student:

sum = sum + score

avg = round(sum / len(student), 1)

avgs.append(avg)

return avgs


kim = input("학생1 점수: ").split()

park = input("학생2 점수: ").split()

lee = input("학생3 점수: ").split()

kim = str2int(kim)

park = str2int(park)

lee = str2int(lee)

students = [kim, park, lee]

avgs = findavg(students)

print("학생별 평균 점수들 : {}".format(avgs))


# best = findbest(students)

# print("가장 높은 평균 점수는 {:.1f}점입니다.".format(best))





# 반장 선거


def str2int(slist):

nlist = []

for s in slist:

nlist.append(int(s))

return nlist


def countvotes(num, votes):

earns = [0] * num

for vote in votes:

# earns[vote - 1] += 1

earns[vote - 1] = earns[vote - 1] + 1

return earns


def printearns(earns):

for i in range(0, len(earns)):

print("기호 : {:2}, 득표 수 : {}".format(i + 1, earns[i]))


def printwinner(earns):

max = 0

for i in range(0, len(earns)):

if max < earns[i]:

max = earns[i]

maxidx = i

print("최다득표자 : 기호 {}".format(maxidx + 1))

num = int(input("총 후보자수 : ")) # 숫자 y

votes = input("투표 내용 : ").split() # (x x x x x x x) x:투표자의 기호 (각 x는 y의 범위를 넘지 못함)

votes = str2int(votes)

earns = countvotes(num, votes)


printearns(earns)

printwinner(earns)




# 목록의 원소 판단하기 (홀짝)


def str2int(slist):

nlist = []

for s in slist:

nlist.append(int(s))

return nlist


# findeven()함수는 인자로 목록이 들어오면,

# 목록안에 원소가 모두 짝수이면, True 반환하고,

#     1개이상의 홀수가 있으면, False 반환한다.


def findeven(numbers):

"""

for number in numbers:

if number % 2 == 1:

return False

return True

"""

i = 0

while numbers[i] % 2 == 0:

i = i + 1

if i == len(numbers):

break

if i == len(numbers):

return True

else:

return False


numbers = input("수의 목록 : ").split()

numbers = str2int(numbers)

result = findeven(numbers)


if result:

print("짝수들의 목록입니다.")

else:

print("홀수가 포함되어있습니다.")




# 원소의 목록에 대한 멤머쉽 검사



def member(list, item):

i = 0

mem = False

while i < len(list) and not mem :

if list[i] == item:

mem = True

i = i + 1

return mem


tom = ['car', 'dog', 'house', 'car', 'bike', 'yaght']

item = input("어떤 값이 목록에 있는지 궁금하세요? ")

result = member(tom, item)


if result:

print("예, 있습니다.")

else:

print("아니오, 없습니다.")




# 입력된 인자로부터 최고점과 최저점을 반환하는 함수



def findmaxmin(s1, s2, s3):

max = min = s1

if max < s2:

max = s2

if max < s3:

max = s3

if min > s2:

min = s2

if min > s3:

min = s3

return [max, min]


print("세번의 TOFEL점수를 입력하세요:")


s1 = int(input("점수1 : "))

s2 = int(input("점수2 : "))

s3 = int(input("점수3 : "))

result = findmaxmin(s1, s2, s3)


print("최고점 = {} , 최저점 = {}".format(result[0], result[1]))

















'[개발노트] > # Python' 카테고리의 다른 글

ubuntu & Wordporess (2015.ver)  (0) 2018.10.18
(크롤링) 코드 예문  (0) 2018.09.11
(기초2) 구문 예시  (0) 2018.09.11
(기초1) 기호, 함수  (0) 2018.09.10
(설치&참고유틸)  (0) 2018.09.09


대입


%d    #십진수(정수형)


print("잠수시간은 %d\' %d\" 입니다."%(minute, second))



%f    #실수형


print("잠수시간은 {}' {}\" 입니다.".format(minute, second))



%s    #문자열형


print("제 이름은 '%s' 입니다."%(name))



소숫점 표현


%.1f    # . 점아래 자릿수 


print("평균 점수는 %.1f점입니다."%(average))

=> 평균 점수는 30.0점입니다.



{:.1f}    # . 점아래 자릿수 format


print("평균 점수는 {:.1f}점입니다.".format(average))

=> 평균 점수는 30.0점입니다.



분기문


A든 a 든 같은 결과라면,    or


if grade == "A" or grade == "a":

message = "우수"


같은 절에서 다른 결과라면,    elif


elif grade == "B" or grade == "b":

message = "양호"


아니면 나머지 결과는 모두,       else


else:

message = "보통미만"



# 19살부터 성년, 40살부터 장년, 60살부터 중년, 나머지 미성년자 메시지


if 19 <= age < 40:

print("성년 축하")

elif 40 <= age < 60:

print("장년 축하")

elif 60 <= age:

print("중년 축하")

else:

print("미성년입니다.")




str2int


def str2int(slist):

nlist = []

for s in slist:

nlist.append(int(s))

return nlist


scores = input("점수들 : ").split()

# 목록 = [문자, 문자 문자] => 함수(str2int) => 목록 = [정수, 정수, 정수]

# scores = ['80', '90', '80']      => scores = [80, 90, 80]

print(scores)

scores = str2int(scores)

print(scores)




findsum (자연수들의 합 계산)


def findsum(num):

sum = 0

for n in range(1, num + 1):

sum = sum + n

return sum


num = int(input("자연수를 입력하세요 : "))

sum = findsum(num)

print("1 ~ {} 사이 자연수의 합 = {}".format(num, sum))




while code not in 문


print("환영 합니다.")


code = 0

while code not in [1, 2, 3]:

print("1. 조회")

print("2. 입금")

print("3. 출금")

code = int(input("업무내용 : "))


print("선택하신 업무는 {}번입니다.".format(code))

print("처리되었습니다.")





1. 일반 텍스트 파일 -> 문자열(str)

   Text File -> open('r') -> read()       -> Str

                                 readline()   -> Str

                                 readlines()  -> list = [Str, Str]


2. CSV 파일 -> 목록형(2차원 list)

   CSV File -> open('r') -> csv.reader()  -> list = [list, list]


3. JSON 파일

   3-1. 읽기(JSON파일 -> 사전형자료)

             JSON File -> open('r').read() -> json.loads() -> dict = {key1:Value1, Key2:Value2, ..}


       3-2. 쓰기(사전형자료 -> JSON파일)

         dict1     -> json.dumps()    -> open('w').write()    -> JSON File



# open()함수를 이용하여 파일의 내용 보기



file = open("C:\\Users\\ajd74\\Python\\Work\\test\\새파일.txt", "a")


for i in range(11, 21):

file.write("{}번째 행입니다.\n".format(i))


file.close()






목록형(list) => [값1, 값2, 값3, ...]

        index =    0    1    2


목록형자료는 값에 미리 (자동으로) 인덱스가 부여되며, 그 인덱스를 통해 접근한다.



사전형(dict) => {키1:값1, 키2:값2, 키3:값, ...}


사전형자료는 값에 (수동으로) 키(인덱스)를 부여하며, 그 키(인덱스)를 통해 접근한다.



[목록, 목록] => [list1, list2, list3, ...]

lists = [      0         1     2     3

       0  ['hong' , '홍길동', 23, '경기'],

       1  ['hwang', '황진이', 28, '서울'],

       2  ['john' , '존밴이', 30, '제주'] 제주 <- [2][3]

        ]


[사전, 사전] => [dict1, dict2, dict3, ...]  사전형 구조 dict1 => {'id':

lists = [     id       name  age  address                         'name':

       0  {'hong' , '홍길동', 23, '경기'},                        'age':

       1  {'hwang', '황진이', 28, '서울'},                        'address':}

       2  {'john' , '존밴이', 30, '제주'} 

        ] 제주 <- [2]['address']


{사전, 사전} => {key1:dict1, key2:dict2, key3:dict}

lists = {         name  age  address':

      'hong'   {'홍길동', 23, '경기'}, 

      'hwang'  {'황진이', 28, '서울'},

      'john    {'존밴이', 30, '제주'} 제주 <- ['john']['address']

        }





* 함수(변수)       : 변수(인자)를 에러(무결점)없는 데이터를 기대하고 작성하지만, 그렇지 않을 때에는 에러가 발생한다.


def birthday(주민등록번호):   

def age(주민등록번호):

def gender(주민등록번호):



* 변수.메서드() : 변수(인자)를  에러(무결점)없는 데이터로 만들고 메서드를 호출하기 때문에 에러 발생이 없어진다.


주민등록번호.birthday()   

주민등록번호.age()

주민등록번호.gender()



* class 클래스명:


변수명 = xxx

def __init__(self, 변수, ...): # __init__ : 초기화 함수

코드         # 클래스 호출시 자동으로 동작하는 함수


def 함수명(self, 변수, ...):

코드



class abc():

def __init__(self, num):

self.data = num


a1 = abc(5) -> instance a1:

def __init__(self, num):

self.data = num

a2 = abc(10) -> instance a2:

def __init__(self, num):

self.data = num
















































'[개발노트] > # Python' 카테고리의 다른 글

ubuntu & Wordporess (2015.ver)  (0) 2018.10.18
(크롤링) 코드 예문  (0) 2018.09.11
(기초2) 구문 예시  (0) 2018.09.11
(기초1) 구문 예시  (0) 2018.09.11
(설치&참고유틸)  (0) 2018.09.09

설치


3.7 ver


https://www.python.org/downloads/


다음 -> 설치 경로를 쉽게 찾아갈 수 있는 짧은 경로로 변경 후 설치 - 완료



실행 - sysdm.cpl

고급-환경 변수-시스템 변수-Path 편집(새로 만들기)



재부팅-cmd에서 python 실행 확인





1. Python - http://www.python.org


2. Editor(Notepad++) - http://notepad-plus-plus.org


3. Chrome - http://www.google.co.kr


'[개발노트] > # Python' 카테고리의 다른 글

ubuntu & Wordporess (2015.ver)  (0) 2018.10.18
(크롤링) 코드 예문  (0) 2018.09.11
(기초2) 구문 예시  (0) 2018.09.11
(기초1) 구문 예시  (0) 2018.09.11
(기초1) 기호, 함수  (0) 2018.09.10