리스트, 딕셔너리, 튜플, 세트

 

리스트 [a, b, ...]

 리스트는 객체의 집합으로, 순서를 가지고 있다.

subway = [10, 20 ,30]

subway = ['유재석', '조세호', '박명수']
print(subway.index('조세호')) # '조세호'의 index

subway.append('하하') # 리스트 뒤에 '하하'를 추가

subway.insert(1, '정형돈') # index 1에 '정형돈'을 추가
print(subway) # ['유재석', '정형돈', '조세호', '박명수', '하하']

subway.pop() # 맨 뒤의 요소 1개 제거

 index를 통해 요소가 위치한 곳의 정보를 알 수 있고 append, insert, pop을 통해 요소를 추가하거나 삽입할 수 있다.

 

# 리스트 정렬
numList = [5, 2, 4, 3, 1]
numList.sort()

# 리스트 순서 뒤집기
numList.reverse()

# 리스트 내 요소 모두 지우기
numList.clear()

# 리스트는 다양한 자료형을 포함하여 사용할 수 있다.
numList2 = [9, 20, 1, 33]
mixList = ['조세호', 20, True, numList2]
print(mixList) # ['조세호', 20, True, [9, 20, 1, 33]]

# 리스트는 확장이 가능하다.
numList3 = [1, 2, 3, 4, 5]
mixList.extend(numList3)
print(mixList) # ['조세호', 20, True, [9, 20, 1, 33], 1, 2, 3, 4, 5]
print(mixList[0])

 

 sort, reverse를 통해 순서를 정렬할 수 있다. 그리고 리스트는 또다른 리스트나 Boolean, 문자열, 숫자형 등 다양한 자료형을 포함할 수 있다. extend를 통해 확장 또한 가능하다.

 

딕셔너리 {key1: value, key2: value2, ...}

 JavaScript의 Object, 즉 객체와 유사하다. key에 따른 value를 가진 요소들을 담고 있는 집합이다.

 

딕셔너리에서 value를 가져오는 방법

cabinet = {3:'유재석', 100:'김태호'}
print(cabinet[3])
print(cabinet[100])
# print(cabinet[0])
print(cabinet.get(3))
print(cabinet.get(0)) # get을 사용하여 없는 key를 불러올 때는 에러가 아니라 None을 반환한다.
print(cabinet.get(5, '사용 가능')) # get을 사용하였을 때 None이라면 '사용 가능'을 대신 반환한다. 즉 -1 -> '사용 가능'

 딕셔너리 뒤에 [] 안에다가 key값을 작성하면 된다. 만약 존재하지 않는 key값을 작성하면 error가 발생한다. get을 사용하여 value를 가져올 수도 있는데, get은 존재하지 않는 key을 값을 넣었을 때 error를 내지 않고 -1을 반환한다. 이 때 2번째 인자를 삽입하면, 존재하지 않는 key값을 넣었을 때 -1이 아니라 두 번째 인자를 반환한다.

 

# 해당 key가 dictionary에 있는지 확인
print(3 in cabinet) # True
print(5 in cabinet)

# 새로운 key/value 추가
cabinet = {'A-3': '유재석', 'B-100': '김태호'}
print(cabinet)
cabinet['A-3'] = '김종국'
cabinet['C-20'] = '조세호'
print(cabinet)

# key/value 삭제
del cabinet["B-100"] # del은 작은 따옴표, 큰 따옴표를 구분하지 않는다.
print(cabinet)

# key들만 출력
print(cabinet.keys())

# value들만 출력
print(cabinet.values())

# key/value 쌍으로 출력
print(cabinet.items())

# 모든 key/value 삭제
cabinet.clear() # 리스트와 마찬가지로 clear 사용
print(cabinet)

 key in 딕셔너리를 통해 해당 key가 딕셔너리에 존재하는지 확인할 수 있다. 그리고 [] 안에 새로운 key 값을 넣고 = 뒤에 value를 넣어 새로운 key/value 요소를 추가할 수 있다. del을 통해 간단하게 요소를 삭제할 수 있고 keys와 values로 key값들 혹은 value값들만 출력할 수 있다.

 

