TIL | 파이썬 기초 # 8

vel.Ash·2022년 3월 21일
0
post-thumbnail

파이썬 데이터의 비밀

Aliasing

*파이썬 자료형

  • mutable : dict, list
  • immutable : tuple, str, int, bool, float
    1.예시
x = 5
y = x
y = 3
print(x)
print(y)
5
3

2.예시

x = [2, 3, 5, 7, 11]
y = x  # y와 x는 alias(가명)
y[2] = 4
print(x)
print(y)
[2, 3, 4, 7, 11]
[2, 3, 4, 7, 11]  #  동일한 값 나온다! 

3.예시

x = [2, 3, 5, 7, 11]
y = list(x)   # 새로운 리스트 y를 만듬, x의 alias가 아님. 
y[2] = 4
print(x)
print(y)
[2, 3, 5, 7, 11]
[2, 3, 4, 7, 11]

리스트와 문자열

리스트와 문자열은 구조적으로 비슷해서 많은 기능이 비슷하게 가능함.
<비슷한 점>

1.인덱싱

# 알파벳 리스트의 인덱싱
alphabets_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print(alphabets_list[0])
print(alphabets_list[1])
print(alphabets_list[4])
print(alphabets_list[-1])

# 알파벳 문자열의 인덱싱
alphabets_string = 'ABCDEFGHIJ'
print(alphabets_string[0])
print(alphabets_string[1])
print(alphabets_string[4])
print(alphabets_string[-1])
A
B
E
J
A
B
E
J

2.for 반복문

# 알파벳 리스트의 반복문
alphabets_list = ['A', 'S', 'H', 'H', 'S', 'A']
for alphabet in alphabets_list:
    print(alphabet)

# 알파벳 문자열의 반복문
alphabets_string = 'ASHHSA'
for alphabet in alphabets_string:
    print(alphabet)
A
S
H
H
S
A

A
S
H
H
S
A

3.슬라이싱(Slicing)

# 알파벳 리스트의 슬라이싱
alphabets_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print(alphabets_list[0:5])
print(alphabets_list[4:])
print(alphabets_list[:4])

# 알파벳 문자열의 슬라이싱
alphabets_string = 'ABCDEFGHIJ'
print(alphabets_string[0:5])
print(alphabets_string[4:])
print(alphabets_string[:4])
['A', 'B', 'C', 'D', 'E']
['E', 'F', 'G', 'H', 'I', 'J']
['A', 'B', 'C', 'D']
ABCDE
EFGHIJ
ABCD

4.덧셈 연산

# 리스트의 덧셈 연산
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
list3 = list1 + list2
print(list3)

# 문자열의 덧셈 연산
string1 = '1234'
string2 = '5678'
string3 = string1 + string2
print(string3)
[1, 2, 3, 4, 5, 6, 7, 8]
12345678

5.len 함수

# 리스트의 길이 재기
print(len(['H', 'E', 'L', 'L', 'O']))

# 문자열의 길이 재기
print(len("Hello, world!"))
5
13

<차이점>

Mutable 리스트 vs Immutable 문자열 (숫자, 불린, 문자열은 모두 immutable)

# 리스트 데이터 바꾸기
numbers = [1, 2, 3, 4]
numbers[0] = 5
print(numbers)
[5, 2, 3, 4]
# 문자열 데이터 바꾸기
name = "codeit"
name[0] = "C"
print(name)
Traceback (most recent call last):
  File "untitled.py", line 3, in <module>
    name[0] = "C"
TypeError: 'str' object does not support item assignment   # 오류 나옴!

자릿수 합 구하기

# 자리수 합 리턴
def sum_digit(num):
    total = 0
    str_num = str(num)
    
    for digit in str_num:
        total += int(digit)

    return total

# sum_digit(1)부터 sum_digit(1000)까지의 합 구하기
digit_total = 0
for i in range(1, 1001):
    digit_total += sum_digit(i)

print(digit_total)
13501

주민등록번호 가리기

1-1

def mask_security_number(security_number):
    # security_number를 리스트로 변환
    num_list = list(security_number)

    # 마지막 네 값을 *로 대체
    for i in range(len(num_list) - 4, len(num_list)):
        num_list[i] = "*"

    # 리스트를 문자열로 복구
    total_str = ""
    for i in range(len(num_list)):
        total_str += num_list[i]

    return total_str
    

# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))

1-2. 조인사용

  • join : 문자열 리스트를 구분자로 결합하여 하나의 문자열로 만들어 줌
    <예시>
units = ["cm", "m", "yard"]
units_to_string = ', '.join(units)

print(type(units_to_string))
print(units_to_string)
<class 'str'>
cm, m, yard

<조인사용 문제답안>

def mask_security_number(security_number):
    num_list = list(security_number)

    # 마지막 네 값을 *로 대체
    for i in range(len(num_list) - 4, len(num_list)):
        num_list[i] = '*'

    # 리스트를 문자열로 복구하여 반환
    return ''.join(num_list)

1-3. 모범답안

def mask_security_number(security_number):
    return security_number[:-4] + '****'

# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))
880720-123****
880720123****
930124-765****
930124765****
761214-235****
761214235****

팰린드롬

<나의 답안>

def is_palindrome(word):
    first_charater = word[:1]
    last_charater = word[-1]
    second_charater = word[1:2]
    last_sec_charater = word[-2]
    if first_charater == last_charater and second_charater == last_sec_charater:
        return("True")
    else:
        return("False")

# 테스트
print(is_palindrome("racecar"))
print(is_palindrome("stars"))
print(is_palindrome("토마토"))
print(is_palindrome("kayak"))
print(is_palindrome("hello"))
True
False
True
True
False

<모범 답안>

def is_palindrome(word):
    for left in range(len(word) // 2):
        # 한 쌍이라도 일치하지 않으면 바로 False를 리턴하고 함수를 끝냄
        right = len(word) - left - 1
        if word[left] != word[right]:
            return False

    # for문에서 나왔다면 모든 쌍이 일치
    return True

# 테스트
print(is_palindrome("racecar"))
print(is_palindrome("stars"))
print(is_palindrome("토마토"))
print(is_palindrome("kayak"))
print(is_palindrome("hello"))
profile
코린이의 개발공부

0개의 댓글