디버깅 (F5) 이나 디버깅 없이 실행 (Ctrl + F5) 로 작성된 코드를 실행할 수도 있지만, 좀 더 편하게, 입맛에 맞게, 셋팅을 자동으로 처리하여 프로그램을 실행시켜 보려면 tasks.json 을 만들어서 실행하는 것이 편하다. tasks.json 만드는 법이다.
# 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)))
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=' ')
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)
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))
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)
슬라이싱(slicing) : 연속적인 객체들에(예: 리스트, 튜플, 문자열) 범위를 지정해 선택해서 객체들을 가져오는 방법 및 표기법을 의미 파이썬 리스트에 있는 데이터에 하나씩 접근할 때는 인덱싱을 사용한다. 리스트에 있는 여러 개의 데이터에 동시에 접근하려면 파이썬 슬라이싱이다. 슬라이싱을 하면 새로운 객체를 생성하게 된다.
모듈(module) : 각종 변수, 함수, 클래스를 담고 있는 파일이고, 패키지(package)는 여러 모듈을 묶는 것이다. 파이썬을 설치할 때 다양한 모듈과 패키지가 기본으로 설치된다. 패키지를 만들어서 사용할 수도 있고, 다른 사람이 만든 패키지를 설치해서 쓸 수도 있다.
# 모듈 만들기
# 1. animal 폴더를 만든다.
# 2. animal 폴더에 cat.py 라는 파일을 만들고, 클래스를 정의한다.
# 3. animal 폴더에 dog.py 라는 파일을 만들고, 클래스를 정의한다.
# 4. animal 폴더에 __init__.py 라는 파일을 만들고, 현재 폴더에 있는 파일의 모듈 가져오기를 한다.
# cat.py 파일
classCat:
defhi(self):
print("야옹")
# dog.py 파일
classDog:
defhi(self):
print("멍멍")
# __init__.py 파일
from .catimportCat# . : 이 폴더에 있는 cat.py 라는 파일에서 Cat 이라는 클래스를 가져와라.
from .dogimportDog# . : 이 폴더에 있는 dog.py 라는 파일에서 Dog 이라는 클래스를 가져와라.
# 모듈 가져오기 : import moduleName1, moduelName2
fromanimalimportdog# animal 패키지에서 dog 라는 모듈을 불러와.
fromanimalimportcat# animal 패키지에서 cat 이라는 모듈을 불러와.
d = dog.Dog() # instance
d.hi()
c = cat.Cat()
c.hi()
fromanimalimport * # animal 패키지가 갖고 있는 모듈을 모두 불러와.
d = Dog()
d.hi()
c = Cat()
c.hi()
importmath
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로 모듈의 일부만 가져오기
frommathimportpi# math 모듈에서 pi 함수만 가져와라.
print(pi)
frommathimportsqrt# math 모듈에서 sqrt 함수만 가져와라.
print(sqrt(2.0))
frommathimportsqrtass# math 모듈에서 sqrt 함수를 가져오면서 이름을 s로 지정해라.
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 라는 특수 키워드가 있다.
# 정수를 문자열로 이어붙이기를 하려면 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 무료 강좌를 듣고 파이썬의 개념이 이런 것인가 싶어 적었다.
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 이하의 임의의 값 생성
# 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.