yumyum

[Python] 조건문 본문

ICT기반 클라우드 네트워크 해킹 침해대응전문가/Python

[Python] 조건문

yumyum0603 2023. 10. 24. 11:29

1. 리스트

# 리스트
# 여러개의 변수를 하나로 묶어준 것
# 단독으로 사용하기 보단 for, while 반복문과 함께 응용해서 사용함
# 변수를 사용하는것과 거의 동일함
# 리스트의 이름 짓는것도 변수와 동일함

# 자바, c "배열", "array"
# 배열은 한가지 데이터 형식만 만들 수 있음
# 리스트는 여러가지 데이터 형식도 하나의 리스트로 묶을 수 있음

"""형식

aa = [10,20,30,40]

"""

# 단순 변수 사용
# 4개 변수 합 구하기
a,b,c,d = 0,0,0,0
sum = 0
a = int(input("1번째 숫자 : "))
b = int(input("2번째 숫자 : "))
c = int(input("3번째 숫자 : "))
d = int(input("4번째 숫자 : "))

sum = a + b + c + d
print(sum)

# 리스트 사용
# 첨자(자리값)를 이용해 리스트의 항목을 변수처럼 사용
a = [0,0,0,0]
sum = 0
# 사용할 변수의 갯수만큼 리스트의 자리 미리 확보
# 항목 갯수가 변경(늘거나, 줄거나) 리스트 함수 따로 사용해야함


a[0] = int(input("1번째 숫자 : "))
b[1] = int(input("2번째 숫자 : "))
c[2] = int(input("3번째 숫자 : "))
d[3] = int(input("4번째 숫자 : "))

sum = a[0]+a[1]+a[2]+a[3]
print(sum)

## 리스트의 항목 갯수 늘리는 함수
aa = []
print(aa)

aa.append(80)
print(aa)
aa.append(30)
print(aa)
# =>
# []
# [80]
# [80, 30]


# 항목갯수 100개짜리 리스트 만들기
aa = []
for i in range (0,100) :
    aa.append(i)

print(len(aa))
# =>100

# len = length 의 약자, 리스트/문자열 등등 갯수 확인
# 단독으로 사용하기 보단 for, while 반복문과 함께 응용해서 사용함

# 숫자 4개 입력받아 합 구하기
aa = [0,0,0,0]
for i in range(0,4) :
    aa[i] = int(input(str(i+1) + "번째 숫자 : "))
    sum = sum + aa[i]

print("합계 : %d" % sum )

# =>
# 1번째 숫자 : >? 10
# 2번째 숫자 : >? 20
# 3번째 숫자 : >? 30
# 4번째 숫자 : >? 15
# 합계 : 3342

# Quiz) 갯수 한정 x, q 누르면 종료
#   종료시 리스트 항목 합과 갯수 출력
#   숫자 입력받기
sum= 0
j = []

while True :
    a = input("숫자를 입력하시오 : ")
    if a == "q" :
        print("종료, 합계 : %d 갯수 : %d" % (sum , len(j)))
        break

    else :
        k = int(a)
        j.append(k)
        sum = sum + k

# =>
# 숫자를 입력하세요 :>? 6
# 숫자를 입력하세요 :>? 7
# 숫자를 입력하세요 :>? 8
# 숫자를 입력하세요 :>? q
# 종료합니다. 합 : 21 갯수 : 3

# 리스트 생성과 초기화
aa = []                         # 리스트 초기화
bb = [10,20,30]                 # 리스트에 정수 사용
cc = ['파이썬','리스트','good']   # 문자열 사용
dd = [10,20,'파이썬',aa]         # 숫자, 문자, 리스트 //  항목으로 포함 시킬 수 있음
print(dd)

# 리스트 생성 후 첨자를 통해 접근
# 자리값을 의미하는 첨자는 양수, 음수 사용가능
# 음수를 사용할 때 오른쪽부터 -1이 첫번째 항목
# 양수를 사용할 때 왼쪽부터 0이 첫번째 항목

aa = [10,20,30,40,50,60]
print(aa[0])
print(aa[-1])

# =>
# 10
# 60

#  첨자에 콜론(:) 사용 (범위지정)
# aa[시작값:끝값+1]
print(aa[1:3])
print(aa[2:5])

# =>
# [20, 30]
# [30, 40, 50]

# 시작값 안쓰면 처음부터, 끝값 안쓰면 끝까지
print(aa[:3])
print(aa[2:])

# =>
# [10, 20, 30]
# [30, 40, 50, 60]

# Quiz) for, while 1~100 3의 배수를 리스트에 넣자
# 리스트1 => 순차 3,6,9,12,,,,,,, // 리스트2 => 역순  99,96,93,,,,,

aa = []
bb = []

for i in range (3,101,3) :
    aa.append(i)
print(aa[0:33])

for k in range (99,2,-3) :
    bb.append(k)

print(bb[0:33])