튜플 (a, b, ...)

 튜플은 리스트와 유사해 보이나, 내용 변경이나 추가는 할 수 없다. 따라서 유연하진 않지만 처리 속도가 빨라진다. 내용 변경이 필요없는 곳에 사용할 때 효율적이다.

menu = ('돈까스', '치즈까스') # 튜플은 [], {}가 아니라 ()을 사용한다.
print(menu[0])
# menu.append('생선까스') # 튜플에서는 요소 추가 등의 변경이 불가능하여 에러가 발생한다.

 

# 튜플의 활용
name = '김종국'
age = 20
hobby = '코딩'
print(name, age, hobby)
(name, age, hobby) = ('김종국', 20, '코딩')
print(name, age, hobby)

 

세트 {a, b, ...}

 집합, 즉 세트(set)는 중복을 허용하지 않고, 순서가 없다.

my_set = {1, 2, 3, 3, 3} # 딕셔너리와 달리 key가 없다.
print(my_set) # 뒤에 중복되는 3들이 없어진다.

 

java = {'유재석', '김태호', '양세형'} # 주의하자. 딕셔너리가 아니라 세트이다.
python = set(['유재석', '박명수']) # set를 생성하는 다른 방법.
print(python) # 세트의 경우 순서가 상관없기 때문에 '박명수'가 앞으로 올 수도 있다.

 

# 요소 추가
python.add('김태호') # 세트에서 요소를 추가하는 방법은 add이다.
print(python)

# 요소 삭제
java.remove('김태호')
print(java)

 세트에서는 add와 remove를 통해 요소를 추가하거나 삭제할 수 있다.

 

교집합, 합집합, 차집합

# 교집합
print(java & python) # {'유재석'}
print(java.intersection(python)) # intersection은 교차라는 뜻

# 합집합
print(java | python) # '유재석'은 중복되지 않는다. {'양세형', '유재석', '박명수', '김태호'}
print(java.union(python))

# 차집합
print(java - python) # java 집합에서 java & python 교집합을 빼는, 오직 java에만 포함되어 있는 요소들. {'양세형', '김태호'}
print(java.difference(python))

 

자료구조의 변경

menu = {'커피', '우유', '주스'} # 세트 {}
print(menu, type(menu)) # menu의 type도 같이 출력된다.

menu = list(menu) # 리스트로 변경 []
print(menu, type(menu)) # menu의 type으로 리스트가 출력된다.

menu = tuple(menu) # 튜플로 변경 ()
print(menu, type(menu)) # menu의 type으로 튜플이 출력된다.

menu = set(menu) # 세트로 변경 {}
print(menu, type(menu))

menu = dict(menu) # 딕셔너리로 변경 {key: value, ...}
print(menu, type(menu)) # {'주': '스', '우': '유', '커': '피'} <class 'dict'>

 python에서는 이렇게 자료구조의 변경이 가능하다.

 

퀴즈

'''
Quiz) 당신의 학교에서는 파이썬 코딩 대회를 주최합니다.
참석률을 높이기 위해 댓글 이벤트를 진행하기로 하였습니다.
댓글 작성자들 중 추첨을 통해 1명은 치킨, 3명은 커피 쿠폰을 받게 됩니다.
추첨 프로그램을 작성하시오.

(조건)
1. 편의상 댓글은 20명이 작성하였고 아이디는 1 ~ 20이라고 가정
2. 댓글 내용과 상관 없이 무작위로 추첨하되 중복 불가
3. random 모듈의 shuffle과 sample 활용

(출력 예제)
 -- 당첨자 발표 --
치킨 당첨자 : 1
커피 당첨자 : [2, 3, 4]
 -- 축하합니다. --

(활용 예제)
from random import *
list = [1, 2, 3, 4, 5]
print(list)
shuffle(list)
print(list)
print(sample(list, 1))
'''

 

나의 풀이

from random import *

list = list(range(1, 21)) # 1 부터 21 직전까지, 즉 1 ~ 20까지의 숫자 리스트를 형성한다.
# print(type(range(1, 21))) # 참고로 range의 type은 range이다.
shuffle(list) # shuffle을 통해 list를 무작위로 섞어준다.

