스쿼드

[Python] 파이썬 문법 기본문제

kinggoddino 2024. 7. 29.

스쿼드 숙제!

파이썬 고급문법 들가기 전에 확인하는 기본문제

 

#숙제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