분당아재의 솔직한 블로그

파이썬을 게임하듯 문제를 풀며 공부하는 checkio.org의 Home Section 여섯번째 미션, All The Same 입니다. 

어렵게 머리를 써가며 문제를 풀었는데, 다른 분들이 푼 답안을 보고 깜짝 놀란 미션이기도 합니다. ㅎㅎ

입력으로 주어진 List가 모두 같으면 True, 하나라도 다르면 False를 return 하는 문제입니다.

all_the_same([1, 1, 1]) == True  # List의 값이 모두 1로 같으므로 True

all_the_same([1, 2, 1]) == False # List의 값이 1, 2로 다르므로 False

all_the_same(['a', 'a', 'a']] == True # List의 값이 모두 a로 같으므로 True


주어진 input은 짧지만 어떻게 풀까 고민하다가

List의 0번째 값과 1번째 값을 비교해서 같은지,

List의 1번째 값과 2번째 값을 비교해서 같은지,

이런 순서로 List의 인덱스를 하나씩 증가시키며 그 다음 값과 비교해서 

끝까지 값이 같으면 True를 return하고, 중간에 값이 바뀌면 False를 리턴하는 코드를 작성해서

미션을 풀었습니다. 


그러다가, 다른 답안을 보고 깜짝 놀랐네요.

바로 set()를 사용한 것입니다. 


set()의 특징 중 하나가 바로 중복을 허용하지 않고, 순서를 두지 않는 것인데요.

이 점을 이용해서 중복을 한방에 제거하는 것이였죠.


set([1, 1, 1]) 을 하면 중복을 제거한 {1}이 나옵니다. 

set([1, 2, 1, 2, 3]}을 하면 역시 중복된 값을 합친 후, {1, 2, 3}이 나옵니다.


이런 set()의 특징을 이용하니

all_the_same() 함수에서 return 문 하나로 문제해결이 되네요. 

return len(set(elements)) <= 1

1. set(elements) 문으로 elements 안의 중복을 모두 제거합니다. 

2. len()을 써서 set(elements)의 남은 값을 카운트 합니다.

   여기에서 len() 값이 1이면 elements의 값이 모두 중복이라는 뜻이고,

   len() 값이 2이상이면 elements의 값이 각각 다른 값을 가진 것이죠.

3. len(set(elements)) <=1 문장은 len() 값이 1보다 작은 지 큰 지를 비교하여 True, False를 남겨줍니다.

   따라서, elements의 값이 모두 중복이면 len()이 1이니까 True를 return하고,

   그렇지 않은 경우, False를 return 합니다. 


아주 간단하지만 중복을 제거하는 경우에 유용하게 사용할 수 있는 set() 함수네요.

꼭 기억해야겠습니다. 


Comment +0

유튜브를 보다가 보관하고 싶은 영상이 있으면 다운로드의 욕구를 느끼게 됩니다. 

이럴 때, 다운로드를 하는 방법은 아래 링크와 같습니다. 

유튜브 동영상을 다운로드하는 아주 쉬운 방법


문제는 이렇게 다운로드 하다보면 나도 모르게 광고 영상을 노출하는 쿠키나 코드가 

내 브라우저에 심어지게 됩니다. 

브라우저로 열심히 일을 하다 보면

별안간 튀어나오는 팝업 광고 때문에 놀래거나 짜증나게 되죠.

더구나, 이런 팝업광고는 특히 성인물 광고인 경우가 많죠.

팀원들에게 뭔가 열심히 설명할 때, 딱~하고 성인 광고가 뜨면 참 난감하죠. ㅠㅠ


이런 광고, 특히 savefrom.net에서 심은 광고를 크롬(Chrome)에서 더이상 나오지 않게 하는 방법을 살펴보겠습니다. 


1. 크롬 브라우저 오른쪽 상단의 메뉴버튼을 누르고, 펼쳐진 메뉴에서 '설정'을 선택합니다. 



2. 설정 메뉴에서 '고급'  - '개인정보 및 보안' 메뉴을 선택합니다. 