chicken = sample(list, 1) # list에서 무작위로 샘플 1개를 뽑는다.
list.remove(chicken[0]) # 중복을 피하기 위해 chicken으로 뽑힌 값은 list에서 삭제
# print(chicken) # sample은 list에서 샘플 1개를 뽑아 리스트 형태로 반환해준다는 것을 알 수 있다.

coffee = sample(list, 3)

print(' -- 당첨자 발표 -- ')
print('치킨 당첨자 :', chicken[0]) # 쉼표를 사용했기 때문에 str(chicken[0])을 해주지 않아도 된다.
print('커피 당첨자 :', coffee)
print(' -- 축하합니다. -- ')

 정상적으로 동작을 하지만 인자가 바뀌면 수정해야할 부분이 비교적 많다.

 

나도코딩님 풀이

from random import *

users = range(1, 21)
users = list(users)

shuffle(users)
winners = sample(users, 4)

print(' -- 당첨자 발표 -- ')
print('치킨 당첨자 : {0}'.format(winners[0]))
print('커피 당첨자 : {0}'.format(winners[1:]))
print(' -- 축하합니다. -- ')

 훨씬 깔끔하고 중복도 쉽게 피해간다.

'프로그래밍 > Python' 카테고리의 다른 글

조건문과 반복문  (0) 2022.03.08
문자열  (0) 2022.03.04
연산자  (0) 2022.03.03
자료형  (0) 2022.03.03

 조건문과 반복문

if

weather = input('오늘 날씨는 어때요? ') # input을 이용해 다음과 같이 작성 후 실행 시 커서가 ? 뒤에서 기다리고 있다. 사용자가 입력한 값은 문자열로 저장된다. 
if weather == '비' or weather == '눈':
    print('우산을 챙기세요.')
elif weather == '미세먼지':
    print('마스크를 챙기세요.')
else:
    print('준비물이 필요 없어요.')

temp = int(input('기온은 어때요? ')) # 정수형으로 입력값을 받고 싶을 때
if 30 <= temp:
    print('너무 더워요, 나가지 마세요.')
elif 10 <= temp and temp < 30:
    print('괜찮은 날씨에요.')
elif 0 <= temp < 10:
    print('외투를 챙기세요.')
else:
    print('너무 추워요, 나가지 마세요.')

 if 문을 통해 원하는 조건에 맞는 코드를 실행시킬 수 있다. 그리고 만약 처음 if의 조건에 성립하지 못했다면 elif를 만나고, 이러한 if 와 elif 모두의 조건에 성립할 수 없다면 else로 넘어가게 된다.

 

 위 코드에서 쓰인 input을 통해서 사용자가 입력한 입력값을 받을 수 있다.

 

for

for waiting_no in [0, 1, 2, 3, 4]:
    print("대기번호: {0}".format(waiting_no))

for waiting_no in range(5): # 0 부터 5 직전까지
    print('대기번호: {0}'.format(waiting_no))

for waiting_no in range(1, 5): # 1부터 5 직전까지
    print('대기번호: {0}'.format(waiting_no))

starbucks = ['아이언맨', '토르', '아이엠 그루트']

for customer in starbucks:
    print('{0}, 커피가 준비되었습니다.'.format(customer))

 for문을 통해서 원하는 만큼 코드를 반복적으로 실행할 수 있다.

 

students = [1, 2, 3, 4, 5]
print(students)
students = [i + 100 for i in students] # students의 각 요소를 i로 불러오면서 그 i에 100 더한 값을 students 리스트에 넣어라.
print(students)

students = ['Iron man', 'Thor', 'I am groot']
print(students)
students = [len(i) for i in students]
print(students)

students = ['Iron man', 'Thor', 'I am groot']
print(students)
students = [i.upper() for i in students]
print(students)

 이렇게 리스트 안에서 반복을 진행하여 각 요소의 값을 바꿀 수 있다. 첫 번째 students는 [101, 102, 103, 104, 105]가 되었을 것이다. 두 번째 students 리스트는 각 요소가 길이로 반환되어 [8, 4 ,10]이 된다. 세 번째 students는 모두 대문자로 바뀌게 된다.

 

