728x90

Python 에서 SQLite3 데이터베이스 연동을 처리하는 예제이다.

SQLite DB 테이블 생성시 unique 인덱스 설정과 DB 데이터 추가시 중복 저장될 경우 처리를 고려하여 테스트했다.

 

import datetime
import sqlite3
 
def query_sqlite(input_query):
    import sqlite3
 
    # DB 생성 및 Auto Commit
    dbconn = sqlite3.connect('database.db', isolation_level=None)
    cur = dbconn.cursor()  # 커서 획득
    cur.execute(input_query)   # SQL 쿼리 실행
 
    # 데이타 Fetch
    rows = cur.fetchall()
    for row in rows:
        print(row)
 
    dbconn.close()  # Connection 닫기
 
 
 
# 날짜 삽입 과정
now = datetime.datetime.now()
print('now :', now)
 
nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')
print('nowDatetime :', nowDatetime)
 
print('sqlite3.version :', sqlite3.version)
print('sqlite.sqlite_version :', sqlite3.sqlite_version)
 
# DB 생성 및 Auto Commit
conn = sqlite3.connect('database.db', isolation_level=None)
 
# 커서 획득
= conn.cursor()
 
# 테이블 생성(Data Type : TEXT, INTEGER, REAL, BLOB, NUMERIC)
# 컬럼에 UNIQUE 제약 조건을 설정하면 대상의 컬럼에 중복 된 값이 저장될 수 없다.
sql = 'CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, email text not null unique , phone text, regdate text)'
c.execute(sql)
 
# 여러 컬럼의 조합에 UNIQUE 제약 조건 설정
# CREATE TABLE 테이블명 (컬럼명1, 컬럼명2, ... , UNIQUE (컬럼명1, 컬럼명2, ...));
# create table users (id INTEGER PRIMARY KEY, username text, email text unique , phone text, regdate text, unique (id, email));
 
# 데이터 삽입
varlist = [2'이방원''bwlee@naver.com''010-0001-0002']
print(varlist)
varlist.append(nowDatetime)
print(varlist)
 
# 동일 데이터가 들어오면 저장하지 말라는 옵션 추가
# 일반 Query : INSERT INTO
var_string = ', '.join('?' * len(varlist))
query_string = 'INSERT OR IGNORE INTO users VALUES (%s);' % var_string
print(query_string)
c.execute(query_string, varlist)
 
# SQL 쿼리 실행
query_sqlite('select * from users')
 
# 다량의 데이터 추가
userList = (
    (3,'박창근''park@naver.com''010-0001-0003',nowDatetime),
    (4,'이원빈''wblee@naver.com''010-0001-0004',nowDatetime),
    (5,'장길산''gsjang@naver.com''010-0001-0005',nowDatetime),
)
 
sql = "INSERT OR IGNORE INTO users(id, username, email, phone, regdate) VALUES(?,?,?,?,?)"
c.executemany(sql,userList)
conn.close()
 
# sqlite3 에서는 ?   mariaDB 에서는 %s
 
 
# SQL 쿼리 실행
query_sqlite('select * from users')

 

 

블로그 이미지

Link2Me

,
728x90

SQLite3 를 사용하여 간단하게 상품을 등록하고, 구매하고 보여주는 코드 예제이다.

isolation_level=None 을 하면 auto commit 이 된다.

 

import sqlite3
 
# DB 생성은 DB Browser for SQLite 를 이용하여 수동 생성(?) 한 줄 알았는데 그냥 자동 생성된다.
## 데이터베이스를 연결하는 코드
conn = sqlite3.connect("baseballmarket.db", isolation_level=None)
 
# 커서 획득
= conn.cursor()
 
## 상품과 주문 테이블을 생성하는 코드
productList = (('모자','35000'),('배트','100000'),('글러브','150000'))
 
c.execute("CREATE TABLE IF NOT EXISTS productList(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, price INTEGER)")
c.execute("CREATE TABLE IF NOT EXISTS orderList(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, cnt INTEGER, price INTEGER, total INTEGER)")
 
