스쿼드 숙제!
파이썬 고급문법 들가기 전에 확인하는 기본문제
#숙제1
#Hello World를 5번 출력
for i in range(5):
print("Hello World")
#숙제2
#1부터 44까지 짝수만 출력
for i in range(45):
if i % 2 == 0:
print(i)
#숙제3
#1부터 44까지 짝수는 * 4, 홀수 그냥 출력
for i in range(45):
print(i * 4) if i % 2 == 0 else print(i)
#숙제4
#Hello World 4번 출력
print("Hello World\n" * 4)
# Hello World
# Hello World
# Hello World
# Hello World
문자열도 사칙연산을 통해 반복 출력 할 수 있다.
그냥 한번 해봤는데 됐음
#숙제5
#numbers = [1, 2, 3, 4, 5]
#순회를 돌아 numbers 요소 출력
numbers = [1, 2, 3, 4, 5]
for num in numbers:
print(num)
#숙제6
#1부터 4까지 합 계산
print(sum(range(1,5)))
#숙제7
#사용자가 입력한 숫자의 구구단을 출력 (input)
#예시)
#입력값 : 3
#아래는 출력 값
#3 * 1 = 3
#3 * 2 = 6
#3 * 3 = 9
#...
def multi_table():
n = int(input("몇단? 숫자입력 : "))
for i in range(1, 10):
print(f"{n} * {i} = {n * i}")
multi_table()
#숙제8
#피보나치 수열에서 14개만 출력
#a, b = 1, 1
#for문
#출력
def fibonacci(n):
a, b = 1, 1
print(a)
for i in range(n-1):
a, b = b, a + b
print(a)
fibonacci(14)
피보나치 수열에서 분명 재귀함수랑 메모이제이션 동적계산법 하면서
복잡하고 어렵게 풀었었는데
이렇게 변수를 스왑해주는 방식으로 쉽게 풀 수도 있었다.
심지어 fibonacci(100) 결과도 시간 걸리지 않고 바로 나왔다.
이렇게 안하는 이유가 뭐지? <생각해보기
#숙제9
#numbers = [11, 22, 33, 44, 55]
#target = 44
#found = False
#44를 찾을 시 찾았다라고 print로 출력
numbers = [11, 22, 33, 44, 55]
target = 44
found = False
for num in numbers:
if num == target:
print("찾았다")
found = True
사실 문제 이해를 잘 못했는데
found의 디폴트 값이 False인것 같아서
target을 찾고 나면 found의 값을 True로 바꿔줬다.
#숙제10
#1부터 100까지 3과 7의 배수만 출력
for i in range(1, 101):
if i % 3 == 0 and i % 7 == 0:
print(i)
#숙제11
#numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#홀수만 새로운 리스트에 추가
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
odd = []
for num in numbers:
if num % 2 == 1:
odd.append(num)
print(odd)
#숙제12 (슬랙에선 10이라고 적힘)
#사용자가 입력한 숫자를 받아, 팩토리얼 계산
def factorial():
num = int(input("its 팩토리얼 : "))
answer = 1
while num:
answer *= num
num -= 1
return answer
print(factorial())
#숙제13 (슬랙에선 11이라고 적힘)
#아래 리스트에서 최솟값과 최댓값 찾기
#numbers = [44, 12, 35, 96, 46, 87, 2, 63]
def find_min(numbers):
min = 1e9
for num in numbers:
if min > num:
min = num
return min
def find_max(numbers):
max = 0
for num in numbers:
if max < num:
max = num
return max
ex = [44, 12, 35, 96, 46, 87, 2, 63]
print(find_min(ex))
print(find_max(ex))
#-------------------------------------------------
numbers = [44, 12, 35, 96, 46, 87, 2, 63]
print(max(numbers))
print(min(numbers))
최소값과 최대값을 찾으려면
파이썬 내장함수 max(), min()을 사용하면 된다.
근데 내가 아직 저 함수들의 원리를 잘 모르기 때문에
내장함수 없이도 풀어봤다.
1e9는 1 X 10의 9 거듭제곱, 즉 10억을 의미한다.
#숙제14 (슬랙에선 12이라고 적힘)
#아래 리스트의 요소를 뒤에서부터 출력
#numbers = [44, 12, 35, 96, 46, 87, 2, 63]
def reverse(list):
reversed_list = reversed(list)
for i in reversed_list:
print(i)
numbers = [44, 12, 35, 96, 46, 87, 2, 63]
reverse(numbers)
#--------------------------------------------
def reverse(list):
for i in range(len(list)-1, -1, -1):
print(list[i])
numbers = [44, 12, 35, 96, 46, 87, 2, 63]
reverse(numbers)
#숙제15 (슬랙에선 13이라고 적힘)
#회문(palindrome)일 경우 회문입니다 출력, 아닐 경우 아님 출력
#회문 예: 토마토, 구로구, ....등등
#hint: 인덱싱?????
def palindrome():
word = input("회문인지 알려줌 : ")
if word == word[::-1]:
print("회문입니다")
else:
print("아님")
palindrome()
#------------------------------------------
def palindrome():
word = input("회문인지 알려줌: ")
reversed_word = ''.join(reversed(word))
if word == reversed_word:
print("회문입니다")
else:
print("아님")
palindrome()
문자열[ : : -1] 를 하면
문자열이 끝에서부터 돌아서 반전된 문자열이 반환된다.
reversed()함수를 사용하면
반전된 문자열이 아니라 객체 자체가 반환되기 때문에
''.join 을 통해 공백을 기준으로 묶어줘야 문자열이 된다.
#숙제16 (슬랙에선 14이라고 적힘)
#사용자의 입력을 숫자를 입력 받아, 0, 양수, 음수 판별
def num_sign():
num = int(input("숫자 입력 : "))
if num > 0:
print("양수입니다")
elif num < 0:
print("음수입니다")
else:
print("0입니다")
num_sign()
#숙제17 (슬랙에선 15이라고 적힘)
#사용자에게 3개의 숫자를 받고, 그 중 가장 큰 수 출력
def find_max():
numbers =[]
for i in range(3):
num = int(input(f'{i+1}번째 숫자 입력 : '))
numbers.append(num)
max_num = -1e9
for num in numbers:
if max_num < num:
max_num = num
print(max_num)
find_max()
마찬가지로 내장함수 max()없이 풀었는데
-1e9는 -10억이다
#숙제18 (슬랙에선 16이라고 적힘)
#사용자에게 요일을 받고, 그 요일이 주말이면 주말입니다로 출력
def check_day():
day = input("오늘 몇요일? : ")
if day[0] in ['월', '화', '수', '목', '금']:
print("ㅠㅠㅠㅠ")
elif day[0] in ['토', '일']:
print("주말입니다")
check_day()
#숙제19 (슬랙에서 17이라고 적힘)
#0부터 100사이의 점수를 받아 학점 출력
#90이상 A
#80이상 B
#70이상 C
#60이상 D
#60미만 F
def check_grade():
score = int(input("점수입력 : "))
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
elif score >= 60:
print("D")
else:
print("F")
check_grade()
#숙제20 (슬랙에선 18이라고 적힘)
#숙제19와 동일 but 조건 추가
#만약에 100초과의 점수를 받을 경우, 바보라고 출력
def check_grade():
score = int(input("점수입력 : "))
if score > 100:
print("바보")
elif score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
elif score >= 60:
print("D")
else:
print("F")
check_grade()
#숙제21 (슬랙에선 19이라고 적힘)
#숙제20와 동일 but 조건 추가
#만약에 100초과의 점수를 받을 경우 바보라고 출력, 0미만일 경우 멍청이라고 출력
def check_grade():
score = int(input("점수입력 : "))
if score > 100:
print("바보")
elif score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
elif score >= 60:
print("D")
elif score >= 0:
print("F")
else:
print("멍청이")
check_grade()
#숙제22 (슬랙에선 20이라고 적힘)
#id = admin
#password = 1234
#로그인 성공 시, 로그인 성공 출력
#로그인 실패 시, 로그인 실패 출력
def log_in():
users = {}
users['admin'] = '1234'
id = input("ID 입력 : ")
password = input("PASSWORD 입력 : ")
if id in users:
if password == users[id]:
print('로그인 성공')
else:
print('비밀번호 틀렸음')
else:
print('로그인 실패. 아이디 없음')
log_in()
실제로 로그인할 때를 떠올려보면서
users 딕셔너리에 회원 정보를 키-밸류 형태로 저장하고
아이디o, 비번o : 로그인 성공
아이디o, 비번x : 비밀번호 틀렸음
아이디x : 로그인실패. 아이디 없음
을 출력하게 했다.
#숙제23 (슬랙에선 21이라고 적힘)
#사용자에게 3개의 숫자를 받아, 오름차순 정렬하여 출력
def sort_num():
numbers = []
for i in range(3):
numbers.append(int(input(f'{i+1}번째 숫자 입력 : ')))
print(sorted(numbers))
sort_num()
#숙제24 (슬랙에선 22이라고 적힘)
#숙제21과 동일 but 조건 추가
#5개의 숫자를 받은 뒤 그 평균을 구하고, 그에 따른 등급 출력
def check_grade():
scores = []
for i in range(5):
scores.append(int(input(f'{i+1}번째 점수입력 : ')))
aver = sum(scores) / len(scores)
print(f'평균점수 : {aver}')
if aver > 100:
return "바보"
elif aver >= 90:
return "A"
elif aver >= 80:
return "B"
elif aver >= 70:
return "C"
elif aver >= 60:
return "D"
elif aver >= 0:
return "F"
else:
return "멍청이"
print(f'너의등급 : {check_grade()}')
# 숙제 - 25
# number = [1, 4, 4, 4, 4, 4, 4]에 중복 제거 해주세요
number = [1, 4, 4, 4, 4, 4, 4]
print(set(number))
# 숙제 - 26
# number = [1, 4, 4, 4, 4, 4, 4. 5]에서 5 제거 후 출력해주세요
number = [1, 4, 4, 4, 4, 4, 4, 5]
number.remove(5)
print(set(number))
# 숙제 - 27
# number = [1, 2, 3, 4, 5]에서 3 제거 후 나머지 요소의 평균 값 구해주세요
number = [1, 2, 3, 4, 5]
number.remove(3)
print(sum(number) / len(number))
# 숙제 - 28
# number = [1, 2, 3, 4, 5]에서 뒤의 3개만 출력해주세요 후 귀차나 슬슬
number = [1, 2, 3, 4, 5]
print(number[-3:])
# 숙제 - 29
# number = [1, 4, 4, 4, 4, 4, 4. 5]에서 중복된 요소의 개수 출력
number = [1, 4, 4, 4, 4, 4, 4, 5]
set_num = list(set(number))
print(len(number) - len(set_num))
# 숙제 - 30
# number = [1, 4, 4, 4, 4, 4, 4. 5]에서 요소 4의 위치(인덱스)를 출력하세요
number = [1, 4, 4, 4, 4, 4, 4, 5]
for i, num in enumerate(number):
if num == 4:
print(i)
# 숙제 - 31
# list_1 = [1, 2, 3]
# list_2 = [4, 5, 6]
# 위의 두개의 리스트를 하나로 합쳐주세요
list_1 = [1, 2, 3]
list_2 = [4, 5, 6]
print(list(set(list_1) | set(list_2)))
# 숙제 - 32
# number = [[1, 2], [3, 4], [5, 6]]의 모든 요소를 더해주세여
number = [[1, 2], [3, 4], [5, 6]]
total = 0
for i in number:
for j in i:
total += j
print(total)
# 숙제 - 33
# a = 11
# b = 22
# 위의 변수를 선언 후 a의 값을 22, b의 값을 11로 교환
a = 11
b = 22
a, b = b, a
print(a)
print(b)
# 숙제 - 34
# 값 3, 6, 9를 a, b, c 변수들에게 각각 할당해라
a, b, c = 3, 6, 9
print(a)
print(b)
print(c)
# 숙제 - 35
# (44, 33, 22, 11)의 튜플을 리스트로 변환 후 출력
tuple = (44, 33, 22, 11)
print(list(tuple))
# 숙제 - 36
# 리스트 [11, 22, 33, 44]에 11의 값을 110으로 변경
# 튜플 (11, 22, 33, 44)에 11의 값을 110 변경 시도
list = [11, 22, 33, 44]
new_list = []
for i in list:
if i == 11:
new_list.append(110)
else:
new_list.append(i)
print(new_list)
#---------------------------------------
tuple = (11, 22, 33, 44)
new_tuple = ()
for i in tuple:
if i == 11:
new_tuple.append(110)
else:
new_tuple.append(i)
print(new_tuple)
# AttributeError: 'tuple' object has no attribute 'append'
# 숙제 - 37
# 리스트 [44, 33, 22, 11]을 튜플로 변환하고, 55를 추가 시도해보아라.
# 안 된다면 그 이유는?
list = [44, 33, 22, 11]
tuple = tuple(list)
# tuple.append(55)
# AttributeError: 'tuple' object has no attribute 'append'
print(dir(tuple))
# 튜플 객체에 append() 메서드가 없다ㅜ
# 숙제 - 38
# 리스트 튜플 차이점은?
# 함수 호출 시 인자를 전달 할 때 함수에서 데이터를 수정하고 싶지 않을 때, 어떤 자료형을 쓰면 되나요?
list = [리스트]
가변적임. 요소 추가, 제거, 변경 가능
tuple = (튜플)
불변적임. 요소 추가, 제거, 변경 불가능
튜플로 인자를 전달하면 함수 내에서 데이터 수정을 시도할 때 Error 발생함
# 숙제 - 39
# 리스트, 튜플 중 메모리를 적게 쓰는 것은 무엇이고 그 이유는?
튜플이 메모리 더 적게씀. 수정이 불가하니 추가 메모리 할당이 필요없기 때문. + 관리 구조가 간단하다고 한다.
리스트는 가변성 지원을 위해 추가 메모리 공간을 할당받아야함. + 내부적으로 더 복잡한 메모리 관리 구조를 갖고 있다고 함.
딕셔너리, 함수, 클래스 문제 더 추가될 예정
'스쿼드' 카테고리의 다른 글
[스쿼드] 캡슐화 (0) | 2024.08.06 |
---|---|
[스쿼드] Matrix 만들기 (0) | 2024.08.05 |
[스쿼드] 계산기 만들기 (0) | 2024.08.02 |
[Python] 파이썬 문법 기본문제 (0) | 2024.07.31 |
[Python] 파이썬 문법 기본문제 (0) | 2024.07.30 |