while

customer = '토르'
index = 5
while index >= 1:
    print("{0}님, 커피가 준비 되었습니다. {1}번 남았습니다.".format(customer, index))
    index -= 1
    if index == 0:
        print('커피는 폐기처분되었습니다.')

 while 문은 조건을 만족하는 한, 계속해서 while 밑의 코드가 실행된다. 위 코드는 index가 점차 5, 4, 3, 2, 1로 줄어들면서 5번 반복하게 되고 0이 되면서 index >= 1을 만족하지 못하게 되기 때문에 while문이 종료된다.

 

customer = '아이언맨'
index = 1
while True:
    print('{0}님, 커피가 준비되었습니다. 호출 {1}번 했습니다.'.format(customer, index))
    index += 1

 이처럼 코드를 작성 시, 계속해서 True이기 때문에 무한 루프에 빠지게 된다. 터미널에서 index가 계속해서 증가하는 것을 목격할 수 있다.

무한루프, 터미널 창 클릭 후 ctrl + c(윈도우)로 빠져나올 수 있다.

 

customer = '토르'
person = 'Unknown'

while person != customer:
    print('{0}님, 커피가 준비되었습니다.'.format(customer))
    person = input('이름이 어떻게 되시나요? ')
    if person == '토르':
        print('네, 감사합니다.')

 위 코드에서는, input에서 사용자가 토르라고 입력하지 않으면 while문이 계속해서 실행된다. 사용자가 토르라고 입력하면 person = '토르'가 되고 if문을 실행하여 '네, 감사합니다.'를 실행시킨다. 그리고 person != customer는 False가 되어 while이 종료된다.

 

continue, break

absent = [2, 5]
noBook = [7]

for student in range(1, 11):
    if student in absent:
        continue # continue를 만나면 밑에 있는 문장을 실행하지 않고 다음으로 넘어간다. 즉 2나 5에서는 책 좀 읽어줘를 실행하지 않고 3과 6으로 넘어가게 된다.
    elif student in noBook:
        print('오늘 수업은 여기까지. {0}은 교무실로 따라와'.format(student))
        break # break를 만나면 곧바로 반복문이 종료된다. 즉 7에서는 8로 넘어가는 것이 아니라 반복문을 종료시킨다.
    print('{0}, 책 좀 읽어줘.'.format(student))

 continue를 만나면 밑의 코드를 무시하고 다음 차례로 넘어간다. 즉 if문에서 현재 student가 absent와 동일한 2라면 continue가 실행된다. 따라서 '책 좀 읽어줘'라는 print문이 실행되지 않고 student는 3으로 넘어가게 된다.

 

 break를 만나면 반복문을 종료시키게 된다. 만약 현재 student가 noBook과 동일한 7이라면 elif문의 코드가 실행되고 print문이 실행되면서 while이 멈추게 된다. break는 다음 차례로 넘어가는 continue와는 다르게 8로 넘어가지 않고 7에서 for문을 종료한다는 것이다.

 

퀴즈

'''
Quiz) 당신은 Cocoa 서비스를 이용하는 택시 기사님입니다.
50명의 승객과 매칭 기회가 있을 때, 총 탑승 승객 수를 구하는 프로그램을 작성하시오.

조건1 : 승객별 운행 소요 시간은 5분 ~ 50분 사이의 난수로 정해집니다.
조건2 : 당신은 소요 시간 5분 ~ 15분 사이의 승객만 매칭해야 합니다.

(출력문 예제)
[O] 1번째 손님 (소요시간 : 15분)
[ ] 2번째 손님 (소요시간 : 50분)
[O] 3번째 손님 (소요시간 : 5분)
...
[ ] 50번째 손님 (소요시간 : 16분)

총 탑승 승객 : 2 분
'''

 

# while 사용
currPassenger = 1
passCount = 0

while currPassenger < 51:
    leadTime = randint(5, 50)
    if 5 <= leadTime <= 15:
        print('[O] {0}번째 손님 (소요시간 : {1})'.format(currPassenger, leadTime))
        passCount += 1
    else:
        print('[ ] {0}번째 손님 (소요시간 : {1})'.format(currPassenger, leadTime))
    currPassenger += 1