3. 펼쳐진 메뉴의 아래 부분에 '콘텐츠 설정' 메뉴가 보입니다.

이 메뉴를 선택합니다. 


4. 콘텐츠 설정 메뉴 아래에 '알림'을 선택합니다. 


5. '허용'된 목록에 보면 ko.savefrom.net 이 보입니다.

해당 라인의 오른쪽 끝에 있는 설정 메뉴를 클릭합니다. 


6. '삭제'를 클릭하면 savefrom.net에서 심은 코드가 삭제됩니다.


이제 안심하고 브라우저를 사용하면 됩니다. 

도움이 되었길...




Comment +0

파이썬을 게임하듯 공부할 수 있는 checkio의 22번째 미션 House Password 입니다.

Elementary 섬의 모든 미션을 해결한 후 나오는 첫번째 미션이죠.


주어진 문자열이 암호의 조건에 맞으면 True, 틀리면 False를 리턴하는 미션입니다.

암호의 조건은 문자열의 길이가 10자 이상이고, 적어도 하나의 숫자, 대문자, 소문자를 포함하고 모두 ASCII 문자여야 합니다. 


checkio('A1213pokl') == False # 이 문자열은 길이가 10자 미만이라 False입니다.

checkio('bAse730onE') == True # 이 문자열은 암호 조건에 부합하므로 True입니다.

checkio('asasasasasasasaas') == False # 모두 소문자이므로 False

checkio('QWERTYqwerty') == False # 모두 대문자이므로 False

checkio('123456123456') == False # 모두 숫자이므로 False

checkio('QwErTy911poqqqq') == True # 암호 조건에 부합하므로 True 입니다.


제가 푼 해답의 소스를 하나씩 설명하면


def checkio(data: str) -> bool:

    #replace this for solution

    # 문자열 data의 길이를 내장함수 len을 써서 확인합니다. 

    # len(data) < 10 즉, 문자열의 길이가 10 미만이면, 바로 False를 리턴합니다. 

    if len(data) < 10:

        return False


    # data.isdigit()는 문자열이 모두 숫자로 구성되었는지 확인하는 부분입니다.

    # data가 "1234567890123"과 같이 길이는 10을 넘지만 모두 숫자로 구성되어 있기 때문에

    # 암호의 조건에 맞지 않습니다. 

    # data.isdigit() 가 True 즉, 모두 숫자로 구성된 문자열이면 False를 리턴합니다. 

    if data.isdigit() :

        return False


    # if data.isupper == data: 

    # 이 부분은 data를 모두 대문자(upper)로 변환한 결과가 처음 data와 같다면

    # 그렇다는 말은 data가 처음부터 모두 대문자란 말이죠. 이 경우엔 data에 소문자가 없으므로 False를 리턴

    if data.isupper == data :

        return False


    # if data.islower == data: 

    # 이 부분은 data를 모두 소문자(lower)로 변환한 결과가 처음 data와 같다면

    # 그렇다는 말은 data가 처음부터 모두 소문자란 말이죠. 이 경우엔 data에 대문자가 없으므로 False를 리턴

    if data.islower == data :

        return False


    # 이제.. 위 소스에서 네가지 조건이 걸러졌습니다.

    # 문자열의 길이가 10미만이거나, 문자열이 모두 숫자이거나 모두 대문자이거나 모두 소문자인 것은 

    # return False 되었습니다.

    # 이제 남은 문자열 data에 적어도 숫자 하나가 있는가?만 검사하면 됩니다. 

    # any 함수는 ()안에 들어간 인자 중에서 하나라도 True이면 True를 리턴합니다. 

    # c.isdigit() for c in data 

    # data에서 문자를 하나씩 꺼내어 c에 넣고, 이것은 isdigit()로 검사하여 숫자인가를 확인합니다.

    # data 중에서 하나라도 숫자가 있으면 True가 나오므로 결국 True를 리턴합니다. 

    return any(c.isdigit() for c in data)


