카테고리 없음

스파르타 AI-8기 TIL(11/18) -> 처음부터 계속하기

kimjunki-8 2024. 11. 18. 20:25
if문
프로그래밍에서 조건을 판단하여 해당 조건에 맞는 상황을 수행하는 데 쓰는 것이 바로 if 문입니다.
money = True
if money:
    print('hi')
else:
    print('hello') #True이므로 hi가 출력됩니다.
"""
if 조건문:
    수행할_문장1
    수행할_문장2
    ...
else:
    수행할_문장A
    수행할_문장B
    ...
""" #기본 if와 else의 기본 구조
#그렇기에 들여쓰기를 잘 해야한다. + f 조건문 뒤에는 반드시 콜론(:)이 붙습니다.
#비교 연산자
# x < y -> x가 y보다 작다.
# x > y -> 	x가 y보다 크다.
# x == y -> x와 y가 같다.
# x != y -> x와 y가 같지 않다.
# x >= y -> x가 y보다 크거나 같다.
# x <= y -> x가 y보다 작거나 같다.
#그렇기에 상황을 보면서 True와 False를 잘 섞어내서 써야한다.

#and, or, not
# x or y -> x와 y 둘 중 하나만 True이어도 True이다.
# x and y -> x와 y 모두 참이어야 True이다.
# not x -> x가 거짓이면 True이다.
money = [1000, 2000, 50000] 
if 50000 in money: #50000이 있어서 이용 가능이라고 출력
    print('이용 가능')
if 500 not in money: 
    print('작은 것') #500이 없기에 True 반환 및 작은 것 출력
#조건문에서 아무 일도 하지 않게 설정하고 싶다면?
#주머니에 돈이 있으면 가만히 있고, 주머니에 돈이 없으면 카드를 꺼내라.
pocket = ['paper', 'money', 'cellphone']
if 'money' in pocket:
    pass #
else:
    print("카드를 꺼내라")
     
#elif - if문 하나 만으로 설명이 부족할 때 쓰는 또 다른 if문
if 1500 in money:
    #pocket 리스트 안에 money 문자열이 있기 때문에 if 문 다음 문장인 pass가 수행되고 
    #아무런 결괏값도 보여 주지 않는다.
    print(money)
elif 2000 in money:
    print('2000') # 1500은 없지만 2000은 있기에 2000 출력
""" # elif 기본 구조
if 조건문:
    수행할_문장1 
    수행할_문장2
    ...
elif 조건문:
    수행할_문장1
    수행할_문장2
    ...
elif 조건문:
    수행할_문장1
    수행할_문장2
    ...
...
else:
   수행할_문장1
   수행할_문장2
   ... 
"""

#if 문을 한 줄로 작성하기
print('1000' if 1000 in money else '없음') # 여기서 if와 else를 한 줄에 썼다. 1000이 있기에 1000 출력

#혹은
pocket = ['paper', 'money', 'cellphone']
if 'money' in pocket: pass #pass를 통해 아무런 값도 출력하지 않는다.
else: print("카드를 꺼내라")

While 
문장을 반복해서 수행해야 할 경우 while 문을 사용한다. 그래서 while 문을 ‘반복문’이라고도 부른다.
import time
#기본 구조
"""
while 조건문:
    수행할_문장1
    수행할_문장2
    수행할_문장3
    ...
"""
time = 0
while time < 6:
    print(f'{time}초가 지났습니다')
    if time == 5:
        print('시간이 끝났습니다')
    time += 1
#만약 time이 6이 되면 거짓이 되면서 출력이 멈춘다

prompt = """
1. Add
2. Del
3. List
4. Quit

Enter number: """
number = 0
while number != 4:
    print(prompt)
    number = int(input())
    #여기서 뭘 눌러도 prompt안에 있는 값들이 전부 출려되지만 4를 출력하면 False로 바뀌어 끝난다
#break
5
snack = 3
while snack:
    money = int(input('돈을 넣어주세요:'))
    if money >= 1000:
        print('꼬부기')
        print(f'남은 과자의 갯수: {snack -1}')
        print(f'잔돈: {money - 500}')
        snack -= 1
    elif money >= 500:
        print('사탕')
        print(f'남은 과자의 갯수: {snack -1}')
        print(f'잔돈: {money - 500}')
        snack -= 1
    elif money >= 1500:
        print('라면')
        print(f'남은 과자의 갯수: {snack -1}')
        print(f'잔돈: {money - 1500}')
        snack -= 1
    if snack == 0: #과자의 수가 0일 때 빠져나가기
        break