print('총 탑승 승객 : {0} 분'.format(passCount))

 

count = 0

for i in range(1, 51):
    leadTime = randrange(5, 51)
    if 5 <= leadTime <= 15:
        print('[O] {0}번째 손님 (소요시간 : {1})'.format(i, leadTime))
        count += 1
    else:
        print('[ ] {0}번째 손님 (소요시간 : {1})'.format(i, leadTime))

print('총 탑승 승객 : {0} 분'.format(count))

'프로그래밍 > Python' 카테고리의 다른 글

리스트, 딕셔너리, 튜플, 세트  (0) 2022.03.09
문자열  (0) 2022.03.04
연산자  (0) 2022.03.03
자료형  (0) 2022.03.03

* 유튜브 나도코딩의 동영상을 시청하며 작성한 개인 학습용 글입니다.

* 나도코딩 유튜브 : https://www.youtube.com/channel/UC7iAOLiALt2rtMVAWWl4pnw

 

문자열
sentence = '나는 소년입니다.'
print(sentence)
sentence2 = "파이썬은 쉬워요."
print(sentence2)
sentence3 = """
나는 소년이고,
파이썬은 쉬워요
"""
print(sentence3)

 '와 ", """로 문자열을 사용할 수 있다.

 

슬라이싱
jumin = "950622-1234567"
print('성별:', jumin[7])
print('년도:', jumin[0:2]) # 0부터 2 직전까지, 즉 0부터 1까지
print('월:', jumin[2:4]) # 2부터 4 직전까지, 즉 2부터 3까지
print('일:', jumin[4:6])
print('생년월일:', jumin[0:6])
print('생년월일:', jumin[:6]) # 해당 경우에는 처음 0이 생략가능하다. 즉 처음부터 6 직전까지
print('주민번호 뒷자리:', jumin[7:14])
print('주민번호 뒷자리:', jumin[7:]) # 7부터 끝까지
print('주민번호 뒷자리(뒤에서부터):', jumin[-7:]) # 뒤에서부터 index가 시작된다고 한다면, 맨 뒤 index는 -1이다. 따라서 index -7의 값은 1이 된다.

 슬라이싱, slicing은 필요한 만큼 정보를 자르는 것이다. Python 문법을 보면 맨 끝자리가 생략되고 그 직전까지 포함하는 경우가 많은데 조금 불편한 것 같다. 아직 왜 그렇게 하는지 몰라서 이런 생각이 드는 것 같다.

 

문자열 처리 함수
python = 'Python is Amazing'
print(python.lower()) # 문자열을 소문자로 바꿔준다.
print(python.upper()) # 문자열을 대문자로 바꿔준다.
print(python[0].isupper()) # 해당 요소가 대문자인지 판단해준다.
print(python[0].islower()) # 해당 요소가 소문자인지 판단해준다.
print(len(python)) # 길이를 반환해준다.
print(python.replace('Python', 'Java')) # 해당 요소의 문자열을 교체해준다.

 

index = python.index('n') # 해당 요소의 index 값을 반환한다.
print(index) # 5
index = python.index('n', index + 1) # 처음 n을 찾고 난 index의 + 1을 한 index, 즉 5에서부터 두번째 n을 찾고 그 값을 반환한다.
print(index) # 15
print(python.find('n')) # 비슷하게 처음 찾은 n의 index 값을 반환한다.
print(python.find('Java')) # 찾지 못할 경우 find는 -1을 반환한다.
# print(python.index('Java')) # 찾지 못할 경우 index는 에러를 낸다.
print(python.count('n')) # n이 몇 번 등장하는지 계산해준다.

 find는 원하는 요소를 못 찾으면 -1을 반환하고 index는 에러를 발생시킨다. 의도적으로 -1을 반환해야 되거나 찾지 못해도 에러가 발생하는 걸 원하지 않을 경우 find를 사용하고, 찾지 못했을 경우 치명적인 오류라고 판단해야 될 때는 index를 사용하면 될 것 같다.

 

