경기도미래기술학교 AI개발자 부트캠프 6일차 TIL - 반복문 등 연습. 튜플

2023. 5. 15. 18:14python

반응형

 

 

오늘은 지난 시간에 배웠던 것을 간단하게 복습을 하고 역시 간단한 문제들을 풀었다.

저번 주에 잠깐 봤던 isdigit()를 input에 활용했다. 이게 사실 전에 검색했을 때 잠깐 봤던 것인데 어떻게 활용하는 것인지를 잘 몰라서.

 

range가 좀 헷갈린다.

 

파이썬 3부터는 range가 객체로 바뀌었다고 한다. 파이썬 2.7에서는 range가 리스트를 만드는데 파이썬3 버전은 range객체를 만든다고 한다.

 

x = [49,-17,25,102,8]

for i in x:
    print(i*10, end=' ')

이렇게 end를 써서 가로 정렬 하는 것도 알아두자.

 

for i in range(10,0,-1):
    print(i*"*")


for i in reversed(range(10)):
    print(i*"*")

역순으로 하는 것도 잊지 말자.

 

import random

randomNum = random.randint(1, 30)

while True:
    myNum = input('맞춰보세요.')
    if not myNum.isdigit():
        print('숫자가 아닙니다.')
        continue
    myNum=int(myNum)
    if myNum == randomNum:
        print('정답입니다.')
        break
    if myNum > randomNum:
        print('내 숫자가 더 큽니다.')
    else:
        print('내 숫자가 더 작습니다.')

input 값에 숫자값이 들어온 것인지 판별하기 위해 쓰는 메소드라고 할 수 있다. 이 외에도

isalnum,islower,isidentifier,isnumeric,isdecimal 등이 있다. 찾아보니 생각보다 다양해서 나중에 써먹을 수 있을 것이다.

 

isnumeric과 isdigit는 둘 모두 숫자를 인식하는 메서드지만 차이가 있다.

isnumeric은 유니코드 기준에서 숫자로 인식하는 애들은 숫자로 판단한다. 따라서 로마자 같은 것도 숫자로 인식한다. 또, 소수점, 분수, 지수 등도 숫자로 인식한다.

반면 isdigit는 오로지 아라비아 숫자(1~9)까지 인정한다. 또, 소수점, 분수, 지수 등은 인식하지 않는다.

 

time 모듈에 대해서도 배웠다. 예제는 chatGPT 참고했다.

 

import time

# 현재 시간을 출력합니다. 현재 시간을 기준으로 1970년 1월 1일 이후 경과한 시간(초 단위)을 반환합니다. POSIX 시간이라고도 불립니다.
current_time = time.time()
print("Current time:", current_time)

# 현재 시간을 읽기 쉬운 형식으로 출력합니다. 현재 시간을 문자열로 변환하여 반환합니다. 읽기 쉬운 형식으로 시간을 표시합니다.
readable_time = time.ctime()
print("Readable time:", readable_time)


# 현재 시간을 UTC로 표시된 시간 정보로 출력합니다.
utc_time = time.gmtime()
print("UTC time:", utc_time)

# 현재 시간을 로컬 시간대로 표시된 시간 정보로 출력합니다.
local_time = time.localtime()
print("Local time:", local_time)

# 지정된 형식으로 시간을 포맷팅한 문자열을 출력합니다.
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
print("Formatted time:", formatted_time)

# 2초 동안 프로그램을 일시적으로 멈춥니다.
print("Sleeping for 2 seconds...")
time.sleep(2)
print("Done sleeping.")

sleep이 좀 신기했다. 2초동안 멈춘다음 다시 실행하는 것이다.

 

enumerate에 대해서도 배웠다. 사실 이거는 다른 어느 곳에서는 쓰지 않았다. 아무튼 인덱스값과 벨류값이 같이 나오는 방식이다.

 

listTest = ['lisa', 'bart', 'megi']
for idx, value in enumerate(listTest,start=1):
    print(idx,value)

 

이런 식으로 사용한다. start=1이라고 설정하면 인덱스가 1부터 시작한다.

 

langs = ['한국어', '중국어', '영어']
for index, value in enumerate(langs, start=1):
    print(index, value)

while True:
    inputLangs = input('언어를 입력하세요: ')
    if not inputLangs.isdigit():
        print('숫자를 입력하세요.')
        continue
    inputLangs = int(inputLangs)
    if inputLangs > len(langs) or inputLangs < 1:
        print('다시 입력하세요')
        continue
    print(langs[inputLangs - 1])
    break

 

연습문제에서 요구한 것을 만들었다. 근데 enumerate와 while문을 뭔가 같이 사용할 수 있는 방법은 생각하지 못했다. 만약 된다면 굳이 inputLangs에 -1을 안해도 되지 않을까. 아무튼 패스.

 

a= list(range(1,21))
list_369=[]
for i in range(len(a)):
    c=str(a[i])
    if c.find('3')>=0 or c.find('6')>=0 or c.find('9')>=0:
    #if "3" in number_str or "6" in number_str or "9" in number_str :
        list_369.append('짝')
    else:list_369.append(c)
print(list_369)

 

내가 in은 익숙하지 않아서 잘 안쓰는데 저거도 한 번 써봐야겠다.

 

그다음은 튜플이다. 튜플은 불변하는 리스트 형식이라고 예전에 짧막하게 적었다. 그리고 패킹, 언패킹이라고 있다. 이거를 

 

x,y,z=list 로 한다고 해도 리스트 인덱스에 저장된 요소 리스트는 순서대로 저장이 된다. 즉 y,x,z로 정의한다고 해도 x값에는 0의 값 y값에는 1의 값.. 이런 식으로 저장이 된다. 희한하다.

 

items = ("ruler", "pen", "eraser")
print(type(items))

nums = 1, 2, 3
print(type(nums))

 

그리고 튜플은 ,로만 써도 튜플이 된다. 그리고 타입은 튜플로 하고싶은데 값이 하나밖에 없는 경우는 int로 처리될 것이다. 그래서 (1,) 이런 식으로 콤마를 붙여야 한다.

 

list와 tuple 이런 애들은 연속적으로 사용되는 애들이다. 모두 시퀀스 타입의 일종이라고 보면 된다.

728x90