## 상품 데이터를 추가하는 코드
# 상품 데이터 중복 저장 체크
for row in c.execute('SELECT count(*) FROM productList'):
    if row[0== 0:
        c.executemany("INSERT INTO productList (name,price) values (?,?)", productList)
 
## 상품 목록을 표시하는 코드
while True:
    print("------------------상품목록------------------")
    for row in c.execute('SELECT id,name, price FROM productList'):
        print('상품번호 :',row[0],', 상품명 :', row[1], ', 가격 :', row[2])
    print("--------------------------------------------")
 
    print('')
    num = input("구매하실 상품의 번호를 입력해주세요: ")
    c.execute("SELECT name, price FROM productList WHERE id = ?",(num,))
    result = c.fetchone()
 
 
    ## 상품 번호와 주문 수량을 입력받는 코드
    print('')
    #print("구매할 수량을 입력해주세요: ")
    count = int(input("구매할 수량을 입력해주세요: "))
    total = count * int(result[1])
 
    ## 주문 데이터를 db에 추가하는 코드
    c.execute("INSERT INTO orderList (name, cnt, price, total) VALUES (?,?,?,?)", (result[0],count,result[1],total))
 
    ## 현재까지 주문 내역을 출력하는 코드
    print('')
    print("현재까지 구매한 내역 보기")
    print("--------------------주문목록--------------------")
    for row in c.execute('SELECT * FROM orderList'):
        print('상품명 :',row[1],', 주문수량 :', row[2], ', 단가 :', row[3], ', 구매가격 :', row[4])
    print("------------------------------------------------")
 
    print('')
    print("상품을 추가 구매하시겠습니까?\n중단하려면 'X'을 눌러주세요.\n계속 하시려면 엔터키를 눌러주세요. ")
    if(input() == "x"): break
 
print('')
print("총 구매가격", end='')
for row in c.execute('SELECT sum(total) FROM orderList'):
    print(' : ',row[0],'원')
print('')
 
conn.close()
 

 

 

'파이썬 > Python 기초' 카테고리의 다른 글

Python SQLite DB 연동 샘플  (0) 2022.01.21
[Python] MariaDB 연결  (0) 2021.05.20
csv 파일 다루기  (0) 2021.05.11
람다 표현식으로 함수 만들기  (0) 2021.05.10
[파이썬기초] list comprehension  (0) 2021.05.04
블로그 이미지

Link2Me

,
728x90

파이썬에서 MariaDB를 연결하고 데이터를 읽어오는 방법이다.

 

1. MariaDB 연동을 위한 설치

   pip install mariadb

 

2. Connecting to MariaDB Server

   DB 연결을 위해서 CentOS 7 을 설치하고 MariaDB를 설치했다.

   android_sample DB를 생성하고 테스트를 위한 테이블을 생성했다.

# Module Imports
import mariadb
import sys
 
# Connect to MariaDB Platform
try:
    conn = mariadb.connect(
        user="db_user",
        password="db_user_passwd",
        host="192.0.2.1",
        port=3306,
        database="employees"
 
    )
except mariadb.Error as e:
    print(f"Error connecting to MariaDB Platform: {e}")
    sys.exit(1)
 
# Get Cursor
cur = conn.cursor()
 

와 같이 연결하면 된다.

 

3. 실제 연결 샘플

   - mariaDB : 192.168.1.20 에서 3306 포트 사용

   - 접속환경 : IPTIME 공유기를 사용하고 있고 192.168.1.X 의 C class IP 주소를 사용

 

192.168.1.25 주소에서 접속하는 걸 허용하지 않는다는 메시지가 나온다.

 

mariadb에 접속하여 아래와 같이 사용자를 추가해주면 정상 접속된다.

use mysql;
create user androiduser@'192.168.1.25' identified by 'android#full*';
grant all privileges on android_sample.* to androiduser@'192.168.1.25';
flush privileges;

 

전체 연결 코드

# MariaDB 에 사용자 등록
# use mysql;
# create user androiduser@localhost identified by 'android#full*';
# grant all privileges on android_sample.* to androiduser@localhost;
# flush privileges;
 
# use mysql;
# create user androiduser@'192.168.1.25' identified by 'android#full*';
# grant all privileges on android_sample.* to androiduser@'192.168.1.25';
# flush privileges;
 
# Module Imports
import mariadb
import sys
 
# Connect to MariaDB Platform
try:
    conn = mariadb.connect(
        user="androiduser",
        password="android#full*",
        host="192.168.1.20",
        port=3306,
        database="android_sample"
 
    )
except mariadb.Error as e:
    print(f"Error connecting to MariaDB Platform: {e}")
    sys.exit(1)
 
# Get Cursor
cur = conn.cursor()
 
# Retrieving Data
cur.execute(
    "SELECT versionCode,devName FROM AppVersion WHERE idx=?", (1,))
 
# Print Result-set
for (versionCode, devName) in cur:
    print(f"versionCode: {versionCode}, devName: {devName}")
 
# Close Connection
conn.close()

 

 

참고 사이트

https://mariadb.com/resources/blog/how-to-connect-python-programs-to-mariadb/

 

Python to MariaDB Connector | MariaDB

You can use the popular programming language Python to manage data stored in MariaDB. Here is everything you need to know about connecting to MariaDB from Python.

mariadb.com

https://mariadb.com/docs/clients/connector-python/

블로그 이미지

Link2Me

,
728x90

파일

- 텍스트 파일 : 텍스트 에디터로 열 수 있음

- 바이너리 파일 : 이미지, 동영상, 워드, 엑셀, PDF

 

file = open(filename,mode)

- mode : r, w, a

- r(read), w(write), a(append)

 

file = open("test.txt","w", encoding='utf-8')
file.write("안녕하세요")
file.close()

 

 

csv 파일 읽어오기를 다음 코드와 같이 실행했더니 에러가 발생한다.

import csv

# 예제1
with open('./resource/sample1.csv', 'r') as f:
    reader = csv.reader(f)
    # 확인
    print(reader)
    print(type(reader))
    print(dir(reader))  # __iter__ 확인

    for c in reader:
        print(c)

Exception has occurred: UnicodeDecodeError

'utf-8' codec can't decode byte 0xb9 in position 0: invalid start byte

 

읽어온 파일 인코딩 모드가 UTF-8 이 아니라서 생긴 현상이다.

그래서 코드를 다음과 같이 수정했더니 정상적으로 읽어온다.

import csv

# 예제1
with open('./resource/sample1.csv', 'r', encoding='euc-kr') as f:
    reader = csv.reader(f)
    # next(reader) Header 스킵
    # 확인
    print(reader)
    print(type(reader))
    print(dir(reader))  # __iter__ 확인
    
    for c in reader:
        print(c)

 

파일을 읽어올 때 csv 에서 c의 의미는 comma 이다.

만약 읽어온 파일에서 구분자가 | 로 되어 있다면 어떻게 해야 할까?

delimiter 로 구분자를 명시해주면 된다.

import csv

# 예제1
with open('./resource/sample2.csv', 'r') as f:
    reader = csv.reader(f, delimiter='|')
    for c in reader:
        print(c)

 

블로그 이미지

Link2Me

,
728x90

def plus_ten(x):

return x + 10

print(plus_ten(2))

 

람다 표현식은 이름이 없는 함수이기 때문에 람다 표현식을 익명 함수(anonymous function)로 부르기도 한다.

 

plus_lambda = lambda x : x + 10

print(plus_lambda(2))

 

람다 표현식은 변수에 할당하지 않고 람다 표현식 자체를 바로 호출할 수 있다. 다음과 같이 람다 표현식을 ( )(괄호)로 묶은 뒤에 다시 ( )를 붙이고 인수를 넣어서 호출하면 된다.

print((lambda x: x + 10)(2))

 

= [12345678910]
= list(map(lambda x: str(x) if x % 3 == 0 else x, a))
# 람다 표현식 안에서는 elif를 사용할 수 없다.
print(b)
 
# [1, 2, '3', 4, 5, '6', 7, 8, '9', 10]
 

 

 
# lambda 식 : 메모리 절약, 가독성 향상, 코드 간결
# 함수는 객체이므로 객체를 생성하면 리소스(메모리) 할당된다.
# 람다는 즉시 실행(Heap 초기화) -> 메모리 초기화
 
lambda_mul_10 = lambda num: num * 10
print('>>>', lambda_mul_10)
 
def func_final(x,y,func):
    print(x * y * func(10))
 
func_final(10,10,lambda_mul_10)
print(func_final(10,10, lambda x: x * 1000))
 

 

# 필터 함수(람다 활용)
= list(range(100))
= filter(lambda number: number % 2 ==0, a)
print(a)
print(list(b))
 

 

# 예제 2 (map 함수)
# map 함수는 기존 리스트를 기반으로 새로운 리스트 생성
= list(range(100))
= map(lambda number: number * number, a)
print(list(b))
 
# list comprehension
print([i * i for i in a if i % 2 == 0])

 

numbers = list(range(1,10+1))
print("#홀수만 추출하기")
print(list(filter(lambda x: x % 2 == 1,numbers)))
print()
 
print("# 제곱해서 50미만 추출하기")
print(list(filter(lambda x : (x ** 2< 50,numbers)))
print()
 
print("# 3 이상 7 미만 추출하기")
print(list(filter(lambda x : 3<= x < 7, numbers)))

 

블로그 이미지

Link2Me

,
728x90

Java 문법에 없는 독특한 문법인가보다

 

리스트 표현식

[ ( 변수를 활용한 값 ) for 변수 in 리스트 ]

※ 리스트 대신 입력 시퀀스 라고 하기도 한다.

# list comprehension
array = []
for i in range(0,20,2):
    array.append(i * i)

print(array)

# 위의 코드 3줄을 아래 한줄로 대체할 수 있다.
array =[i * i for i in range(0,20,2)]
print(array)

 

리스트 표현식에서 if 조건문 사용하기

#예제 1
a = [i for i in range(10) if i % 2 == 0] 
print(a)

#예제 2
oldlist = [1, 2, 'A', False, 3]
newlist = [i*i for i in oldlist if type(i)==int]
print(newlist)
# 출력: [1, 4, 9]

 

Set Comprehension

Set Comprehension은 입력 Sequence로부터 지정된 표현식에 따라 새로운 Set 컬렉션을 빌드하는 것으로, 아래와 같은 문법을 갖는다. List Comprehension과 거의 비슷하지만, 결과가 Set {...}으로 리턴된다는 점이 다르다.

Set은 요소의 순서를 보장하지 않으므로, 순서가 랜덤하게 바뀐 결과를 출력하게 된다.

oldlist = [1, 1, 2, 3, 3, 4]
newlist = {i*i for i in oldlist}
print(newlist)
# 출력 : {16, 1, 4, 9}

 

1 ~ 100 사이에 있는 숫자 중 2진수로 변환했을 때 0이 하나만 포함된 숫자를 찾고, 그 숫자들의 합을 구하는 코드를 만드세요.

output = 0
for i in range(1,101):
    if "{:b}".format(i).count("0") == 1:
        print("{} : {:b}".format(i,i))
        output += i
print("합계 : {}".format(output))

위 코드로 구현할 것을 list comprehension 으로 변경해보자.

output = [i for i in range(1,101) if "{:b}".format(i).count("0") == 1]
# print(output)
for i in output:
    print("{} : {}".format(i, "{:b}".format(i)))
print("합계 : {}".format(sum(output)))
블로그 이미지

Link2Me

,
728x90

일회용 함수 : 제너레이터

리스트 뒤집기 : reversed()

현재 인덱스가 몇 번째인지 확인하기 : enumerate()

딕셔너리로 쉽게 반복문 작성하기 : items()

 

a = [1,2,3,4,5]
reversed_a = reversed(a)
print(list(reversed_a))
print(list(reversed_a))

# 1회용 함수 이므로 변수에 담지 말고 반복문을 실행하라.
# for i in reversed(리스트):
for i in reversed(a):
    print(i, end=" ")

 

a = [173, 203, 43, 32, 87]
print(list(enumerate(a)))

# for i, element in enumerate(리스트):
for (i, element) in enumerate(a):
    print("{} 번째 요소는 {} 입니다.".format(i,element))

# tuple 은 괄호를 지워도 된다.
# 1회용 함수 이므로 변수에 담아서 실행하지 말라.

 

keys() - 사전 키들을 리턴 (dict_keys)
values() - 사전 값들을 리턴 (dict_values)
items() - 사전 데이터(키와 값을 쌍)을 리턴 (dict_items)

 

for key, value in dictionary.items():

# for key, value in 딕셔너리.items():

# 반복문으로 딕셔너리의 키-값 쌍을 모두 출력하기
car = {"브랜드" : "BMW", "가격" : "7000"} 
for key, val in car.items():
	print("key : {}, value : {}".format(key,val)) 

# 딕셔너리의 키만 출력하기
for key in car.keys():
    print(key, end=' ')

print()
# 딕셔너리의 값만 출력하기
for value in car.values():
    print(value, end=' ')
블로그 이미지

Link2Me

,
728x90

모듈 : 특정 목적을 가진 함수, 자료의 모임

 

모듈 불러오기

- import 키워드를 이용해서 모듈 사용

import random

 

모듈 사용법 확인하기

- 모듈 속 사용하려는 함수/변수의 사용법 확인

- .(dot)을 쓴 후에 모듈 속 함수/변수 사용

- random.randrange(start, stop, step)

import random
print(random.randrange(0,11))
# 0 이상 11미만 수 중 임의의 출력 --> 1 ~ 10까지의 숫자 중 하나를 출력

math 모듈 : 수학 연산을 도와주는 모듈

# math.log(b,a) 출력
import math
print(math.log(5,2) + math.log(4/5, 2))

 

random : 랜덤한 숫자를 선택해 주는 함수들이 담긴 모듈

 

 

계산기 모듈 제작

- py 파일을 생성 후, 함수와 변수를 만든다.

- 다른 파일에서 만들어 둔 py 파일을 불러온다.

- 불러온 모듈 속 함수, 변수를 활용한다.

cal.py 모듈은 계산기 기능이 담긴 모듈입니다. 
이 안에는 plus() 와 minus() 함수가 있고, 모델명이 담긴 변수 modelName이 있습니다. 
오른쪽 실습에서 직접 이 cal.py를 만들어보고, main.py에서 이를 불러와봅시다.

# cal.py
def plus(a,b):
  return a+b
  
def minus(a,b):
  return a-b
  
modelName = "ELI-C2"

# main.py
import cal
var1 = cal.modelName
var2 = cal.plus(3, 4)
var3 = cal.minus(7, 2)

## 변수의 값을 확인하는 출력문입니다.
print(var1, var2, var3)
# cal.py
# 모듈 cal안에 함수들을 구현해주세요.
def plus(a,b):
  return a+b
  
def minus(a,b):
  return a-b
  
def times(a,b):
  return a*b
  
def divide(a,b):
  return a/b
  
def mod(a,b):
  return a%b
  
# main.py
import cal

var1 = cal.plus(3, 4)
var2 = cal.minus(7, 2)
var3 = cal.times(3, 5)
var4 = cal.divide(9, 3)
var5 = cal.mod(10, 3)

# 변수의 값을 확인하는 출력문입니다.
print('3 + 4 = ', var1)
print('7 - 2 = ', var2)
print('3 * 5 = ', var3)
print('9 / 3 = ', var4)
print('10 % 3 = ', var5)

 

Python 시간 모듈 사용 예제

Python time.localtime()

The localtime() function takes the number of seconds passed since epoch as an argument and returns struct_time in local time.

import time

result = time.localtime(1545925769)

print("result:", result)

print("\nyear:", result.tm_year)

print("tm_hour:", result.tm_hour)

# 변수 clock에 현재 시각이 “요일 월 일 시간 년” 순으로 나열된 문자열을 담아봅시다.
# 짝수 분에 제출 버튼을 눌러 엘리스가 문을 두들기도록 해봅시다.
# time.ctime() : “요일 월 일 시간 년” 순으로 현재 시간을 문자열로 반환해주는 함수

import time
clock = time.ctime()
print(clock)

minute = time.localtime().tm_min
print(minute)

if minute % 2 == 0:
  print("문을 두드려라")
else:
  print("문 두드리지 마")
파이썬에서 현재 시간을 얻는 datetime 모듈

from datetime import datetime
datetime.now()
datetime.datetime(2021, 4, 05, 11, 14, 16, 222169)

연도, 월, 일 및 시간을 포함한 날짜 시간 정보가 포함 된 datetime 객체를 반환한다.
string 형식을 선호한다면 strftime 메소드를 사용하여 datetime 오브젝트 인스턴스를 
인수에 정의 된 문자열 형식으로 변환 할 수 있다.

datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# 결과 : '2021-04-05 11:14:25'

 

import math

print(math.log(5,2) + math.log(4/5, 2))

 

from urllib import request
target = request.urlopen("https://hanbit.co.kr")
content = target.read()
#print(content)
print(content[:200])

패키지

1. import를 이용해서 폴더를 불러온 후, 함수 실행

   import user.cal

   print(cal.plus(3,4))

2. from-import 사용

   함수/변수 사용시 .를 써주지 않아도 된다.

   from user.cal import plus

   print(plus(3,4))

 

user 패키지의 math 모듈에서 log 함수를 불러오려고 할 때, 알맞은 코드를 적어라.

from user.math import log

# from a import b를 이용해서 random의 randrange()를 불러와봅시다.
# import a를 이용해서 math 모듈을 불러와봅시다.
# 변수 var1에 randrange 함수를 이용해 1이상 10이하의 임의의 정수를 넣어봅시다.

from random import randrange
import math

var1 = randrange(1, 11)
var2 = math.log(5184, 72)

print(var1, var2)
# from-import를 이용해서 urllib패키지 안 request 모듈에서 
# urlopen 함수를 불러오는 코드를 작성해봅시다.
# 다음 주소를 urlopen하고, read() 한 다음, 
# 이를 utf-8으로 decode 한 결과를 변수 webpage에 넣어봅시다.

from urllib.request import urlopen

webpage = urlopen("https://en.wikipedia.org/wiki/Lorem_ipsum").read().decode("utf-8")
print(webpage)

로또번호 당첨확률

1. random 모듈을 import해봅시다.
2. 빈 리스트를 담은 변수 lotto를 만들어봅시다.
3. lotto의 길이가 6이 될 때까지 다음 과정을 수행합니다.
   - 1부터 45까지의 수 중 하나를 임의로 뽑습니다.
   - 만약 뽑은 수가 리스트 lotto에 없으면 lotto에 추가하고, 있으면 수를 다시 뽑습니다.
   - pass는 아무런 동작도 하지 않는 코드입니다.

     if조건 만족 후 아무런 코드도 없다면 오류를 일으키기 때문에 무의미한 pass를 넣습니다.
4. lotto를 정렬해줍니다.
5. lotto를 출력하여 우리가 뽑은 로또번호를 확인해봅시다.

import random

lotto = []

while len(lotto) < 6:
  num = random.randrange(1, 46)
  if num in lotto:
    pass
  else:
    lotto.append(num)
  lotto.sort()

print(lotto)
블로그 이미지

Link2Me

,
728x90

def 함수이름(매개변수):

   <수행할 명령>

   return 반환값

 

 

함수 안에서 일어난 일은 함수 밖에 영향을 끼치지 않는다.

 

 

전역변수 : 함수 외부에서 정의한 변수(어디서든지 사용할 수 있는 변수)

지역변수 : 함수 내부에서 정의한 변수 (for문, 함수 등...)

 

# 다음은 표준어로 "밥 먹었어요?"가 담긴 변수 greeting입니다.
greeting = "밥 먹었어요?"
 
# 이를 print로 출력하면 다음과 같습니다.
print("서울 :",greeting)
 
# 함수 busan을 선언하고, 그 안에 변수 greeting에 "밥 뭇나?"를 넣어봅시다.
def busan():
  greeting = "밥 뭇나?"
  print("부산 :",greeting)
 
# 함수 busan을 실행해보세요.
busan()
 
# 변수 greeting을 출력해보세요.
print(greeting)
 

 

 

#1. 대응 관계가 5개 있는 Dictionary를 만들고, 이를 변수 my_dict에 넣어봅시다.
my_dict = {1:"one"2:"two"3:"three"4:"four"5:"five"}
 
#2. 다음 두 메서드를 이용해서, Dictionary의 Key값들을 담은 변수 var1과 
# Value값들을 담은 변수 var2를 만들어봅시다.
var1 = my_dict.keys()
var2 = my_dict.values()
print(var1)
print(var2)

 

 

인자와 매개변수
•매개변수(parameter) : 함수를 정의할 때 넘겨받은 값을 관리하는 변수
•인자(argument) : 함수를 호출할 때 함수로 넘겨주는 자료

 

default parameter 사용 시 주의사항

- 디폴드 파라미터 뒤에 일반 파라미터가 위치할 수 없음.

  ex) def test(a, b=2, c=1)

      def test(a, b=2, c) 이건 에러 발생

#1.함수 solve()를 만들어봅시다. 이 함수의 매개변수는 a와 b입니다.
#2.이 함수는 a와 b를 곱한 것을 반환합니다.
def solve(a, b):
  return a*b
 
#3.이 함수에 숫자 3과 4를 인자로 넣어서 반환되는 값을 변수 var1에 넣어봅시다.
var1 = solve(34)
 
#4. 이 함수에 숫자 3과 리스트 [‘Cham’]을 인자로 넣어서 반환되는 값을 변수 var2에 넣어봅시다.
var2 = solve(3, ['Cham'])
 
print(var1)
print(var2)

 

return 만 존재하면, None 반환

return이 없는 경우, 기본적으로 함수 코드 블럭이 종료되면 종료로 간주. None 반환

return 옆에 값이나 수식이 있다면, 해당 값을 호출자에게 반환(전달)

 

최대값 구하는 함수

# 리스트 nums를 넣었을 때, 최댓값을 반환(return)하는 함수 our_max를 작성해봅시다.
def our_max(nums):
  maxNum = 0
  for i in nums:
    if i > maxNum:
      maxNum = i
  return maxNum
 
print(our_max([12109370992785]))
 

 

네버랜드 : 환상의 나라로!

# 대기시간이 담긴 리스트가 인자로 주어지면 조건을 만족하도록
# 타야하는 대기시간의 순서가 담긴 리스트를 반환하는 함수 neverland()를 작성해봅시다.
# 대기시간이 가장 짧은 놀이기구부터 오름차순으로 놀이기구를 탑니다.
# 단, 인덱스 2에 해당하는 놀이기구는 유진이가 꼭 타고 싶어하는 놀이기구이기에 
# 대기시간에 상관없이 가장 먼저 탑니다.
 
def neverland(q):
  temp = q.pop(2)
  q.sort()
  q.insert(0,temp)
  return q
 
 
# 확인을 위한 코드입니다.
# 대기시간이 담긴 리스트 queue를 자유롭게 수정해보세요!
queue = [301020504060]
print(neverland(queue))

 

#1.함수 solve()를 만들어봅시다. 이 함수의 매개변수는 a와 b입니다.
#2.이 함수는 a와 b를 곱한 것을 반환합니다.
def solve(a, b):
  return a*b
 
#3.이 함수에 숫자 3과 4를 인자로 넣어서 반환되는 값을 변수 var1에 넣어봅시다.
var1 = solve(34)
 
#4. 이 함수에 숫자 3과 리스트 [‘Cham’]을 인자로 넣어서 반환되는 값을 변수 var2에 넣어봅시다.
var2 = solve(3, ['Cham'])
 
print(var1)
print(var2)

 

가변 매개변수

# 가변 매개변수는 함수에 1개만 올 수 있다.
# 가변 메개변수는 *args 와 같이 앞에 *를 붙인다.
# 일반 매개변수, 가변 매개변수 순서로 와야 한다.
def print_n_times(value, *args, n=3):
    for i in range(n):
        print(value)
        print(args)
 
# 가변 매개변수와 혼용하여 사용시에는 기본 매개변수는 변수명과 값을 직접 적어줘야 한다.
print_n_times("hello"1,2,3,4,5, n=5)
 
def print_n_times(value, n=3):
    for i in range(n):
        print(value)
        
# 가변 매개변수가 없을 때는 아래와 같이 하면 된다.
print_n_times("hello"5)

 

실행결과

hello
(1, 2, 3, 4, 5)
hello
(1, 2, 3, 4, 5)
hello
(1, 2, 3, 4, 5)
hello
(1, 2, 3, 4, 5)
hello
(1, 2, 3, 4, 5)


hello
hello
hello
hello
hello

 

리스트 평탄화 예제

def flatten(data):
    output = []
    for item in data:
        if type(item)  == list:
            output += flatten(item)
        else:
            output += [item]
    return output
 
example = [[1,2,3], [4,[5,6]], 7, [8,9]]
print("원본:",example)
print("변환:", flatten(example))
 

 

블로그 이미지

Link2Me

,
728x90

input()함수로 입력받은 값은 모두 문자열로 인식된다.

 

a = '345'

b = int('345')

print(a,b)

print(type(a))

print(type(b))

 

# 평균값 구하기
def mean(nums):
    _sum = 0
    for i in nums:
        _sum += i
    return _sum / len(nums)
 
print(mean([1,2,3,4,5,5,5,5]))
 
def mean2(nums):
    # 내장함수로 대체
    return sum(nums) / len(nums)
 
print(mean([1,2,3,4,5,5,5,5]))
 
 
# 소수 판별 : 1과 자기 자신으로만 나눠지는 수
# 입력 : 양의 정수 1개
# 출력 : boolean (소수 : True, 합성수: False)
 
def is_prime(num):
    for i in range(2,num):
        if num % i == 0# 나눠 떨어지면
            return False
    return True
 
print(is_prime(100))
print(is_prime(17))
print(is_prime(7))
 
# 입력 : 양의 정수 1개
# 출력 : 2 - 해당 숫자 사이의 소수의 개수
def num_prime(num):
    count = 0
    for i in range(2, num + 1):
        if is_prime(i):
            count += 1
    return count
 
print(num_prime(100))
print(num_prime(500))
 
블로그 이미지

Link2Me

,
728x90

섭씨온도 → 화씨온도

F = C * (9/5) + 32

 

ㅇ 화씨온도(℉, Fahrenheit)
  - 미국에서 많이 사용하는 온도체계
  - 영하 17.7℃에서 37.7℃를 백등분

ㅇ 섭씨온도(℃, Celsius)
  - 전 세계에서 널리 쓰이는 온도 단위
  - 물의 어는점을 0도, 끓는 점을 100도로 정해 백등분

 

화씨온도 → 섭씨온도
C = (F - 32) * 5/9

블로그 이미지

Link2Me

,
728x90

슬라이싱(slicing) : 연속적인 객체들에(예: 리스트, 튜플, 문자열) 범위를 지정해 선택해서 객체들을 가져오는 방법 및 표기법을 의미
파이썬 리스트에 있는 데이터에 하나씩 접근할 때는 인덱싱을 사용한다.
리스트에 있는 여러 개의 데이터에 동시에 접근하려면 파이썬 슬라이싱이다.
슬라이싱을 하면 새로운 객체를 생성하게 된다.

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

print(a[0:2])

블로그 이미지

Link2Me

,
728x90

모듈(module) : 각종 변수, 함수, 클래스를 담고 있는 파일이고, 패키지(package)는 여러 모듈을 묶는 것이다.
파이썬을 설치할 때 다양한 모듈과 패키지가 기본으로 설치된다.
패키지를 만들어서 사용할 수도 있고, 다른 사람이 만든 패키지를 설치해서 쓸 수도 있다.



# 모듈 만들기
# 1. animal 폴더를 만든다.
# 2. animal 폴더에 cat.py 라는 파일을 만들고, 클래스를 정의한다.
# 3. animal 폴더에 dog.py 라는 파일을 만들고, 클래스를 정의한다.
# 4. animal 폴더에 __init__.py 라는 파일을 만들고, 현재 폴더에 있는 파일의 모듈 가져오기를 한다.

# cat.py 파일
class Cat:
    def hi(self):
        print("야옹")

# dog.py 파일

class Dog:
    def hi(self):
        print("멍멍")

# __init__.py 파일
from .cat import Cat  # . : 이 폴더에 있는 cat.py 라는 파일에서 Cat 이라는 클래스를 가져와라.
from .dog import Dog  # . : 이 폴더에 있는 dog.py 라는 파일에서 Dog 이라는 클래스를 가져와라.
        



# 모듈 가져오기 : import moduleName1, moduelName2
from animal import dog # animal 패키지에서 dog 라는 모듈을 불러와.
from animal import cat # animal 패키지에서 cat 이라는 모듈을 불러와.

d = dog.Dog()  # instance
d.hi()

c = cat.Cat()
c.hi()

from animal import *  # animal 패키지가 갖고 있는 모듈을 모두 불러와.
d = Dog()
d.hi()

c = Cat()
c.hi()

import math
print(math.pi)
print(math.sqrt(4.0))  # math 모듈의 제곱근 함수 sqrt
print(math.sqrt(2.0))

#print(math.sqrt(2.0, 2)) # 인수가 1개 이어야 하는데 일부러 2개를 입력하면...

# from import로 모듈의 일부만 가져오기
from math import pi  # math 모듈에서 pi 함수만 가져와라.
print(pi)

from math import sqrt  # math 모듈에서 sqrt 함수만 가져와라.
print(sqrt(2.0))

from math import sqrt as s  # math 모듈에서 sqrt 함수를 가져오면서 이름을 s로 지정해라.
print(s(3.0))

from math import *  # math 모듈의 모든 변수, 함수, 클래스를 가져와라.
print(pi)
print(sqrt(5.0))


import urllib.request  # urllib 패키지의 request 모듈 가져와라.
urllib.request.request = urllib.request.urlopen("http://www.google.co.kr")
print(urllib.request.request.status)


블로그 이미지

Link2Me

,
728x90

Class 에 대한 개념을 제대로 잡고 싶다면 "자바의 정석" 저자 남궁성의 유투브 강좌 6장, 7장을 들으면 된다.

https://www.youtube.com/watch?v=CXuA31XcBZ0&t=25s

 

객체 지향의 개념은 여러 언어에서 다 사용하고 있으므로, 파이썬에서 어떤 문법 구조로 사용하는지만 파악하면 된다.

필드 : 객체가 가지고 있는 성질 = 객체가 가지고 있는 변수

메서드 : 객체가 할 수 있는 행동 = 객체가 할 수 있는 함수

 

인스턴스 이름 = 클래스 이름()

    - 인스턴스.변수

    - 인스턴스.메소드

 

인스턴스 속성 : 객체마다 다른 값을 가지는 속성

클래스 속성 : 모든 객체가 공유하는 속성

비공개 속성 : 클래스 안에서만 사용하는 속성 (ex, self.__age)

 
 
# 클래스를 작성하기 위해서는 class 키워드 사용하여 새로운 클래스를 작성한다.
class Person:
    def __init__(self, name, age):  # 생성자를 객체 초기화할 때 사용된다.
        self.name = name
        self.age = age
 
    def __del__(self):
        print("소멸자 호출")
 
    # 객체를 출력할 때 호출되는 메소드
    def __str__(self):
        return f"[이름 : {self.name}, 나이 : {self.age}]"
 
    def say_hello(self):
        print("안녕, 나는 " + self.name + "이야.")
 
    def say_hi(self, to_name):
        print("안녕! " + to_name + ", 나는 " + self.name + "이야.")
 
    def introduce(self):
        print("내 이름은 " + self.name + " 그리고 나이는 " + str(self.age) + "이야.")
 
# class 상속
class Police(Person):
    def arrest(self, to_arrest):
        print("넌 체포됐다, " + to_arrest)
 
 
class Programmer(Person):
    def program(self, to_program):
        print("이번엔 이걸 만들어야겠다 : " + to_program)
 
    def introduce(self):  # 오버라이딩
        print("내 성명은 " + self.name + " 이고, 나이는 " + str(self.age) + "이야.")
 
 
 
= Person("홍길동"25)
p.say_hello()
p.say_hi("소영")
print(p)
 
p1 = Police("이순신"32)
p1.introduce()
 
p2 = Programmer("강감찬"27)
p2.introduce()
p2.program("차계부")
 

 

 

다형성

# 다형성
 
class Animal:
  legs = 0
  def walk(self):
    return ""
    
class Dog(Animal):
  legs = 4
  def walk(self):
    return "살랑살랑"
    
class Human(Animal):
  legs = 2
  def walk(self):
    return "뚜벅뚜벅"
    
maltese = Dog()
gildong = Human()
 
print(maltese.walk())
print(gildong.walk())

 

파이썬 객체 적용
파이썬에서는 객체 단위로 정보를 관리한다. 그리고 그 객체는 다음과 같은 속성을 가지고 있다.
• 값(Value) : 객체에 담긴 내용
• 유형(Type) : 객체의 종류

 

# 리스트 [1, 2, 3]이 담긴 변수 nums를 선언
nums = [1,2,3]
 
# nums의 값, 유형을 출력
print(nums)
print(type(nums))
 
# 리스트의 .append() 메서드를 이용해서 숫자 4를 리스트 nums에 추가
nums.append(4)
print(nums)
 

 

한 객체의 메서드에서 그 객체의 필드를 참조할 땐 self를 이용해서 참조해야 한다.

self: 메서드라면 가져야하는 첫 번째 매개변수
Q : 왜 self가 필요할까?
A : self는 객체 자신을 의미하며, 메서드가 호출될 때 self 자리에 객체 자신을 인자에 넣는다.

 

# 클래스 Bbread(붕어빵)을 만들어봅시다.
# Bbread의 필드 taste를 생성하고, "밀가루"를 대입해봅시다.
# Bbread의 메서드 eat()를 생성해봅시다. 이 메서드는 taste, "맛이 나요!"를 출력합니다.
# taste의 값이 "밀가루"라면 "밀가루 맛이 나요!" 가 출력됩니다.
class Bbread:
  taste = "밀가루"
  def eat(self):
    print(self.taste, "맛이 나요!")
 
 
# 클래스 Bbread의 인스턴스 redBean과 choux를 만들어봅시다.
redBean = Bbread()
choux = Bbread()
 
 
# 객체 redBean의 필드 taste를 "팥"으로 바꿔줍시다
redBean.taste = "팥"
 
# 객체 choux의 필드 taste를 "슈크림"으로 바꿔줍시다
choux.taste ="슈크림"
 
# 객체 redBean의 메서드 eat()를 실행해봅시다
redBean.eat()
 
# 객체 choux의 메서드 eat()를 실행해봅시다
choux.eat()

 

블로그 이미지

Link2Me

,
728x90

Python 튜플 : 여러 자료를 함께 담을 수 있는 자료형

- 소괄호()로 묶어서 표현한다.

- 시퀀스 자료형으로 Index를 이용한 인덱싱, 슬라이싱이 가능하다.

- in 연산자로 Tuple 안에 원소 확인

- len()함수로 Tuple의 길이 확인

- + 연산자로 Tuple 과 Tuple을 연결

- * 연산자로 Tuple을 반복

- 자료 추가, 삭제, 변경 불가 ← 한번 만들어지면 고정

 

my_tuple = (123)
 
try:
    # 여기에 인덱싱을 이용해서 Tuple의 값을 변경해봅시다.
    my_tuple[2= 7
 
except TypeError:
    print("Tuple은 값을 변경할 수 없습니다.")
 
try:
    # 여기에 .append()를 이용해서 Tuple의 값을 추가해봅시다.
    my_tuple.append(9)
 
except AttributeError:
    print("Tuple은 값을 추가할 수 없습니다.")
 

 

# 인덱싱하기
tp1 = (12'a''b')
print(tp1[0])
print(tp1[3])
 
# tuple unpacking : 튜플의 값을 차례대로 변수에 대입
# 튜플은 괄호를 생략할 수 있다.
a, b, c, d = 10203040
print(a, b, c, d)
 
# a 와 b 를 교환하라.
= 4
= 7
print(a, b)
 
a, b = b, a  # swap
print(a, b)
 
몫, 나머지 = divmod(a, b)
print('몫 : {}'.format(몫))
print('나머지 : {}'.format(나머지))

 

 
# 숫자 1, 2, 3, 4, 5이 담긴 튜플 my_tuple을 하나 선언
my_tuple = (12345)
 
# my_tuple의 인덱스 2의 원소를 변수 var1에 넣어봅시다.
var1 = my_tuple[2]
 
# my_tuple의 인덱스 1, 2, 3의 원소를 슬라이싱하여 변수 var2에 넣어봅시다.
var2 = my_tuple[1:4]
 
# my_tuple의 길이를 변수 var3에 넣어봅시다.
var3 = len(my_tuple)
print(var1, var2, var3) # 3 (2, 3, 4) 5
블로그 이미지

Link2Me

,
728x90

파이썬(Phython)의 dictionary 는 Java 의 Hashmap 에 해당되는 기능이다.

 

dictionary

- 키와 값을 갖는 데이터 구조

- 키는 내부적으로 hash 값으로 저장

- 순서를 따지지 않음. 즉, 인덱스가 없음

 

dictionary type은 immutable한 키(key)와 mutable한 값(value)으로 맵핑되어 있는 순서가 없는 집합

x = dict() 또는 { } 로 선언한다.

print(x) 를 하면 { } 로 출력된다.

값은 중복될 수 있지만, 키가 중복되면 마지막 값으로 덮어쓰기된다.

순서가 없기 때문에 인덱스로는 접근할수 없고, 키로 접근 할 수 있다.

key는 변할 수 없는 자료형. ← 리스트는 안되고, 튜플은 된다.

 

리스트는 [index] 로 값을 확인하고,

딕셔너리는 [key] 로 값을 확인한다.

 

= {
  "name" : "홍길동",
  "age" : 25,
  0 : "Hello",
  1 : "How are you?"
}
 
print(x)
# 출력 결과는 {'name': '홍길동', 'age': 25, 0: 'Hello', 1: 'How are you?'}
 
print(x["name"])
print(x["age"])
 
# dictionary의 in은 키에 한해서 동작한다.
# age 이라는 key가 x에 들어 있나요?
print("age" in x) # True
 
# dictionary 에 있는 모든 키를 보여줘.
print(x.keys())
# 출력 결과 : dict_keys(['name', 'age', 0, 1])
 
# 반복문 for key in 딕셔너리:
for key in x:
  print("key: " + str(key) + ", value: " + str(x[key]))

 

 

항목 추가

= {
  "name" : "홍길동",
  "age" : 25,
  0 : "Hello",
  1 : "How are you?"
}
 
# 자료 추가하기 : mutable 한 객체이므로 키로 접근하여 값을 변경할 수 있다.
x["school"= "파이썬 강좌"
 
print(x)
# 출력결과 : {'name': '홍길동', 'age': 25, 0: 'Hello', 1: 'How are you?', 'school': '파이썬 강좌'}
 

 

# 1. 대응 관계가 5개 있는 Dictionary를 만들고, 이를 변수 my_dict에 넣어봅시다.
my_dict = {1:"one"2:"two"3:"three"4:"four"5:"five"}
 
# 2. 다음 두 메서드를 이용해서, Dictionary의 Key값들을 담은 
# 변수 var1과 Value값들을 담은 변수 var2를 만들어봅시다.
var1 = my_dict.keys()
var2 = my_dict.values()
print(var1)  # dict_keys([1, 2, 3, 4, 5])
print(var2)  # dict_values(['one', 'two', 'three', 'four', 'five'])
 

 

 

응용예제

# list
fruit = ["사과""사과""바나나""딸기""바나나""키위""복숭아""키위""키위"]
 
# dictionary 선언
= {}
 
for f in fruit:
    # f = "사과"
    if f in d: # "사과" 라는 key가 d 라는 dictionary에 들어 있어?
        d[f] = d[f] + 1  # 그럼 "사과" 갯수를 하나 올려줘.
    else : # "사과" 라는 key가 없으면,
        d[f] = 1 # 그걸 dictionary에 넣고 value = 1 로 만들어줘.
 
print(d)

 

update()

- 두 딕셔너리를 병합함

- 겹치는 키가 있다면 parameter로 전달되는 키 값이 overwrite 된다.

 

= {'a':1'b':2'c':3 }
= {'a':2'd':4'e':5 }
a.update(b)
print(a) # {'a': 2, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

 

key 삭제

- del 키워드 사용

- pop 함수 이용

 

= 100
print(c)
del c
# print(c) # NameError: name 'c' is not defined
 
= {'a':1'b':2'c':3'd':4'e':5 }
a.pop('b')
del a['d']
print(a) # {'a': 1, 'c': 3, 'e': 5}
 
# clear() : 딕셔너리의 모든 값을 초기화
a.clear()
print(a)  # {}

 

 

in

- key값 존재 확인

value access

- dict[key]로 접근, 키가 없는 경우 에러 발생

- .get() 함수로 접근, 키가 없는 경우 None 반환

 

# 빈 Dictionary를 만들고, 이를 변수 my_dict에 넣어보자.
my_dict = {}
 
my_dict[1= "Integer"
my_dict['a'= "String"
my_dict[(123)] = "Tuple"
 
print(my_dict) # {1: 'Integer', 'a': 'String', (1, 2, 3): 'Tuple'}
 
# key값 존재 확인
print(1 in my_dict)
print((123in my_dict)
 
# value access
# dict[key]로 접근, 키가 없는 경우 에러 발생
# .get() 함수로 접근, 키가 없는 경우 None 반환
print(my_dict.get('a'))
print(my_dict.get((123)))
 
my_dict['c'= 3
print(my_dict)
# {1: 'Integer', 'a': 'String', (1, 2, 3): 'Tuple', 'c': 3}
 
try:
    # 여기에 [1, 2, 3] → "List"의 대응관계를 만들어 봅시다.
    my_dict[[123]] = "List"
except TypeError:
    print("List는 Dictionary의 Key가 될 수 없습니다.")

 

 

# 다음 대응관계가 담긴 Dictionary를 하나 만들고, 이를 변수 my_dict에 넣어보자.
# “사과” → “apple”
# “바나나” → “banana”
# “당근” → “carrot”
 
my_dict = {"사과":"apple","바나나":"banana""당근":"carrot" }
 
# my_dict에서 “사과”를 Key로 넣어 나온 Value를 변수 var1에 넣어보자
var1 = my_dict["사과"]
print(var1)
 
# my_dict에서 당근-carrot을 제거해 보자
# del 딕셔너리["키"]
del my_dict["당근"]
print(my_dict) # {'사과': 'apple', '바나나': 'banana'}
 
# my_dict에서 체리-cherry를 추가해 보자
my_dict["체리"= "cherry"
print(my_dict) # {'사과': 'apple', '바나나': 'banana', '체리': 'cherry'}
 
 

모든 keys, values 접근

- keys() : 키만 반환

- values() : 값만 반환

- items() : 키, 값의 튜플을 반환

= {'a':1'b':2'c':3}
print(a)
print(a.keys())   # dict_keys(['a', 'b', 'c'])
print(a.values()) # dict_values([1, 2, 3])
print(a.items())  # dict_items([('a', 1), ('b', 2), ('c', 3)])

 

리스트(list)로 변환할 수 있다.

= {'a':1'b':2'c':3}
print(a)
print(list(a.keys()))   # ['a', 'b', 'c']
print(list(a.values())) # [1, 2, 3]

 

 

for key, value in miniWord.items():

# Minionese와 한국어가 담긴 miniWord 딕셔너리를 만드세요.
miniWord = {
  "Bello":"안녕",
  "Poopaye":"잘가",
  "Tank_yu":"고마워",
  "Tulaliloo_ti_amo":"우린 너를 사랑해"
}
 
for key, value in miniWord.items():
  print(value)

 

 

'파이썬 > Python 기초' 카테고리의 다른 글

[파이썬 기초] 클래스(class)  (0) 2021.01.01
[파이썬기초] Tuple(튜플)  (0) 2021.01.01
[파이썬 기초] 반복문 for, while  (0) 2020.12.29
[파이썬 기초] 함수와 조건문  (0) 2020.12.29
[파이썬기초] List  (0) 2020.08.10
블로그 이미지

Link2Me

,
728x90

몫 연산자 //

나머지 연산자 %

제곱연산자 **

 

문자열은 + 연산자를 이용하면 이어붙일 수 있다.

 

파이썬에서의 for 문과 while 문에 대한 사용법이다.

for 변수 in 시퀀스:

  <수행할 명령>

 

for 반복자 in 반복할 수 있는 것:
  <수행할 명령>

 

for <요소 변수 이름> in 리스트:
  <수행할 명령>

 

리스트가 중첩되어 있다면?? 즉 list_of_list = [ [1,2,3], [4,5], [6,7,8,9] ]

for 반복문도 중첩한다.

for a in list_of_list:

    for b in a:

      print(b)

 

numbers = [1,2,3,4,5,6,7,8,9,10,99,800,72,55,102,103]

item = ["짝수","홀수"]
for number in numbers:
    print("{}는 {}입니다.".format(number, item[number % 2]))

range : 연속되는 숫자를 만들어 주는 시퀀스 자료형

range(start,end)  ← start 이상 end 미만. 즉 end는 포함되지 않음.

range(10) 은 range(0,10) 과 같은 의미이다.

range(2,4) 은 [2,3]

#for, while 예제

for i in range(10):
  print(i)
  print("철수: 안녕 영희야 뭐해?")
  print("영희: 안녕 철수야, 그냥... 있어")

a = [1]
for i in range(2,4):
    a.append(i)
print(a) # 결과 : [1,2,3]

# 19단 만들기
for i in range(1,20):
    print("19 *", i, "=", 19*i)

# 별 모양 출력
N = int(input())
for i in range(N):
  if i < 5:
    print('*' * (i+1))
  else:
    print('*' * (5))


# 커피전문점 커피 주문 총금액 자동계산 프로그램
n = int(input())
sum = 0
coffee = {'아메리카노':4100, '카페라떼':4600, '카라멜마끼아또':5100}

for i in range(n):
  coffee_name = input()
  sum += coffee[coffee_name]
  
print(sum)


# 코더랜드 F대학의 K교수 학점
#입력받은 값을 리스트로 저장하는 코드입니다. 수정하지 마세요.
# 리스트에는 다음과 같이 점수가 담겨있습니다.
# scores[0] -> "언어이해"
# scores[1] -> "추리논증"
# scores[2] -> "논술"

#이 아래에 코드를 작성하세요.
# 입력 예시 : 70 75 80 
# 입력 예시 : 95 48 90
scores = [int(i) for i in input().split()]
grade = "B+"

if scores[1] < 50:
  grade = "F"  # 추리논증 점수가 50점 이상이 아니면 F를 부여
else:
  min_score = min(scores)
  if min_score >= 75:
     grade = "A+"
  elif min_score >= 50:
     grade = "A"
     
print(grade)

 

array = [273,52,103,32,87]
for i, element in enumerate(array):
    print("{} : {}".format(i,element))

for i in range(len(array)):
    print("{} : {}".format(i,array[i]))

# 역순으로 출력
for i in reversed(array):
    print(i)

# 역순으로 출력
for i in reversed(range(0,10)):
    print(i)

 

while 문 : 조건으로 반복하는 방법

조건이 True이면 명령을 수행한다.

if문으로 조건을 걸어준 다음, break 실행(반복문을 탈출하는 역할)

 

# 조건은 bool 표현식

while 조건: 

  수행할 명령

i = 0
while i < 3:
  print(i) # 0
  print("철수: 안녕 영희야 뭐해?")
  print("영희: 안녕 철수야, 그냥... 왜?")
  i = i + 1
  
i = 1
ans = 0
while True: 
    print(i)
    if i == 5:
        print("i가 5에요!")
        break
    i = i + 1
print(ans)

별자리 출력 예제

for i in range(5):
  print('*' * (i+1))

평균 구하기

a = [100,90,80]
i = 0
sum = 0
while i < len(a):
  sum += a[i]
  i += 1
print(sum)
print(len(a))
print(sum/len(a))

 

반복문 내부에서만 사용할 수 있는 break 와 continue 라는 특수 키워드가 있다.

break 키워드는 반복문을 벗어날 때 사용하는 키워드이다.

'파이썬 > Python 기초' 카테고리의 다른 글

[파이썬기초] Tuple(튜플)  (0) 2021.01.01
[파이썬 기초] dictionary  (0) 2021.01.01
[파이썬 기초] 함수와 조건문  (0) 2020.12.29
[파이썬기초] List  (0) 2020.08.10
파이썬 기초  (0) 2020.08.08
블로그 이미지

Link2Me

,
728x90

파이썬은 같은 들여쓰기를 기준으로 구분을 한다.

# 정수를 문자열로 이어붙이기를 하려면 str 변환을 해주어야 한다.
print("너 몇살이니? " + str(4))
# 조건문 if 에 괄호를 사용하지 않는다.
x = 3
if x > 5:
  print("Hello")
elif x == 3:
  print("Bye")
else:
  print("Hi")

# 함수 정의 에제1
def chat():
  print("철수: 안녕? 너 몇살이니?")
  print("윤하: 나? 나는 25")

chat()

print("")

# 매개변수가 있는 함수 선언 예제
def chating(name1, name2, age):
  print("%s: 안녕? 넌 몇살이니?" % name1)
  print("%s: 나? 나는 %d" %(name2, age))

chating("민식","홍철", 30)

def dsum(a, b):
  result = a + b
  return result

d = dsum(1,2)
print(d)

# 매개변수를 받아서 조건문으로 분기 처리하는 함수 예제
def sayHello(name, age):
  if age < 10:
    print("안녕, " + name)
  elif age <= 20 and age >= 10:
    print("안녕하세요, " + name)
  else:
    print("안녕하십니까, " + name)

sayHello("선영", 20)
 

# 매개변수 기본값 지정
def profile(name, age=27, main_lang="Python"):
  print("이름 : \t나이 : \t주 사용 언어 : " \
         .format(name,age,main_lang))

profile("홍길동")
profile("강감찬")

# 가변인자 매개변수
def profiles(name,age, *language):
  print("이름 : \t나이 : \t".format(name,age),  end=" ")
  for lang in language:
        print(lang, end=" ")
  print()

profiles("유재석", 30, "Python", "C#", "C++", "Java", "jQuery")
profiles("김재동", 28, "Python", "Swift", "Android")

시간 출력

import datetime
now = datetime.datetime.now()

if now.hour < 12:
    print("현재 시간은 {}시 {}분으로 오전입니다".format(now.hour,now.minute))
else:
    print("현재 시간은 {}시 {}분으로 오후입니다".format(now.hour,now.minute))

369 게임

x = int(input())
if ((x+1) % 3 == 0) :
  print("짝!")
else:
  print(x+1)

네버랜드 놀이기구 타기

# 대기시간이 담긴 리스트가 인자로 주어지면 조건을 만족하도록
# 타야하는 대기시간의 순서가 담긴 리스트를 반환하는 함수 neverland()를 작성해봅시다.
# 대기시간이 가장 짧은 놀이기구부터 오름차순으로 놀이기구를 탑니다.
# 단, 인덱스 2에 해당하는 놀이기구는 유진이가 꼭 타고 싶어하는 놀이기구이기에 대기시간에 상관없이 가장 먼저 탑니다.
def neverland(q):
  temp = q.pop(2)
  q.sort()
  q.insert(0,temp)
  return q


# 확인을 위한 코드입니다.
# 대기시간이 담긴 리스트 queue를 자유롭게 수정해보세요!
queue = [30, 10, 20, 50, 40, 60]
print(neverland(queue))

 

비밀번호 만들기

 

Traceback (most recent call last): File "main.py", line 18, in <module> print(yoonHa(nums)) File "main.py", line 9, in yoonHa str1 = str1 + data[i] KeyError: '4'

 

* 데이터 타입 확인 방법 : type(n)

data[i] 를 data[int(i)] 로 형변환을 해주면 OK.

# 비밀번호를 만들어주는 함수 yoonHa()를 만들어봅시다.
def yoonHa(n):
  str1 =""
  data = {4:"love",6:"kiss", 8:"smile"}
  
  for i in n:
    str1 = str1 + data[int(i)]
  return str1

# 채점을 위한 코드입니다. 이를 수정하지 마세요!
nums = input()
print(yoonHa(nums))

 

'파이썬 > Python 기초' 카테고리의 다른 글

[파이썬기초] Tuple(튜플)  (0) 2021.01.01
[파이썬 기초] dictionary  (0) 2021.01.01
[파이썬 기초] 반복문 for, while  (0) 2020.12.29
[파이썬기초] List  (0) 2020.08.10
파이썬 기초  (0) 2020.08.08
블로그 이미지

Link2Me

,
728x90

파이썬은 변수 선언 키워드가 없다.

 

LIST : 복수개의 값을 담을 수 있는 데이터의 구조

리스트에서 원소를 삽입, 제거, 정렬할 수 있다.(mutable)

 

리스트 초기화

  • [] # 빈리스트
  • list() 함수로 생성
  • str.split()함수로 생성
# 문자열은 immutable
= 'hello, world.'
# a[0] = 'J'  # TypeError: 'str' object does not support item assignment
print(a)
 
= a.replace('h''J')
print(b)


['a','b']
['a',2] # 다른자료형을함께

 

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

결과는 [1,2,3,4,5,6]

 

a = [1, 2, 3]

a.append(4) # 리스트 마지막 원소 뒤에 추가한다.

print(a)

 

a.insert(1,7) # def insert(index,object)

- 리스트의 원하는 위치에 추가 가능

- 앞에 인덱스, 뒤에 아이템을 명시

= [123]
a.append(4)
print(a)  # [1, 2, 3, 4]
 
a.insert(1,7)  # def insert(index, object)
print(a)  # [1, 7, 2, 3, 4]
 
a[0= 100
print(a)  # [100, 7, 2, 3, 4]
 
# slicing
= [123456789]
print(a[4:7]) # [5, 6, 7]  # 뒤 index 숫자는 포함하지 않음.
print(a[:7]) # [1, 2, 3, 4, 5, 6, 7]
print(a[3:]) # [4, 5, 6, 7, 8, 9]
print(a[1:7:2]) # [2, 4, 6]  # 마지막 2 는 step 2

 

subway = ["유재석""홍길동""강호동"]
print(subway.index("강호동"))
print(subway.index("홍길동"))
print(subway.index("유재석"))
subway.append("강감찬"# 리스트 마지막 원소 뒤에 추가한다.
print(subway)  # ['유재석', '홍길동', '강호동', '강감찬']
 
# 1번째에 키워넣기 insert(위치, 값)
subway.insert(1,"이순신")
print(subway)  # ['유재석', '이순신', '홍길동', '강호동', '강감찬']

 

여러개의 요소를 추가하고 싶을 때는 extend 함수를 사용한다.

def extend(iterable)

a.extend([5,6,7])

 

= [1,2,3,4,5]
= [6,7,8,9,10]
 
a.append(b)
print(a) # [1, 2, 3, 4, 5, [6, 7, 8, 9, 10]]
 
# 리스트 합치기
# 방법 1
a.extend(b)
print(a)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 방법 2
+= b
print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 

 

index()

- 찾고자 하는 값의 인텍스를 반환

 

in 키워드

- 리스트 내에 해당 값이 존재하는 지 확인

- value in [list]

- True, False 중 한가지로 반환

# list 는 mutable(가변), tuple은 immutable(불변)
# list 는 대괄호, tuple 은 소괄호 사용
= [4231]
= ["hello""hi"579]
 
x[3= 10  # list는 값을 변경할 수 있지만, tuple은 값 변경 불가
print(x)  # [4, 2, 3, 10]
 
print(x + y)
 
= sum(x) # 리스트를 합한 값을 반환.
print(z)  # 4 + 2 + 3 + 10 = 19
 
# index : 찾고자 하는 값의 인덱스를 반환
print(x.index(3))  # 2
 
for n in x:
  print(n)
 
print("hello" in y) # hello 가 y 에 있어?
 
if "hello" in y:
  print("hello 가 있어요.")

 

리스트 정렬

리스트 정렬(list.sort()) : 숫자는 오름차순, 문자열은 사전순

- 같은 자료형만 정렬 가능

- 리스트 내부 다른 자료형은 사용 불가

# 순서대로 정렬하기
num_list = [5,2,3,4,1]
num_list.sort()
print(num_list)  # [1, 2, 3, 4, 5]
 
# 순서 역순 정렬하기
num_list.reverse()
print(num_list)  # [5, 4, 3, 2, 1]
 

 

sort() : list 자체를 내부적으로 정렬

sorted() : list의 정렬된 복사본을 반환

# list 는 mutable(가변), tuple은 immutable(불변)
= [91071912202187]
# a.sort(reverse=True)
print(a)  # [21, 20, 19, 10, 9, 8, 7, 7, 2, 1]
 
= sorted(a)
print(a) # [9, 10, 7, 19, 1, 2, 20, 21, 8, 7]
print(b) # [1, 2, 7, 7, 8, 9, 10, 19, 20, 21]

 

리스트 요소 제거

- 값으로 항목 제거

  1. remove() 함수

- 인덱스로 제거

  1. del 연산자

  2. pop() 함수 : 지우고자 하는 아이템을 반환 후, 삭제

 

# remove 함수
= [123345]
a.remove(3)
print(a)  # [1, 2, 3, 4, 5]
# 동일한 값이 있을 경우 앞에 있는 값을 제거한다.
 
a.remove(7# ValueError: list.remove(x): x not in list
print(a)
 

 

list.pop(index)

- 인덱스 해당 요소를 제거한다.

- 인덱스를 지정하지 않으면 자동으로 -1을 호출하여 마지막 요소를 제거한다.

# pop 함수
= ["유재석""홍길동""강호동"]
 
# list.pop(i) : 인덱스 i의 원소를 제거 후 그 원소를 반환
# 한 명씩 뒤에서 꺼내기
print(b.pop())
print(b.pop())
 
# 특정한 원소 꺼내기
print(b.pop(0))
 
= [12345]
a.pop()  # 지정하지 않으면 마지막 원소 제거
print(a)  # [1, 2, 3, 4]
 
= [12345]
= a.pop(2)
print(a)  # [1, 2, 4, 5]
print(d)  # 3

 

# seq.count(d) : 시퀀스 내부의 자료 d의 개수를 반환
my_seq = [2,2,2,4,4,6,7]
print(my_seq.count(2)) # 결과 : 3
 
# 숫자 1, 2, 2, 3, 3, 3이 담긴 리스트 my_list를 하나 선언해 봅시다.
# my_list 안의 숫자 3의 개수를 변수 var1에 넣어 봅시다.
# 일부 원소를 제거하여 my_list가 [1, 2, 3]이 되도록 해봅시다.
my_list = [122333]
var1 = my_list.count(3)
print(var1) # 3
my_list.pop()  # 마지막 원소 제거
my_list.pop()  # 마지막 원소 제거
my_list.pop(2# 3번째 원소 제거
print(my_list)

 

문자열 분리

str.split(c)

c를 기준으로 문자열을 쪼개서 리스트를 반환(괄호를 비울시 공백)

words = "python은 프로그래밍 배우기에 아주 좋은 언어입니다."
words_list = words.split()
print(words_list) # ['python은', '프로그래밍', '배우기에', '아주', '좋은', '언어입니다.']
 
time_str = "10:34:17"
time_str_list = time_str.split(':')
print(time_str_list) # ['10', '34', '17']
 

 

str.join(list)

str를 기준으로 리스트를 합쳐서 문자열을 반환(괄호를 비울시 공백)

= ['a''b''c''d''1''2''3']
print(a)
 
# 리스트를 문자열로 : join 이용
result1 = "".join(a)
print(result1)  # 결과 : abcd123
 
friend = ['Pat''Mat']
print('&'.join(friend))  # Pat&Mat

 

'파이썬 > Python 기초' 카테고리의 다른 글

[파이썬기초] Tuple(튜플)  (0) 2021.01.01
[파이썬 기초] dictionary  (0) 2021.01.01
[파이썬 기초] 반복문 for, while  (0) 2020.12.29
[파이썬 기초] 함수와 조건문  (0) 2020.12.29
파이썬 기초  (0) 2020.08.08
블로그 이미지

Link2Me

,
728x90

처음에는 인프런 사이트에 등재된 Python 무료 강좌를 듣고 파이썬의 개념이 이런 것인가 싶어 적었다.

6시간만 공부하면 파이썬 기초 개념을 이해한다는 동영상 강좌도 들어봤고,

혼자공부하는 파이썬(윤인성) 동영상 강의를 들으면서 개념 정리가 확실하게 되는 걸 느끼고 있다.

\n : 개행
\t : 탭
\\ : 문자
\' : 문자
\" : 문자
\r : 캐리지 리턴
\f : 폼 피드
\a : 벨 소리
\b : 백 스페이스
\000 : 널 문자
print(4**3) # n제곱
print(pow(4,3)) # n 제곱
print(13//7) # 몫
print(13%7) # 나머지
number = 13
number %= 7
print("나머지 result :",number)
number *= 3
print("곱하기 result :",number)
print(1 != 3) # True
print(not(1 != 3)) # False
print(5>4>7) # False
print(round(3.14)) # 반올림
print(round(4.98)) # 반올림

from math import *
print(sqrt(16)) # 제곱근
print(floor(4.98)) # 내림
print(ceil(3.14)) # 올림

from random import *
print(random()) # 0.0 ~ 1.0 미만의 임의의 값 생성
print(random()*10) # 0.0 ~ 10.0 미만의 임의의 값 생성
print(int(random()*45)+1) # 1 ~ 45이하의 임의의 값 생성

print("로또번호 생성")
print(randint(1,45)) # 1~45 이하의 임의의 값 생성
print(randint(1,45)) # 1~45 이하의 임의의 값 생성
print(randint(1,45)) # 1~45 이하의 임의의 값 생성
print(randint(1,45)) # 1~45 이하의 임의의 값 생성
print(randint(1,45)) # 1~45 이하의 임의의 값 생성
print(randint(1,45)) # 1~45 이하의 임의의 값 생성

문자열

jumin = "970414-2464777"
print("성별 : "+ jumin[7])
print("년 : " + jumin[0:2]) # 0 ~ 2 직전까지 가져오기
print("월 : " + jumin[2:4]) # 2 ~ 4 직전까지 가져오기
print("일 : " + jumin[4:6]) # 4 ~ 6 직전까지 가져오기
print("생년월일 : " + jumin[:6]) # 처음부터 ~ 6 직전까지 가져오기
print("뒷7자리 : " + jumin[7:]) # 7부터 마지막까지 가져오기
print("뒷7자리 : " + jumin[-7:]) # 맨 마지막은 -1이고 -7부터 가져오기
print("안녕하세요"[0:2])  # 출력결과 : 안녕
print("안녕하세요"[:2])  # 출력결과 : 안녕
print("안녕하세요"[2:]) # 출력결과 : 하세요.

x = "qwertyui"
a = int(len(x)/2)
commna = ","
print(x[:a] + commna + x[a:])

 

문자열 포멧

# format 사용

print("나는 {}색과 {}색을 좋아해요.".format("파란","초록")

print("나는 {0}색과 {1}색을 좋아해요.".format("파란","초록")) 

print("나는 {1}색과 {0}색을 좋아해요.".format("파란","초록"))

print("나는 {var1}색과 {var2}색을 좋아해요.".format(var1="파란",var2="초록")) 

# 문자열 포멧
print("나는 %d살입니다." % 25)
print("나는 %s을 좋아합니다." % "파이썬")
print("나는 %s색과 %s색을 좋아해요." % ("파란","초록"))
print("나는 {}색과 {}색을 좋아해요.".format("파란","초록")) 
print("나는 {age}살이며, {color}색을 좋아해요.".format(age=25, color="파란"))

age = 20
color="빨간"
print(f"나는 {age}살이며, {color}색을 좋아해요.")

# \n : 문장내 줄바꿈
print("백문이 불여일견\n백견이 불여일타")
# 문장내 따옴표 처리 \"
print("저는 \"초보코딩\" 입니다.")
# \\ : 문장내에서 하나의 \
print("C:\\Users\\jsk005\\PythonWorkspace")
# \b : 백스페이스
 

url ="https://google.com"
my_str = url.replace("https://","")
print(my_str)
my_str = my_str[:my_str.index(".")]
print(my_str)
password = my_str[:3] + str(len(my_str)) + str(my_str.count("e")) + "!#"
print("{}의 비밀번호는 {} 입니다.".format(url,password))

연산자

// 몫

% 나머지

** 제곱연산자

# 3472를 17로 나누었을 때 몫과 나머지 구하기
print("몫 :", 3472//17)
print("나머지 :", 3472%17)

# 741 과 같이 input으로 입력받은 맨 첫글자를 출력하는 코드
a = input("숫자를 입력하세요 : ")
b = len(a)
c = int(a)//(10**(b-1))
print(c)

# 자료형을 확인해보자
print(type(a))
print(type(b))

# 만약 a = int(input("숫자를 입력하세요 : ")) 로 하면 어떻게 될까?
# object of type 'int' has no len() 로 b=len(a)를 할 수 없다고 나온다.
# 정수형의 문자열 길이를 알고자 한다면 len(str(a)) 를 해야 한다.
a = int(input("숫자를 입력하세요 : "))
b = len(str(a))
c = a//(10**(b-1))
print(c)

문자열 교체

# 문자열 교체 코드
a = int(input("문자열 입력 >> "))
b = int(input("문자열 입력 >> "))

print(a, b)
a, b = b, a # 튜플 기능 이용한 swap
print(a, b)

문자열 변환

string = "hello, my world."
# 함수들은 대부분 자기 자신을 변경하지 않는다.
string.upper()
print(string) # 결과 : hello, my world. 
print(string.upper()) # 결과 : HELLO, MY WORLD.

 

문자열은 불변(immutable)이라 원소를 변경할 수 없다.

a = 'hello, world'

a[0] = 'J'

print(a)

'파이썬 > Python 기초' 카테고리의 다른 글

[파이썬기초] Tuple(튜플)  (0) 2021.01.01
[파이썬 기초] dictionary  (0) 2021.01.01
[파이썬 기초] 반복문 for, while  (0) 2020.12.29
[파이썬 기초] 함수와 조건문  (0) 2020.12.29
[파이썬기초] List  (0) 2020.08.10
블로그 이미지

Link2Me

,