# =>
# [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
# [99, 96, 93, 90, 87, 84, 81, 78, 75, 72, 69, 66, 63, 60, 57, 54, 51, 48, 45, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3]

## 리스트 연산
aa = ['오','지','한']
bb = ['지','각','쟁','이']

print(aa + bb)
# =>
# ['오', '지', '한', '지', '각', '쟁', '이']
print(aa*4 + bb)
# =>
# ['오', '지', '한', '오', '지', '한', '오', '지', '한', '오', '지', '한', '지', '각', '쟁', '이']

## 리스트 항목 안의 값 바꾸기
aa = ['오','지','한']
aa[1] = '대'
print(aa)

aa[1:] = ['북','한']
print(aa)

aa[2] = ['지','각','쟁','이']
print(aa)
# =>
# ['오', '대', '한']
# ['오', '북', '한']
# ['오', '북', ['지', '각', '쟁', '이']]

# 리스트의 항목 값 삭제
aa[2] = []
print(aa)
# =>
# ['오', '대', '한']
# ['오', '북', '한']
# ['오', '북', ['지', '각', '쟁', '이']]
# ['오', '북', []]
del(aa[2])
print(aa)
# =>
# ['오', '대', '한']
# ['오', '북', '한']
# ['오', '북', ['지', '각', '쟁', '이']]
# ['오', '북', []]
# ['오', '북']

del(aa[0:])
print(aa)
# =>
# []

## 리스트 함수
list = [10,30,40,20]
print(list)

# => [10,30,40,20]

list.append(50)
print(list)
# => [10, 30, 40, 20, 50]
# 리스트에 항목 값 추가

list.pop()
print(list)
# => [10, 30, 40, 20]
# 리스트에 마지막 항목 삭제

list.sort()
print(list)
# => [10, 20, 30, 40]
# 정렬
# 리스트의 데이터가 변형 됨

list.reverse()
print(list)
# => [40, 30, 20, 10]
# reverse 내림차순

print(list.index(20))
# => 2
# index : 항목의 위치값 출력

list.insert(2,222)
print(list)
# => [40, 30, 222, 20, 10]
# insert (자리값, 항목값)
# 원하는 위치에 원하는 값 입력, 전 값은 오른쪽으로 민다

list.remove(222)
print(list)
# => [40, 30, 20, 10]
# 리스트에서 항목 값 제거

list.extend([55,555,1234,555,55])
print(list)
# => [40, 30, 20, 10, 55, 555, 1234, 555, 55]
# extend 리스트 뒤에 다른 리스트를 항목으로 추가, 확장의 개념

print(list.count(55))
# => 2
# 항목이 리스트안에 몇개 있는지 숫자 출력

print(len(list))
# =>9
# 리스트, 문자열 사용가능, 항목값이나 문자열의 길이 확인

# Quiz) 한쪽이 막혀있는 주차장 만들기
#       5자리(리스트의 항목값이 5)
#       1. 주차 2. 출차 3. 끝
#       주차, 출차 => 자기 차번호 4자리 입력
#       끝 => 현재 주차장에 있는 차 대수
#       주차장에 0 // 출차 x      주차장에 5 // 주차 x
#       기능 실행시 주차장 리스트 출력


parking = []
a,j,k=0,0,0

while True :

    a = int(input("주차 : 1 출차 : 2 종료 : 3 입력"))
    if a == 1 :
        if len(parking) >= 5 :

            print("주차 공간이 없습니다.")
            continue
        j = int(input("차 번호 4자리를 입력하세요 : "))
        parking.append(j)
        print("현재 주차되어 있는 차량")
        print(parking)

    elif a == 2 :
        if len(parking) == 0 :
                print("출차할 차량이 없습니다")
                continue
        k = int(input("출차할 차량 번호를 입력하세요"))
        if parking.index(k) == len(parking)-1 :
            parking.pop(k)
            print("현재 주차되어 있는 차량")
            print(parking)

        else :
            print("현재 출차할 수 있는 차량이 아닙니다")
            continue

    elif a == 3 :
        print("주차시스템을 종료합니다")
        break

## 중첩 리스트, 2중 리스트

list1 = []
list2 = []
val = 1

for i in range(0,3) :
    for k in range (0,4) :
        list1.append(val)       # 작은 리스트 하나씩 값 추가
        val = val + 1           # 값을 1씩 증가
        list2.append(list1)     # 큰 리스트에 작은 리스트 항목으로 추가
    list1=[]                    # 1234 초기화, 5678 초기화 (작은리스트)

for i in range (0,3) :
    for k in range (0,4) :
        print("%3d" % list2[i][k], end="") # end = "" : 이어쓰기

    print("") # 위에서 설정한 이어쓰기 끊는곳


# Quiz) 3의 배수 출력 1~100
#       1의자리, 10의자리, 20자리 // 줄 끊어서 출력
#       출력물에 [] 안보이게 ㄱㄱㄱ