#continue - continue는 break와 비슷하지만, while문을 빠져나가지 않고, 한 턴 쉰다는 느낌입니다.

For문
While문과 비슷하지만 문장 구조가 한눈에 들어온다.
#for문 기본 구조
"""for 변수 in 리스트(또는 튜플, 문자열):
    수행할_문장1
    수행할_문장2"""
list = [1,2,3]
for a in list:
    print(a) #리스트에 있는 값들을 하나씩 가져온다

a = [(1,2), (3,4), (5,6)]
for (first, last) in a:
    print(first + last) #이러면 first, last에 값이 하나 씩 들어가면서 더해지면서 나온다

#게다가 
#if문에 썼던 한 줄 코드 처럼 for문도 마찬가지로 쓸 수 있다.
a = [1,2,3,4]
result = [num * 3 for num in a if num % 2 == 0]
# 먼저 1,2,3,4가 각 들어오게 되는데 만약 짝수인 값들만 가져오게 끔 하고, 가져온 값들을 * 3한다.
print(result)

#이렇게 많이 쓸 수 있다.
result = [x * y for x in range(2,10) for y in range(1,10)]
print(result)

함수
그냥 쉽게 말해 미리 정의해놓은 레시피 같은 느낌이다. 레시피에 맞게 사용자가 입력한 값에 따라 결과물도 레시피에 따라 달라지는 것이다. 입력값(x)에 따라 출력값(y)이 변하는 느낌이다.

프로그래밍을 하다 보면 똑같은 내용을 반복해서 작성해야 할 때가 있는데, 이때가 바로 함수가 필요한 때입니다. 즉, 반복되는 부분이 있을 경우, ‘반복적으로 사용되는 가치 있는 부분’을 한 뭉치로 묶어 ‘어떤 입력값을 주었을 때 어떤 결괏값을 리턴해 준다’라는 식이 함수입니다.
#함수 기본 구조
"""def 함수_이름(매개변수):
    수행할_문장1
    수행할_문장2
    ..."""
#def는 함수를 만들 때 사용하는 예약어이며, 
#함수 이름은 함수를 만드는 사람이 임의로 만들 수 있습니다.

#이 함수의 이름은 add이고 입력으로 2개의 값을 받으며 리턴값(출력값)은 2개의 입력값을 더한 값입니다.
def add(a,b): #a,b를 받는다는 뜻 -매개변수(parameter)
    return a + b 
w = 3 #중요한 점은 a,b를 받는다고 변수 이름이 무조건 a와 b일 필요가 없다.
b = 2
print(add(w,b)) #인수(arguments)
#매개변수(parameter)
#인수(arguments)는 함수를 호출할 때 전달하는 입력값을 의미한다.

#입력값이 없는 함수
def hi():
    return 'hi'
print(hi()) #입력값이 없으면 호출될 때 그냥 return값을 반환한다.

#리턴값이 없은 함수
def minus(a, b): #참고로 a =2, a = 5 이런식으로 미리 값을 지정해 줄 수 있다.
    print("%d, %d의 마이너스는 %d입니다." % (a, b, a-b))
print(minus(4,3))
#하지만 여기선 None이 반환되는데 return이 없어서 그렇다. 즉 리턴값이 없어서 그렇다

#입력값이 몇 개일지 모를 때 *args
def add_many(*args): 
    result = 0 
    for i in args: 
        result = result + i   # *args에 입력받은 모든 값을 더한다.
    return result 
print(add_many(4,2,6,2,1)) #그러면 15가 출력되는 것을 볼 수 있다.
#참고로 *args말고도 옆에 여러가지 값들을 받을 수 있다.
#예: def add_mul(choice, *args): 

#키워드 매개변수, **kwargs - *args는 숫자, kwargs는 문자열이기 때문에 **이 두번 붙는다.
#그런데 알아야할 점은 딕셔너리 형태도 값을 반환한다.
def print_kwargs(**kwargs):
    print(kwargs)
print_kwargs(a=1) #{'a': 1}이렇게 출력이 된다.
print_kwargs(name='foo', age=3) # {'name': 'foo', 'age': 3}이렇게 출력이 된다.

#참고로 리턴값은 언제나 하나이다.
def add_and_mul(a,b): 
    return a+b, a*b
result = add_and_mul(3,4)
print(result) #그러면 (7, 12)가 나오는데 이것 자체가 하나의 값으로 나옵니다.
result1, result2 = add_and_mul(3,4)
print(result1, result2) #이러면 각각 값이 들어가 7 12가 출력이 된다.

