알쏭달쏭 공부한거 쓰기
7-10 본문
#GUI 복습
enter누르면 바로 결과가 나오도록 만들기
from tkinter import*
def clicked():
r.config(text=f'10년 후 {int(e.get())+10} 입니다.')
def input_return(event):#매개변수가 반드시 있어야한다.
r.config(text=f'10년 후 {int(e.get())+10} 입니다.')
window=Tk()
Label(window, text='나이:').grid(row=0, column=0)
e=Entry(window, width=30)
e.grid(row=0, column=1)
#엔트리에서 엔터를 입력할 때 결과가 출력되게 하자!
#콜백함수를 bind() 메소드를 통해 연결하자!
#e.bind(이벤트, 콜백함수명)
e.bind('<Return>',input_return)
bt=Button(window, text='완료',bg='blue',fg='white',command=clicked)
bt.grid(row=1, column=0,columnspan=2,sticky=E+W+N+S)
r=Label(window, text='')
r.grid(row=2,column=1)
window.mainloop()
#완료 버튼을 누르는게 불편하다 enter만 치면 그냥 바로 결과가 나왔으면 좋게싿.
#callback을 entry에 연결해야 한다.
버튼이 열이 살짝 안맞는데 이걸 표현하는 방법
버튼을 프레임에다 붙여서 프레임을 넣기.
from tkinter import *
def to_cel1(event):
fah = float(entry1.get())
entry2.delete(0, END)
entry2.insert(0, (fah-32)*5/9)
def to_cel():
fah = float(entry1.get())
entry2.delete(0, END)
entry2.insert(0, (fah-32)*5/9)
def to_fah1(event):
cel = float(entry2.get())
entry1.delete(0, END)
entry1.insert(0, cel*9/5+32)
def to_fah():
cel = float(entry2.get())
entry1.delete(0, END)
entry1.insert(0, cel*9/5+32)
window = Tk()
label1 = Label(window, text = '화씨')
label2 = Label(window, text = '섭씨')
label1.grid(row = 0, column = 0)
label2.grid(row = 1, column = 0)
entry1 = Entry(window)
entry2 = Entry(window)
entry1.grid(row = 0, column = 1)
entry2.grid(row = 1, column = 1)
entry1.bind('<Return>',to_cel1)
entry2.bind('<Return>',to_fah1)
#앤트리에서 엔터로 결과를 받아오려면 바인드해야함. return은 엔터로 엔터를 누르면 뒤에 함수를 실행하겠다.
#버튼이 2개 포함된 프레임을 넣겠다.> 열이 살짝 안맞게 배치 할때
frame = Frame(window)
to_fah_btn = Button(frame, text = '화씨->섭씨', command = to_cel)
to_cel_btn = Button(frame, text = '섭씨->화씨', command = to_fah)
to_fah_btn.pack(side = LEFT)
to_cel_btn.pack(side = LEFT)
#팩은 위에서 아래도 붙여지니까 \
#to_fah_btn.grid(row=0, column=0)>도 가능
frame.grid(row = 2, column = 0, columnspan = 2)
window.mainloop()
#그리드랑 팩이 혼용이 안되는데 프레임 안에서는 팩이지만 윈도우 전체적으로 봤을때는 그리도 되어 있으므로 가능하다.
1)entry에 callback함수 연결하기
2)frame으로 붙이기+ grid와 pack이 같이 이용되는 경우 설명
시험칠 때는 pack이나 그리드 둘 중 하나만 써도 되도록하게 해줌.!
#datetime모듈, time 모듈
-date time모듈 >datetime 클래스, timedelta 클래스 2개 공부
-날짜와 시간 모듈 datetime
• 날짜와 시간에 관한 기능을 제공하고 조작할 수 있는 모듈
import datetime as dt
dt.datetime.now()
현재 시간을 알려줌
속성에 접근 가능.
년도 a.year
월 a.month
일 a.day
시간 a.hour/a.minute
now을 이용해서 특정날 저장도 가능 (시간을 지정을 안해서 0시 0분 0초)
>>> import datetime as dt
>>> dt.datetime.now()
datetime.datetime(2023, 7, 10, 13, 45, 53, 814473)
>>> a=dt.datetime.now()
>>> a
datetime.datetime(2023, 7, 10, 13, 46, 4, 447930)
>>> a.year
2023
>>> a.hour
13
>>> a.minute
46
>>> type(a)
<class 'datetime.datetime'>
>>> first_day=dt.datetime(2023,6,23)
>>> first_day.year
2023
>>> first_time.hour
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'first_time' is not defined
#없으면 오류
개별적 접근 가능
변경하고 싶으면 replace메소드 이용하면 된다.
>>> first_day
datetime.datetime(2023, 6, 23, 0, 0)
>>> first_day.replace(month=7)
datetime.datetime(2023, 7, 23, 0, 0)
>>> first_day
datetime.datetime(2023, 6, 23, 0, 0)
#여전이 그대로음 바꾸고 싶으면 다시 대입을 해서 저장을 해야한다.
>>> first_day=first_day.replace(month=7)
>>> first_day
datetime.datetime(2023, 7, 23, 0, 0)
print(이름)>__str__호출
이름>__repre __호출..이거 뭐였지ㅣ>> re학숩,,하숑
>>> print(first_day)
2023-07-23 00:00:00
>>> first_day
datetime.datetime(2023, 7, 23, 0, 0)
from datetime import dateime
datetime 모듈 중에서 datetime 클래스를 가지고 오겠다.
간격이기에 속성에 s가 붙는다.
import datetime as dt
def x_mas():
#25년 크리스마스 생성
x_mas=dt.datetime(2025,12,25)
now=dt.datetime.now() #현재 생성
print(now)
gap=x_mas-now #날짜 간의 차이는 timedelta 시간 간격의 자료형으로 들어간다.
print(gap)
print(gap.days,'주',gap.days//7,gap.seconds,gap.seconds//3600)
print(f'{x_mas.year}년 크리스마스 까지는 {gap.days}일 {gap.seconds//3600}시간 남았습니다.')
#//3600하면 왜 9시간 밖에 안되지,,,,, 응,,, 9시간 뒤에 크리스마스..?
#지금으로부터 5주 후 날짜
def after_5weeks():
today=dt.datetime.now() #today는 datetime자료형
after_5w=today+dt.timedelta(weeks=5)#5주의 간격을 의미한다 #간격인자로 쓰일때는 weeks사용 가능
#after_5w의 자료형은 datetime 자료형이다. >years가 아니라 그냥 단수로 작성
print(f'{today}로부터 5주 후는 {after_5w.year}년 {after_5w.month}월 {after_5w.day}일입니다.')
after_5weeks()
https://colab.research.google.com/drive/1nsVKRWkgmDhnJaFnAwGFIFcB0q4BGWlo?usp=sharing
import datetime as dt
def new_y():
today=dt.datetime(2019,8,29)
n=dt.datetime(2036,1,1)
gap=n-today
print(f'{n.year}년 새해 까지는 {gap.days}일 {gap.seconds//3600}시간 남았습니다.')
new_y()
#2036년 새해 까지는 5969일 0시간 남았습니다.
def birth():
today=dt.datetime.now()
b=dt.datetime(2024,1,6)
gap=b-today
print(f'{b.year}년 생일 까지는 {gap.days}일 {gap.seconds//3600}남았습니다.')
birth()
#2024년 생일 까지는 179일 9남았습니다.
#gt가 구현되어 있어서 대소관계 비교를 할 수 있다.
def after_test():
today=dt.datetime.now()
children_day=dt.datetime(2023,5,5)
if today>children_day:
print('올해 어린이날은 지났습니다.')
elif today==children_day:
print('오늘이 어린이날입니다.')
else:
print('올해 어린이날이 다가옵니다.')
#if today-children_day>0 이건 자료형이 달라서 비교가 안된다. 왼쪽은:timedelta 오른쪽 int>> 그럼 int(today-children_day)는 안되지만. int((today-children_day).days)는 된다.
#today=dt.datetime.now()
#dat_7/10=dt.datetime(2023,7,10)
#오늘이 7/10일인데 둘이 비교하면 초시간 때문에 오늘이 지난 걸로 되낟.
#> 오늘걸 만들고 년도, 월,일만 따서 다시 만들어서 비교하거나 , replace를 통해 0시 0초로 만들기, 다시말해, 시간 부분은 다 없애주는 작업이 필요한다.
after_test()
# 올해 어린이날은 지났습니다.
def f_m():
fyear,fmonth,fday=[int(x) for x in input('처음 사귄 연도와 월, 일을 입력하시오:').split()]
first=dt.datetime(fyear,fmonth,fday)
meet100=first+dt.timedelta(days=99) #오늘 포함 100일 이니까 #날짜에다가 간격 더하기
print(f'100일 기념일은: {meet100.year}년 {meet100.month}월 {meet100.day}일입니다.')
def to_xmas():
fyear,fmonth,fday=[int(x) for x in input('오늘 날짜:').split()]
print(f'오늘은{fyear}년 {fmonth}월 {fday}일입니다.')
today=dt.datetime(fyear,fmonth,fday)
x_mas=dt.datetime(fyear,12,25)
'''
if today<x_mas:
gap=x_mas-today
print(f'다음 크리스마스까지 {gap.days}일 남았습니다.')
elif today==x_mas:
print('오늘입니다.')
else:
x_mas=dt.datetime(fyear+1,12,25)
#x_mas=x_mas.replace(year=fyear+1)
gap=x_mas-today
print(f'다음 크리스마스까지 {gap.days}일 남았습니다.')
'''
if x_mas<today:
x_mas=x_mas.replace(year=fyear+1)
gap=x_mas-today
print(f'다음 크리스마스까지 {gap.days}일 남았습니다.')
#람다함수, iterator, generator
https://colab.research.google.com/drive/1Jzdka6KRChHZOut2bapC3nFYa48-3DyB?usp=sharing
1)리스트 축약list comprehension
[ {표현식} for {변수} in {iterator/iterable} if {조건 표현식} ],{}>set,()>tupel,{[key:value]}>dict(set과 차이 알기)
if 조건은 생략 가능
iterable: 리스트, 튜플, 딕셔너리, 집합, 파일, 문자열, range, .. 리스트 뿐 아니라 모든 iterable 축약 가능
2)람다함수lambda function
p10
-map(적용시킬_함수, 반복가능 객체) 매핑시키는 애
date=[int(x) for x in input('오늘 날짜:').split()] 리스트 축약을 이용해서 정수로 만들었음
>map을 이용해 보자
map(매핑함수, 리스트)
date=list(map(int,input('처음 사귄 날짜:').split()))
리스트의 각 성분을 int로 바꾼다.
p9 filter 만족하는 애를 필터링시켜주는애
람다 함수
• 이름 없는 함수, 익명 함수anonymous function
• 1회용의 간단한 함수
>단독으로 쓰이기 보다는 built-in ft. map(), filter(), sorted()의 인자로 많이 사용한다.
def lam_test():
#두수의 합을 반환하는 람다 함수
#lambda 매개변수: 반환값
print((lambda x,y: x+y)(3,4))#인자
#7
#람다와 인자 사이에 , 넣으면 안된다.
lam_test()
def pow_(a):
return a**2
def day12_2():
#map(함수명, 인자)
rslt=list(map(pow_,range(10)))
print(rslt)
day12_2()
def day12_2():
#map(함수명, 인자)
rslt=list(map(lambda x:x**2,range(10)))
print(rslt)
day12_2()
-filter() filter(적용시킬_함수, 반복가능 객체, …)
ages의 원소를 adult_func에 넣어서 True인결과를 내는 원소만 모아준다.
근데 이게 길어서 짧게 만들어줌
map과 filter의 차이점:
map은 원래 원소의 갯수를 소실하지 않지만 fliter은 조건에 맞는 애만 추출하니까 소실가능성이 있다.
day12-5
def day12_5():
#음수만 추출: filter()
lst = [-30,45,-5,-90,20,53,77,-36]
rlst=filter(lambda x:x<0,lst)
print(rlst)
#<filter object at 0x00000266341359F0>
#lst원소가 함수에서 True를 내는 애를 모은다.
rlst=list(filter(lambda x:x<0,lst))
print(rlst)
#[-30, -5, -90, -36]
rlst=list(map(lambda x:x<0,lst))
print(rlst)
#lst원소를 함수에 넣어서 결과값으로 맵핑시켜라
#[True, False, True, True, False, False, False, True]
day12_5()
day12 3~6,lab10-5(2). lab10-6(2)
def day12_3():
print(list(filter(lambda x:x%2==0 ,range(10))))
day12_3()
def day12_4():
tmp=(filter(lambda x:x%2!=0 ,range(10)))
rslt=list(map(lambda x:x**2,tmp))
print(rslt)
day12_4()
def day12_5():
lst = [-30,45,-5,-90,20,53,77,-36]
rslt= list(filter(lambda x:x<0,lst))
print(rslt)
day12_5()
def day12_6():
ages = [34,39,20,18,13,54]
rslt=list(filter(lambda x:x>=19,ages))
print(rslt)
day12_6()
def day12_7():
A = [1, 2, 3]
B = [2, 4, 6]
rslt=list(map(lambda x,y: x*y, A,B))
print(rslt)
day12_7()
def day12_ex2():
user=input('정수들:').split(',')
#a=list(map(lambda x:int(x),user))
a=list(map(int,user))
print(max(a))
#user에 input 바로 넣는 거 해보기
def day12_lab10_5_2():
a = ['welcome', 'to', 'the', 'python', 'world']
rslt=list(map(lambda x:x[0],a))
print(rslt)
day12_lab10_5_2()
def day12_lab10_6_2():
st = 'Hello 1234 Python'
rslt=list(filter(lambda x:x.isdigit(),st))
print(rslt)
day12_lab10_6_2()
'파이썬 -23여름학기(ㄱㅎㅈ)' 카테고리의 다른 글
test5-GUI & datetime test (0) | 2023.07.11 |
---|---|
HW10 (0) | 2023.07.11 |
HW8,HW9 (0) | 2023.07.09 |
hw7 (0) | 2023.07.09 |
HW8 정리 (0) | 2023.07.09 |