for i in range(1,101) : # 1부터 100까지 나열
    if i % 10 == 0 : # 10의 자리 변경될때마다 줄바꿈
        print("")  # 프린트 되는것은 줄바꿈 뿐!!
    if i % 3 == 0 : # 3의 배수끼리 이어쓰기
        print(i, end = " ") # 3의 배수만 프린트 됨! + 이어쓰기

        # =>
        # 3 6 9
        # 12 15 18
        # 21 24 27
        # 30 33 36 39
        # 42 45 48
        # 51 54 57
        # 60 63 66 69
        # 72 75 78
        # 81 84 87
        # 90 93 96 99

#### 튜플
# 리스트 = []
#튜플 = ()
# 튜플 값을 수정할 수 없어 읽기 전용으로 사용한다
# 성별 = (남성, 여성) // 서울시구목록 = (강남구, 서초구, 양천구, 강서구,,,)

tt1 = (10,20,30)
print(tt1)

tt2 = 10,20,30
print(type(tt2))
print(tt2)
# =>
# <class 'tuple'>
# (10, 20, 30)

# 변수에 여러개의 값을 넣으면 자동으로 튜플 생성
# print 결과가 ()로 묶인거 보고 확인

tt3 = (10,)
print(tt3)
# => (10,)
tt4 = 10,
print(tt4)
# => (10,)
#  항목이 1개인 튜플 생성 하는 법

tt1.append(40)
# 튜플은 읽기 전용이라서 항목 추가, 삭제, 수정 불가능

tt1 = (10,20,30)
print(tt1[1])
# => 20
print(tt1[1]+tt1[0]+tt1[2])
# => 60
# 리스트 자리값(첨자)사용법과 동일하다

tt2 = ('A','B')
print(tt2[0] + tt2[1])
# => AB
# 문자 연산 확인

tt = (10,20,30,40)
ll = list(tt)

print(tt)
# => (10, 20, 30, 40)
print(ll)
# => [10, 20, 30, 40]

ll.append(50)
print(ll)
# => 리스트로 바꿔서 50 추가
tt = tuple(ll)
print(tt)
# => 다시 튜플로 바꾸기

# Quiz) '고객정보' 튜플 만들기
#       ([회원번호, 이름, 전화번호], [회원번호, 이름, 전화번호], [회원번호, 이름, 전화번호], [])
#       회원가입, 회원정보수정, 회원삭제 기능 추가
#       회원번호는 5자리 확보 후 자동으로 1씩 증가
#       같은 전화번호 회원시 가입 불가

members = {}  # 회원 정보를 저장할 딕셔너리


def generate_member_number():
    # 회원 번호 생성 및 반환
    member_numbers = [int(num) for num in members.keys()]  # members에 있는 회원번호들을 정수로 변환해주는 기능 => 배열
    if not member_numbers:  # 회원번호가 하나도 존재하지 않다면 1로 시작
        next_member_number = 1
    else:
        next_member_number = max(member_numbers) + 1  # 회원번호를 자동으로 1씩 추가해줌
    return str(next_member_number).zfill(5)  # 5자리로 만들어줌 ex) 1이면 -> 00001


while True:
    print("1. 회원가입 2. 회원정보수정 3. 회원삭제 4. 회원목록 5. 종료")
    choice = input("원하는 작업을 선택하세요: ")

    if choice == "1":
        name = input("이름을 입력하세요: ")
        phone = input("전화번호를 입력하세요: ")
        member_number = generate_member_number()
        members[member_number] = {"이름": name, "전화번호": phone}
        print(f"회원번호 {member_number}로 회원가입이 완료되었습니다.")

    elif choice == "2":
        member_number = input("수정할 회원의 회원번호를 입력하세요: ")
        if member_number in members:
            name = input("새로운 이름을 입력하세요: ")
            phone = input("새로운 전화번호를 입력하세요: ")
            members[member_number] = {"이름": name, "전화번호": phone}
            print(f"{member_number}번 회원 정보가 수정되었습니다.")
        else:
            print("해당 회원 번호를 찾을 수 없습니다.")

    elif choice == "3":
        member_number = input("삭제할 회원의 회원번호를 입력하세요: ")
        if member_number in members:
            del members[member_number]
            print(f"{member_number}번 회원 정보가 삭제되었습니다.")
        else:
            print("해당 회원 번호를 찾을 수 없습니다.")

    elif choice == "4":
        print("회원 목록:")
        for member_number, member_info in members.items(): # => items함수를 사용하면 딕셔너리에 있는 키와 값들의 쌍을 얻을 수 있다
            print(f"회원번호: {member_number}, 이름: {member_info['이름']}, 전화번호: {member_info['전화번호']}")
            # => f = 문자열로 바꿔주는 함수
    elif choice == "5":
        print("프로그램을 종료합니다.")
        break

    else:
        print("잘못된 선택입니다. 1부터 5 사이의 숫자를 입력하세요.")