#global - global 명령어를 쓰면 함수 밖에 있는 즉, 지역 밖에 있는 변수를 불러오는 방법이다.
g = 3
def vartest():
    global g
    g = g + 2
vartest()
print(g) #그러면 함수가 호출되고  global에 있는 g의 값이 써지면서, 5로 출력이 된다.

#lambda - def와 동일한 역할을 하며, 보통 함수를 한 줄로 간결하게 만들 때 사용합니다.
#기본 구조 -> 함수_이름 = lambda 매개변수1, 매개변수2, ... : 매개변수를_이용한_표현식
a = [1,2,3]
b = [4,5,6]
add = lambda x, y: x + y
print(add(4,3)) #7출력

사용자 입출력
대표적인 input()과 print()이 있습니다
#input()
a = input("입력하세요:")
#그러면 입력하세요:라는 문구와 함께 무엇을 쓸 수 있는 창이 나타난다
#참고로 input은 입력되는 모든 것을 문자열로 취급합니다

#print()
#큰따옴표로 둘러싸인 문자열은 + 연산과 동일하다
print("life" "is" "too short")  # 1번 lifeistoo short 출력
print("life"+"is"+"too short")  # 2번 lifeistoo short 출력

#문자열 띄어쓰기는 쉼표로 한다
print("life", "is", "too short") #life is too short 출력

#한 줄에 결괏값을 계속 이어서 출력하려면 매개변수 end를 사용해 끝 문자를 지정해야 합니다.
for i in range(10):
    print(i, end=' ') #0 1 2 3 4 5 6 7 8 9 출력

파일 생성하기
#파일을 생성하기 위해 파이썬 내장 함수 open을 사용해야 합니다. 
#open 함수는 다음과 같이 ‘파일 이름’과 ‘파일 열기 모드’를 입력값으로 받고 
#결괏값으로 파일 객체를 리턴합니다
#파일_객체 = open(파일_이름, 파일_열기_모드)- 구조 
#a = open(..... , 'w')

#파일 열기 모드
#r -> 읽기 모드: 파일을 읽기만 할 때 사용한다.
#w -> 쓰기 모드: 파일에 내용을 쓸 때 사용한다.
#a -> 추가 모드: 파일의 마지막에 새로운 내용을 추가할 때 사용한다.

#새 파일을 디렉터리에 생성하고 싶으면 
#f = open("C:/doit/새파일.txt", 'w')
#f.close -> 오류를 위해 무조건 .close를 통해 닫아줘야 한다.

"""
f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)
f.close()
""" #처럼 f.write(data)를 파일안에 적어준다.

#파일을 읽는 여러 가지 방법 readline 함수 이용하기
"""
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line) #이러면 가장 첫번째 줄이 나온다. 1번째 줄입니다 출력
f.close()
"""
#만약 모든 줄을 꺼내고 싶다면,
"""
f = open("C:/doit/새파일.txt", 'r')
while True:
    line = f.readline()
    if not line: break
    print(line)
f.close()
""" #이 처럼 while True:인 무한 루프를 통해 계속해서 가져오는데,
#만약 더 이상 읽을 줄이 없으면 break를 수행한다
#readline()은 더 이상 읽을 줄이 없을 경우, 빈 문자열('')을 리턴한다

#readlines 함수 사용하기 - readlines 함수는 파일의 모든 줄을 읽어서 
#각각의 줄을 요소로 가지는 리스트를 리턴한다.
"""
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
f.close()
["1번째 줄입니다.\n", "2번째 줄입니다.\n", ..., "10번째 줄입니다.\n"]라고 출력이 되는데
\n을 없애고 싶으면 
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    line = line.strip()  # 줄 끝의 줄 바꿈 문자를 제거한다.
    print(line)
f.close() 이렇게 치면 된다.
""" 

#read 함수 사용하기 - f.read()는 파일의 내용 전체를 문자열로 리턴한다. 
#따라서 위 예의 data는 파일의 전체 내용이다.
"""
f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()
혹은 for문을 사용해 줄 단위로 읽을 수 있다.

f = open("C:/doit/새파일.txt", 'r')
for data in f:
    print(data)
f.close()
"""


#with 문과 함께 사용하기 - 파일을 열고 닫는 것을 자동으로 처리할 수 있다
"""
with open("foo.txt", "w") as f:
f.write("Life is too short, you need python")
""" #이러면 파일을 자동으로 닫아준다.

여기까지..