문자열 포맷
print('나는 %d살입니다.' % 20) # % 뒤의 값을 %d에 넣겠다는 의미이다. 이떄 d는 정수형을 의미하므로 여기의 % 뒤에는 정수형 값만 넣을 수 있다.
print('나는 %s을 좋아해요.' % '파이썬') # s는 문자형을 의미한다. 참고로 s는 문자이든 숫자이든 모두 받을 수 있다.
print('나는 %s살입니다.' % 20)
print('Apple은 %c로 시작해요.' % 'A') # c는 character라서 한 글자만 받겠다는 의미이다.

print('나는 %s색과 %s색을 좋아해요.' % ('파란', '빨간'))
print('나는 {}살입니다.'.format(20))
print('나는 {}색과 {}색을 좋아해요.'.format('파란', '빨간'))
print('나는 {4}색과 {2}색을 좋아해요.'.format('파란', '빨간', '노란', '초록', '주황'))
print('나는 {age}살이며, {color}색을 좋아해요.'.format(age=20, color='빨간'))
print('나는 {age}살이며, {color}색을 좋아해요.'.format(color='빨간', age=20))

 %d, %s, %c와 format을 이용해 문자열을 좀 더 효과적으로 표현할 수 있다.

 

탈출 문자
# print('백문이 불여일견 
# 백견이 불여일타') # 2줄로 쓰고 싶을 때, 이렇게 출력하면 오류가 발생한다.

print('백문이 불여일견\n백견이 불여일타') # \n으로 해결 가능하다.
# print("저는 "나도코딩"입니다.") # 오류가 발생한다.
print('저는 "나도코딩"입니다.')
print("저는 \"나도코딩\"입니다.") # \는 뒤의 '이나 "을 문자열 그대로 출력해주는 역할을 한다.
print("저는 \'나도코딩\'입니다.")

# print("C:\Users\Administrator\Desktop\Code\Prac") # \은 뒤의 '이나 "을 문자열 그대로 출력해주기 때문에 해당 코드는 오류가 난다.
print('C:\\Users\\Administrator\\Desktop\\Code\\Prac') # \\ 으로 뒤의 \을 문자열 그대로 출력하게 해줘서 해결 가능하다.

print('Red Apple\rPine') # \r은 커서를 맨 앞으로 이동시킨다. 따라서 Red' ' 대신에 Pine으로 대체되어 PineApple이 된다.

print("Redd\bApple") # \b는 백스페이스(한 글자 삭제)이다. \b 앞의 d를 지우게 되어 RedApple을 출력하게 된다.

print('Red\tApple') # \t는 탭이다. 키보드에서 탭을 치는 것과 동일하게 작용한다.

 \n을 통해 다음 줄로 넘어가는 것이 가능하다. 그리고 '와 "을 문자열 그대로 나타낼려면 앞에 \을 붙여주면 된다. \자체를 문자열로 표현하기 위해서는 \\으로 해야된다. 그러면 \이 문자열 그대로 출력된다.

 

 \r은 커서를 맨 앞으로 이동시키고, \b는 백스페이스를 실행한다. 그리고 \t는 탭을 실행한다.

 

 여기서 \은 역슬래쉬이다.

 

퀴즈
'''
Quiz) 사이트별로 비밀번호를 만들어주는 프로그램을 작성하시오.

규칙1 : http:// 부분은 제외 => naver.com
규칙2 : 처음 만나는 점(.) 이후 부분은 제외 => naver
규칙3 : 남은 글자 중 처음 세자리 + 글자 갯수 + 글자 내 'e' 갯수 + '!'로 구성

예) 생성된 비밀번호 : nav51!
'''
website = 'http://google.com'
replacedWebsite = website.replace('http://', '') # 규칙 1
finalReplacedWebsite = replacedWebsite.replace('.com', '') # 규칙 2 # 해당 경우는 사이트가 .com으로 끝나지 않을 수 있으므로 적절치 않다.
# finalReplacedWebsite = replacedWebsite[:replacedWebsite.index('.')] # index를 활용한 규칙 2 대체 방안