처음 이 문제를 풀 때, data.isdigit() 부분을 빼고 왜 안되나 한참 고민했었네요.

모두 숫자일 때도 체크해야 합니다. 


    


Comment +2

  • isuppr() 와 islower() 는 참 거짓을 반환하는 함수이므로 전달받은 data 와의 비교가 불가능합니다.
    때문에 isupper() --> upper()
    islower() --> lower()
    함수로 각각 대체해야 합니다.

안경점에서 보면 초음파 세척기를 구매했습니다.

가격대는 다양하네요.  검색포털에서 "초음파 세척기:로 검색하면 참 많은 종류의 초음파 세척기가 나옵니다. 

처음엔 이런 제품이 개인용으로 판매되는 것인지도 몰랐습니다. 


자는 시간을 빼면 늘 안경을 쓰고, 

안경 코 부분과 렌즈 가장자리에 땀으로 인한 때가 많이 끼는터라 가끔씩 물로 헹구어 닦아내고는 있지만

시원하게 제거되지는 않았죠.


정상가 8만원대의 지티소닉 GT-X1 제품을 이것저것 할인 쿠폰과 이벤트 쿠폰을 적용하여 거의 반가격에 장만했습니다.

제품이 크진 않습니다. 인터넷에 소개된 제품 크기는 가로 18.6 cm X 세로 10 cm X 높이 5.9 cm 입니다. 


실 제품 사진입니다.  아담하네요.

용기에 물을 붓고 전원을 연겹합니다. 


안경을 넣고 스위치를 켜면 웅~~~ 하는 소리와 함께 세척을 시작합니다. 


웅~~~ 하는 진동소리와 함께 작은 파동이 계속 일어납니다.

그러면서 안경 사이사이에 묵었던 때가 서서히 제거됩니다.

이거 가만히 보고 있으면 재미있습니다. ㅎㅎ



작동시킨 영상입니다.

기름때가 올라오는 것이 보이실 겁니다. 

속이 다 시원하네요. ㅎㅎ


초음파 세척기로 안경 외에 반지, 목걸이, 시계 같은 액서서리 세척이 가능하다고 하네요.

관심이 있으신 분들은 가성바기 좋은 제품을 잘 골라서 사용해 보세요. 

Comment +0


적정 타이어 공기압 관리를 위한 타이어 공기주입기 구매 후기 리뷰 2탄입니다. 

카센터에서 눈대중으로 넣은 타이어 공기압을 보니 과충전된 것은 물론이고

좌우, 앞뒤의 밸런스도 많지 않습니다.

그대로 운전하자니 얼마나 신경이 쓰이는지요. ^^


일단, 네 바퀴의 바람을 적당히 뺐습니다.

공기압이 이렇게 나오네요. 




자, 이제 타이어에 공기를 제대로 넣어보겠습니다.

순서는 다음과 같습니다. 


1. 자동차의 시동을 컨다.

2. 시거잭에 전원을 연결한다.

3. 전원이 연결되면 LED창에 숫자가 보이는데, 여기서 +, - 를 눌러 원하는 공기압 값을 설정한다. 


4. 타이어 주입구의 캡을 열고 제품의 주입기를 그대로 연결한다. 


5. 제품의 주입기를 기역자(ㄱ)로 꺽는다.

    이렇게 해야만 공기가 들어갑니다. 


6. 제품의 전원 버튼을 누른다. 



7. 설정한 값에서 제품의 가동이 멈추면 공기주입기를 잘^^ 뺀다. 


실제로 공기주입기를 가동시킨 영상입니다. 

공기를 좀 빼냈더니 공기압이 32네요.

공기압을 38psi에 맞추고 전원 버튼을 눌렀습니다.

쭉쭉 잘 들어가네요. 

설정한 값 38psi가 되니까 딱 멈춥니다. 


그럼, 공기주입구에서 주입기를 다시 원위치로 세우면 바로 빼면 됩니다. 

ㄱ자 형태로 꺽였던 주입기를 세우면 타이어에서 바로 공기가 빠져 나옵니다. 

