2022. 9. 8. 00:21ㆍ스파르타코딩클럽[AI트랙 3기]/TIL
22.09.07
좌절 : 이 두글자로 오늘 내기분을 완벽하게 표현할 수 있다. 긴글 쓰고 싶지 않다.
ㅁ파이선 수업 (이창호 튜터님)
*1교시
-개발에는 정답이 없음
-폴더에 name.py, cal.py 실제 프로그래밍할때는 네이밍에 신경을 써야함.
ㅇ계산기 풀이
1)dictionary 와 lambda
#main.py(예외처리 안하기)
import calc
def main():
result = calc.calc.(input().split(“”))
print(result)
main()
#calc.py
expression = {
“+” lambda x, y : x + y,
“-” lambda x, y : x + y,
“*” lambda x, y : x + y,
“/” lambda x, y : x + y,
}
def calc(num1, operation, num2):
return expression [operatior](int(num1), int(num2))
#main.py(예외처리 하기)
import calc
def main():
try:
result = calc.calc.(*input().split(“”))
print(result)
excpet:
print(“잘못된 수식을 입력하셨습니다.“)
main()
<cal.calc(*input().split(“”))>
여기서 '*'은 리스트를 벗겨줌. 입력을 할 때는 [“3”, “+”, “4”]와 같이 str로 입력. ‘*’을 적으면 list를 벗겨서 “3”,“+”,“4”와 같이 넣어줌. 만약 *이 없으면 num1에 리스트가 들어감.
lambda는 미니함수. 원래 함수는 'def 함수명 ()'로 정의해야하는데, 선언하지 않고도 바로 사용할 수 있음. 함수를 짧게 사용할 수 있다는 느낌으로 이해.
2)eval
evaluation : 사용자가 입력한 값을 그대로 실행시킴
print(eval()input()))
하면 계산기 끝남. eval은 다항식을 지원함. 하지만 보안상 매우 취약. 사용자가 받은 문자를 실행시키는 것인데, 의도하지 않은 명령어를 실행 할 수도있음. 예로 os라는 라이브러리가 있는데 그안의 다양한 기능 가능.(그림판열기, 메모장열기 등 의도치 않은 동작 실현 가능)
ㅇ반복문
numbers = [1,2,3,4]
for number in numbers:
print(number)
->numbers의 요소들을 하나씩 출력
a, b,c = 1,2,3
print(a)
print(b)
print(c)
1
2
3
print(c)
print(b)
print(a)
3
2
1
-enumerate : 순서 세기
A = [“q”,“w”,“e”,“f”]
for i, a in enumerate(A) :
print (f“{i}번째는 {a}입니다.”)
*실수) print 안에 f str안해주면 {}가 그대로 나옴.
-continue : 무시하고 진행하기
if 문 안에 조건에 맞는 것이 있으면 출력하고 아니면 다음거로 넘어감. else써서 아닐 경우 다른 것이 나오게 할 수 도 있는데, 이미 지나간 것에 대해서는 else의 조건이라도 출력하지 않는다.
-for / while문 : 조건은 다루는 방식의 차이가 있음.
강의 자료1)
member에는 members의 요소 , i에는 실행 순서가 담김.
members = [
(“lee”, 30 ),
(“kim”, 24 ),
(“lee”, 15 ),
]
for name, age in members:
print(f“{name}은 {age}살입니다.”)
-for 문 겹칙기
members = [
(“lee”, 30 ),
(“kim”, 24 ),
(“lee”, 15 ),
]
numbers = [
1,
2,
3
]
for i, member in enumerate(members):
print(f“{member}의 나이는 {numbers[i]}살입니다.”)
하면 number에 해당하는 index값 출력. 역순으로 출력하기 [-i]하면 됨. 단 0은 –없으니 첫 번째거는 안바뀌는데 제대로 하고 싶으면 –i-1하면됨.
리스트 개수는 상관 없음.
딕셔너리를 for문으로 돌리면 key만 나오는 것이 정상. 만약 value로 돌리고 싶으면 for k in products.value()넣으면 됨. key, value 둘다 쓰고 싶으면, for k,v in products.items()
for i in range(10):
print(i)
range는 시작하는 숫자를 정할 수 있음(3,10)+몇씩갈지도 정함 (3,10,2) 3부터 10까지 숫자 2개씩 건너띄면서 감. 3, 5, 7, 9. 마지막 숫자는 포함 안됨.
반복문 사용시 continue가 있는데 아무것도 하지 않고넘어가겠다는 뜻. if number <= 50: continue 하면 아무동작안함. 그럼 리스트에 50보다 작은 숫자를 찍으면 그냥 넘어감, 그러나 밑에 print(50보다 큰 숫자입니다.)하고 있으면 50이상일 때 부터는 출력됨.
-break:하면 for문을 나가게됨.
if number >=4: break 하면 조건에 맞는 것까지만 함수 실행하고 특정 조건에 안맞으면 그 뒤에것은 작동 안함.
-반복문에는 while문도 있음. while은 조건이 참일 경우 계속 실행
while “조건”:
“”“코드”“”
조건이 참이면 계속 돈다. 조건에 True넣으면
while “True”
print(“hello world”) 해주면 무한으로 계속 hello world로 찍어줌. 이렇게 도는 것을 무한루프라고 함. for문은 그럴일이 잘 없음. 끝이 있다. 리스트나, range로 써주기 때문.
*언제 while, for문 사용하냐면 for문은 반복회수가 정해져 있을 때. while 반복회수가 정해지지 않을 때
a가 5일때까지 코드를 짜라 하면 while a ==5: 하면 작동안됨.
a == 0
while a > 5=:
a += 1
print()
*2교시
-vs코드 필수 익스텐션 : 파워모드(카페에서 어그로 끌기 좋음)
-탭사용 유의(스페이스바 4번으로 공백만들기, 컨벤션 주의)
-randint(1, 5) : 끝숫자 포함 / randrage(1, 5) : 끝수자 미포함
-랜덤 사용하기
실습))비밀번호랜덤생성기
1)함수먼저 정의
def random_password_generator(length): < length는 길이를 얼마나 가져갈 것인지
for i in range(length): <length만큼 반복
2)STIRINGS 만들어서 비밀번호 뽑아올 요소 정해주기
STIRINGS= “abcdefgASXCZBR123!$%” < 뽑아올 요소 정해줌.
3)STRINGS에서 랜덤한 index 가져오기
def random_password_generator(length):
for i in range(length):
STRINGS[random.randrange(0. len(STRINGS))] <스트링스의 인덱스를 가져오는데 0부터 strings의 길이만큼 가져옴.
그리고 for 밑에
password += STRINGS[random.randrange(0. len(STRINGS))] <password에 하나씩 더해줌.
4)return으로 값 받아오기
password 밑에 return password
5)main 함수 지정
위에 저것들 다해주고 def main():
length = 30 < length를 미리 30으로 정해줘도 되고, input()으로 받아줘도됨.
password = random_password_generator(length)
print(password)
main() < 함수 실행
#종료#
원리) strings에 들어갈 수 있는 글자 모두 적어주고, 공백의 패스워드를 만들어줌. length는 password의 글자수. 그러면 range에서 그 수만큼 반복함. 그러면 password에 50개 글자가 붙게됨. 이 때 strings가 랜덤한 인덱스에 하나씩 붙게 되고 하나씩 뽑아서 password에 붙음. 마지막으로 password return해주면 값이 나옴.
+)main 함수에 바로 length를 인풋하는 것도 가능
def main(length): 로 main을 정의하고 , 아래 main(숫자)하면 숫자만큼의 자리수로 비밀번호가 생성됨.
더 깔끔한 것은
def main():
length = int(intput(“비밀번호 길이를 입력해 주세요 : ”))
password = random_password_generator(length)
print(password)
main()도 가능함.
+)선언하고 사용하지 않는 것은 회색이 됨. 이럴땐 _를 사용.
gui / cli : gui는 눈에보이는 것 , cli는 브이에스코드에서 바로 실행하는 것
*3교시
-각기 다른 함수에서 매개변수 설정할 때 매개변수 이름이 동일해도 됨. (지역변수일 때)
-타임은 주로 sleep이랑 코드 작동 시간 구할 때 씀. end_time – start_time 하면 코드의 실행 시간 나옴. sleep은 함수를 짜고 실행시간이 오래 걸릴 때, 구간에서 소요시간이 얼마걸리는지 파악해서 최적화 하는데 도움이됨.
-datetime
사용자 입력 : “2022-06-02“
계산하려면 각 월이 몇일까지 있는지도 확인해야하고, 날짜가 14보다 낮은 값이면 월을 빼주고 하는 등 계산식이 복잡해짐. 이런 경우 datetime 이라는 라이브러리를 사용하면 해결할 수 있음.
작업 순는서
1)사용자입력을 datetime으로 변경,
datetime은 str -> datetime으로 변경. 원래 데이트 타입은 strptime /strfime은 datetime을 str으로.
2)datetime 포맷에서 날짜 계산.
3)datetime 포맷을 원하는 str으로 변경.
datetime_=datetime.strptime(string_datetime,)string
datetiem포맷은 기본적으로 시분초를 포함. 그래서 자체로 없앨수는 없지만 빼고 출력할 수 있음. 일단 timedelta를 사용하면 날짜를 더하고 뺄 수 있음.
-crtl 누르고 커서 갖다대면 정보 볼 수 있음.
-장고에서 예약 받기등에 활용 가능. 예약을 할 때 연, 월, 일 , 시
실습)로또번호 뽑는 코드
def lotto_number_generator(count):
result = []
if count < 1 :
print(“1이상의 값을 입력해 주세요”)
for _ in range(count):
lotto_number = set()
while len(lotto_numbers) <= 8 : <로또번호가 8자리가 되기전까지 계속 돌림.
lotto_numbers.add(random.randint(1,45)) <set에서는 add, list에서는 append
result.append(lotto_numbers)
return result
lotto_numbers = lotto_number_generator(10)
print(lotto_numpers)
하면 출력은 되는데 안이쁨 이럴 때 from pprint import pprint. 제너레이터 안에는 로또를 살 개수.
-이중 반복문 : for문안에서 while문 돌리는 경우
'스파르타코딩클럽[AI트랙 3기] > TIL' 카테고리의 다른 글
| [내일배움단 ai트랙 3기]깃 강의(2) (0) | 2022.09.12 |
|---|---|
| [내일배움단 ai트랙 3기]깃 강의(1) (0) | 2022.09.09 |
| [내일배움단 ai트랙 3기]파이썬 문법(2) (0) | 2022.09.07 |
| [내일배움단 ai트랙 3기]파이썬 문법(1) (0) | 2022.09.06 |
| [내일배움단 ai트랙 3기]파이썬 문법 뽀개기(2) (0) | 2022.09.02 |