password = finalReplacedWebsite[:3] + str(len(finalReplacedWebsite)) + str(finalReplacedWebsite.count('e')) + '!'
print(f'생성된 비밀번호 : {password}')
print('생성된 비밀번호 : {}'.format(password))
print('생성된 비밀번호 : {2}'.format(0, 'jun', password, 'hello'))
print('{0}으로 인해 생겨난 비밀번호는 {2}입니다.'.format(website, 'jun', password, 'hello'))

 처음 내가 짠 코드는 마지막 사이트가 .com으로 끝나지 않는다면 유효하지 않다. 나도코딩님 해설이 더 정확할 듯 싶다. 그리고 http가 아닌 https라면 if 구문으로 나눠야 할 것 같다.

'프로그래밍 > Python' 카테고리의 다른 글

리스트, 딕셔너리, 튜플, 세트  (0) 2022.03.09
조건문과 반복문  (0) 2022.03.08
연산자  (0) 2022.03.03
자료형  (0) 2022.03.03

* 유튜브 나도코딩의 동영상을 시청하며 작성한 개인 학습용 글입니다.

* 나도코딩 유튜브 : https://www.youtube.com/channel/UC7iAOLiALt2rtMVAWWl4pnw

 

기본 연산 및 조건 연산
print(1+1)
print(3-2)
print(5*2)
print(6/3)
print(2**3) # 제곱
print(5%3) # 나머지
print(5//3) # 몫

print(10 > 3)
print(4 >= 7)
print(10 < 3)
print(5 <= 5)

print(3 == 3) # 앞과 뒤의 값이 같은지 확인
print(4 == 2)
print(3 + 4 == 7)
print(1 != 7) # 앞과 뒤의 값이 같지 않은지 확인
print(not(1 != 3)) # True를 역으로 변환하여 False가 출력된다.

print((3 > 0) and (3 < 5))
print((3 > 0) & (3 < 5))

print((3 > 0 ) or ( 3 > 5))
print((3 > 0 ) | (3 > 5))

print(5 > 4 > 3)
print(5 > 4 > 7)

 

변수를 이용한 연산
number = 2 + 3 * 4
print(number) # 14
number = number + 2
print(number) # 16
number += 2
print(number) # 18
number *= 2
print(number) # 36
number /= 2
print(number) # 18
number -= 2
print(number) # 16
number %= 5
print(number) # 1

 

숫자 처리 함수
print(abs(-5)) # 절댓값 5
print(pow(4, 3)) # 4^3 64
print(max(5, 12, 7, 2014, 34, 703)) # 최댓값을 반환한다. 2014
print(min(5, 12, 7, 2014, 34, 703)) # 최솟값을 반환한다. 5
print(round(3.14)) # 반올림 3

 

math 라이브러리를 사용한 연산
from math import *
print(floor(4.99)) # 내림
print(ceil(3.14)) # 올림
print(sqrt(16)) # 제곱근, 즉 출력값은 4

 이 때 from math import *에서 *은, math 라이브러리의 모든 함수, 변수, 클래스를 가져오겠다는 의미이다.

 

랜덤 함수
from random import *
print(random()) # 0.0 이상 1.0 미만의 임의의 값을 생성한다.
print(random() * 10) # 0.0 이상 10.0 미만의 임의의 값을 생성한다.
print(int(random() * 10)) # int로 인해 정수형만 출력한다. 따라서 0 이상 10 미만의 임의의 정수형의 값을 생성한다.
print(int(random() * 10) + 1) # 1 이상 11 미만, 즉 1 ~ 10 사이의 임의의 정수형 값을 생성한다.

 

 - 랜덤 함수를 활용한 로또 번호 생성

print(int(random() * 45) + 1) # 1 ~ 45
print(randrange(1, 46)) # 1 이상 46 미만의 임의의 정수형 값을 생성한다. randrange는 끝을 포함하지 않는다.
print(randint(1, 45)) # 1 이상 45 이하의 임의의 정수형 값을 생성한다.randint는 끝을 포함한다.

 위 3가지 방법 중 1개를 골라 6번 출력시키면 6개의 로또 번호를 생성할 수 있다.

 

퀴즈
'''
Quiz) 당신은 최근에 코딩 스터디 모임을 새로 만들었습니다.
월 4회 스터디를 하는데 3번은 온라인으로 하고 1번은 오프라인으로 하기로 했습니다.
아래 조건에 맞는 오프라인 모임 날짜를 정해주는 프로그램을 작성하시오.

조건1 : 랜덤으로 날짜를 뽑아야 한다.
조건2 : 월별 날짜는 다름을 감안하여 최소 일수인 28일 이내로 정한다.
조건3 : 매월 1 ~ 3일은 스터디 준비를 해야 하므로 제외한다.

(출력문 예제)
오프라인 스터디 모임 날짜는 매월 x일로 선정되었습니다.
'''
randomDay = randint(4, 28)
print('오프라인 스터디 모임 날짜는 매월', randomDay, '일로 선정되었습니다.')
print('오프라인 스터디 모임 날짜는 매월 ' + str(randomDay) + '일로 선정되었습니다.')

'프로그래밍 > Python' 카테고리의 다른 글

리스트, 딕셔너리, 튜플, 세트  (0) 2022.03.09
조건문과 반복문  (0) 2022.03.08
문자열  (0) 2022.03.04
자료형  (0) 2022.03.03

* 유튜브 나도코딩의 동영상을 시청하며 작성한 개인 학습용 글입니다.

* 나도코딩 유튜브 : https://www.youtube.com/channel/UC7iAOLiALt2rtMVAWWl4pnw

 

 자료형

숫자형
print(5)
print(-10)
print(3.14)
print(1000)
print(5+3)
print(2*8)
print(3*(3+1))

 

문자형
print('풍선')
print("나비")
print('ㅋㅋㅋㅋㅋㅋㅋ')
print('ㅋ'*7)

 

 

Boolean(True / False)
print(5 > 10)
print(5 < 10)
print(True)
print(not True) # False

 not 연산자를 통해 뒤에 오는 값을 역으로 변환 시킬 수 있다. 

 

변수
animal = '강아지'
name = '연탄이'
age = 4
hobby = '산책'
is_adult = age >= 3

 JavaScript와는 달리(그나마 좀 배운 것이 JavaScript 밖에 없다), var이나 let, const와 같은 선언이 필요 없다.

 

print('우리집 ' + animal + '의 이름은 ' + name + '예요')
print(name + '는 ' + str(age) + '이며, ' + hobby + '을 아주 좋아해요')
# 파이썬에서 정수형을 문자형으로 출력할 때는 str을 붙여줘야 한다.

print(name + '는 어른일까요? ' + str(is_adult))
# Boolean형도 마찬가지로 문자형으로 출력하려면 str을 붙여줘야 한다.

 JavaScript에서는 위에서 str을 사용한 것처럼 정수형을 문자형으로 바꿔줄 필요가 없으나, Python에서는 필요하다. 

Boolean형도 마찬가지로 str을 써서 문자형으로 바꿔줘야 한다.

 

hobby = '낮잠'
print(name, '는', age, '이며 ', hobby, '을 아주 좋아해요')
# 연탄이 는 4 이며  낮잠 을 아주 좋아해요

 Python에서는 그냥 변수 재할당이 가능하다.

 

 그리고 쉼표를 사용해서 문자열들을 붙여줄 수 있다. 이 때 각 요소의 뒤에 공백 1칸이 추가된다. 또한, 쉼표를 사용하여 문자열을 출력할 때는, 정수형이나 Boolean형에 str을 쓰지 않아도 된다.

 

퀴즈
Quiz) 변수를 이용하여 다음 문장을 출력하시오.

변수명
 : station

변수값
 : '사당', '신도림', '인천공항' 순서대로 입력

출력 문장
 : xx행 열차가 들어오고 있습니다.
station1 = '사당'
station2 = '신도림'
station3 = '인천공항'
sentence = '행 열차가 들어오고 있습니다.'

print(station1 + sentence)
print(station2 + sentence)
print(station3 + sentence)

'프로그래밍 > Python' 카테고리의 다른 글

리스트, 딕셔너리, 튜플, 세트  (0) 2022.03.09
조건문과 반복문  (0) 2022.03.08
문자열  (0) 2022.03.04
연산자  (0) 2022.03.03

+ Recent posts