늦게 뺄수록 바람이 그만큼 많이 빠지니까 주입기를 세우자마자 바로 빼는 게 중요합니다. 



소음은 좀 있습니다만,

공기가 빠르게 들어가는 편이니 크게 신경 쓰이진 않습니다. 


네 바퀴의 공기를 모두 넣었습니다.

앞뒤, 좌우 원하는 공기압으로 딱 맞추니 속이 다 시원하네요. 




이젠 동네 카센터 사장님께 눈치보면서 타이어 공기압 체크해달라지 않아도 되겠습니다. ㅎㅎ

여름엔 공기압을 조금 낮추고, 겨울에는 좀 높이고.. 잘 관리해야겠네요. 


자동차 계기판에 타이어 공기압이 수치가 보이지만 잘 관리가 안되어 속이 상하신 분들은

저렴하지만 쓸만한 공기주입기 제품을 장만해서 직접 관리해 보세요.

속 시원합니다. ^^



Comment +0

차를 장만하고 아무 생각없이 운행을 했었는데, 겨울이 되니 타이어 관리에 신경이 더 쓰입니다.

평소 타이어 공기압이 앞바퀴 31, 뒷바퀴 29 정도를 유지하고 다녔었는데,

기온이 확 내려가니 공기압이 낮아졌다고 경고가 뜨네요. 



적정 타이어 공기압이 얼마인지 알아보니, 타이어의 최대 허용치에서 80% 정도를 넣고 다니는 것이 좋다고 합니다.

최대 허용치는 타이어의 옆면에 표기되어 있더군요.

제 차 타이어를 확인해 보니 50 psi로 표기되어 있네요. 

그럼 40 psi로 넣고 다니는게 좋겠네요. 

바로, 동네 카센터로 가서 공기 좀 채워달라고 했습니다. 

사장님께서 네 바퀴에 돌아가며 한참 공기를 넣으시네요. 

카센터를 나와서 확인해 보니 



너무 과하게 공기가 들어간데다가 좌우, 앞뒤의 균형도 안맞게 공기가 들어갔네요.

디지탈 공기충전기로 하는 것이 아니라 카센터 사장님의 아날로그 감각으로 공기를 충전하기 때문에 그런가 봅니다.

아무리 단골이래도 또 가서 균형을 맞춰달라고 하기 참 어렵네요. ㅎㅎ


직접 공기압을 측정하고 부족하면 채우는 것이 속 편하다고 생각해서 에어 컴푸레셔, 타이어 공기충전기를 하나 질렀습니다. 

여러가지 제품이 있더군요. 


단순히 공기압을 측정하는 것에서부터 2~3만원 짜리 제품, 10만원이 훌쩍 넘어가는 제품 등 다양하게 있어서

선택하기 힘들었습니다. 


그 중에서 제가 선택한 제품은 엘케이코리아 타이어 공기주입기입니다.

가격은 4만원 미만.

공기압을 설정하면 해당 공기압에서 자동으로 멈추고,

무엇보다 타이어 공기주입기에 바로 끼우고 빼는 점이 마음에 들었습니다. 


주문하고 3일만에 제품이 배송되었습니다. 


제품은 그다지 크지 않습니다. 

모양이 꼭 아이언맨 같네요. 

제품 본체, 시거잭 충전선, 공기 주입기 그리고 자전거 타이어, 공, 튜브 등에 사용할 수 있는 주입기 들이 들어 있습니다. 




공기주입기는 본체 안쪽에 잘 숨어 있네요. 


전체를 다 꺼내보면 이렇습니다. 




공기주입기를 확대해보았습니다. 

타이어의 공기주입구 캡을 뺀 후, 바로 여기를 끼우면 되는 것 같습니다. 



제품 외관을 확인했으니 이제 제대로 타이어 관리를 하러 가봐야겠습니다. 


속시원하게 타이어 공기압 관리하기, 타이어 공기주입기 구매 후기 - 2





Comment +0