나도코딩 파이썬 강의 퀴즈 리뷰

박광수·2022년 2월 3일
0

명령어 지옥

파이썬을 공부하기 위해 많은 분들이 보셨다는 유튜브 '나도코딩'의 강의영상. 많은 정보를 간결하고 어렵지 않게 잘 설명해주셔서 재밌게 공부하고 있다.

어려움이 있다면, 명령어가 너무 많다는 것?

처음엔 다 기억하려고 접근했다가 너무 많아서 자연스럽게 코딩하면서 익혀보고자 한다.

QUIZ

나도 코딩 강의 영상에서 나오는 QUIZ들이 그 첫 번째 대상.
강의에 해답도 나와있지만 그래도 최대한 혼자 짜보려고 노력한 흔적을 남겨본다.

Quiz 1.

Q. 변수를 이용하여 다음 문장을 출력하시오.
변수명: statiton
변수값: 사당, 신도림, 인천공항 순서대로 입력
출력문장: XX행 열차가 들어오고 있습니다.

station = "사당"
print(station + "행 열차가 들어오고 있습니다.")
출력결과:
사당행 열차가 들어오고 있습니다.

너무 간단해서 따로 설명이 필요 없을 정도.
위 코드에서 사당대신 신도림, 인천공항으로 수정하면 된다.

강의 영상 순서 상 맞지 않지만 list와 for문을 이용하여 다음과 같이 한 번에 출력 할 수 도 있다.

s1, s2, s3 = "사당", "신도림", "인천공항"
stations = []
stations.append(s1)
stations.append(s2)
stations.append(s3)

for station in stations:
    print(station + "행 열차가 들어오고 있습니다.")
출력 결과:
사당행 열차가 들어오고 있습니다.
신도림행 열차가 들어오고 있습니다.
인천공항행 열차가 들어오고 있습니다. 

Quiz2

Q. 당신은 최근에 코딩 스터디 모임을 새로 만들었습니다.
월 4회 스터디를 하는데 3번은 온라인으로 하고
1번은 온라인으로 하기로 했습니다.
아래 조건에 맞는 오프라인 모임 날짜를 정해주는 프로그램을 작성하시오.

조건1 : 랜덤으로 날짜를 뽑아야 함
조건2 : 월별 날짜는 다름을 감안하여 최소 일수인 28 이내로 정함
조건3 : 매월 1~3일은 스터디 준비를 해야 하므로 제외

(출력문 예제)
오프라인 스터디 모임 날짜는 매월 x일로 선정되었 습니다.

from random import *

date = str(randint(4,28))

print ("오프라인 스터디 모임은 매월 " + date + "일로 선정되었습니다.")
출력문:
오프라인 스터디 모임은 매월 11일로 선정되었습니다.

사소한 차이이지만 나는 date라는 변수에 randint로 뽑은 숫자를 str처리 했는데 답안에서는 date는 그냥 숫자로 두고 마지막 print문에서 str로 처리하신 차이가 있었다.

Quiz3

Q. 사이트별로 비밀번흐롤 만들어 주는 프로그램을 작성하시오.

예) http://naver.com
규칙1 : http:// 부분은 제외 => naver.com
규칙2 : 처음 만나는 점(.) 이후 부분은 제외 => naver
규칙3 : 남은 글자 중 처음 세자리 + 글자 갯수 + 글자 내 'e' 갯수 + "!"로 구성
예) 생성된 비밀번호 : nav51!

url = "http://naver.com"
my_str = url.replace("http://", "")
my_str = my_str[:my_str.index(".")]
password = my_str[:3] + str(len(my_str)) + str(my_str.count("e")) + "!"
print ("{0} 의 비밀번호는 {1} 입니다.".format(url, password))
출력문:
http://naver.com 의 비밀번호는 nav51! 입니다.

여기서 약간 멘붕이 왔다. 문제에서 제시한 방법대로 명령어만 입력하면 되는 건데 정말 생각이 안나서 계속 찾아보면서 해야했다. 방금 본 명령어인데도 바로 생각이 안나는구나. 확실히 코딩은 직접 해보면서 손에 익혀야 숙달이 될 것 같다.
결국 선생님의 코드를 베낀 결과물...ㅎ

Quiz4

Q. 당신의 학교에서는 파이썬 코딩 대회를 주최합니다.
참석률을 높이기 위해 댓글 이벤트를 진행하기로 하였습니다.
댓글 작성자들 중에 추첨을 통해 1명은 치킨, 3명은 커피 쿠폰을 받게 됩니다.
조건1 : 편의상 댓글은 20명이 작성하였고 아이디는 1~20 이라고 가정
조건2 : 댓글 내용과 상관 없이 무작위로 추첨하되 중복 불가
조건3 : random 모듈의 shuffle 과 sample을 활용

(출력 예제)
-- 당첨자 발표 --
치킨 당첨자 : 1
커피 당첨자 : [2, 3, 4]
-- 축하합니다 --

나의 코딩:
users = range(1,21)
users = list(users)

shuffle(users)

chicken = users[0]
coffee = users[1:4]

print ( f"--당첨자 발표--\n치킨 당쳠자: {chicken}  \n커피 당첨자: {coffee}\n --축하합니다--")
선생님의 코딩:
users = range(1,21)
users = list(users)
shuffle(users)
winners = sample(users, 4)
print("-- 당첨자 발표 -- ")
print("치킨 당첨자 : {0}.format(winners[0]))
print("커피 당첨자 : {0}.format(winners[1:4]))
print(" -- 축하합니다 --")

range(1,21) 의 타입이 range이기 때문에 list로 type변경 해야한다는 것을 모르고 혼자 끙끙대다가 해설을 보고 수정한 버젼이다. 그 외에는 크게 다르진 않는듯.
줄바꿈을 꾸역꾸역 넣을 필요없이 print문을 여러 번 쓰면 되는구나. 사소하지만 또 알아간다.

로또 번호 자동 선택도 이런 원린가 싶다...ㅎ 어차피 로또 기계가 해주긴 하네.

nums=range(1,46)
nums=list(nums)
shuffle(nums)
lucky_numbers=sample(nums, 6)
print("로또 번호는" + lucky_numbers + "입니다.")

실행해보니 오름차순이 아니어서 불편하다...
아, 정렬 명령어가 뭐였더라...?
(검색해봄)
list_name.sort() 라고 합니다...

Quiz5

Q. 당신은 Cocoa 서비스를 이용하는 택시 기사님입니다.
50명의 승객과 매칭 기회가 있을 때, 총 탑승 승객 수를 구하는 프로그램을 작성하시오.

조건1 : 승객별 운행 소요 시간은 5분 ~ 50분 사이의 난수로 정해집니다.
조건2 : 당신은 소요 시간 5분 ~ 15분 사이의 승객만 매칭해야 합니다.

(출력문 예제)
[O] 1번째 손님 (소요시간 : 15분)
[ ] 2번째 손님 (소요시간 : 50분)
[O] 3번째 손님 (소요시간 : 5분)
...
[ ] 50번째 손님 (소요시간 : 16분)

총 탑승 승객 : 2 분

from random import *
cnt = 0
for i in range(1,51):
    time = randrange(5, 51)
    if time <= 15:
        print ("[O]"+ str(i)+"번째 손님 (소요시간: :"+str(time)+"분)")
        cnt +=1
    else:
        print ("[ ]"+ str(i)+"번째 손님 (소요시간: :"+str(time)+"분)")
print("총 탑승 승객 : " + str(cnt) + "분")
출력문:
[ ]1번째 손님 (소요시간: :44분)
[ ]2번째 손님 (소요시간: :45분)
[O]3번째 손님 (소요시간: :9분)
[O]4번째 손님 (소요시간: :8분)
[ ]5번째 손님 (소요시간: :28분)
[ ]6번째 손님 (소요시간: :22분)
[O]7번째 손님 (소요시간: :11분)
[ ]8번째 손님 (소요시간: :25분)
[ ]9번째 손님 (소요시간: :34분)
[ ]10번째 손님 (소요시간: :29분)
[ ]11번째 손님 (소요시간: :41분)
[ ]12번째 손님 (소요시간: :37분)
[ ]13번째 손님 (소요시간: :36분)
[ ]14번째 손님 (소요시간: :16분)
[ ]15번째 손님 (소요시간: :29분)
[ ]16번째 손님 (소요시간: :38분)
[O]17번째 손님 (소요시간: :11분)
[O]18번째 손님 (소요시간: :15분)
[ ]19번째 손님 (소요시간: :44분)
[O]20번째 손님 (소요시간: :10분)
[O]21번째 손님 (소요시간: :5분)
[ ]22번째 손님 (소요시간: :18분)
[ ]23번째 손님 (소요시간: :23분)
[ ]24번째 손님 (소요시간: :22분)
[ ]25번째 손님 (소요시간: :30분)
[O]26번째 손님 (소요시간: :14분)
[ ]27번째 손님 (소요시간: :38분)
[ ]28번째 손님 (소요시간: :49분)
[ ]29번째 손님 (소요시간: :39분)
[ ]30번째 손님 (소요시간: :38분)
[ ]31번째 손님 (소요시간: :33분)
[ ]32번째 손님 (소요시간: :40분)
[O]33번째 손님 (소요시간: :15분)
[ ]34번째 손님 (소요시간: :50분)
[ ]35번째 손님 (소요시간: :40분)
[ ]36번째 손님 (소요시간: :26분)
[ ]37번째 손님 (소요시간: :40분)
[ ]38번째 손님 (소요시간: :50분)
[ ]39번째 손님 (소요시간: :22분)
[O]40번째 손님 (소요시간: :13분)
[ ]41번째 손님 (소요시간: :40분)
[ ]42번째 손님 (소요시간: :37분)
[ ]43번째 손님 (소요시간: :18분)
[O]44번째 손님 (소요시간: :11분)
[ ]45번째 손님 (소요시간: :16분)
[ ]46번째 손님 (소요시간: :36분)
[O]47번째 손님 (소요시간: :10분)
[O]48번째 손님 (소요시간: :14분)
[ ]49번째 손님 (소요시간: :19분)
[O]50번째 손님 (소요시간: :9분)
총 탑승 승객 : 14분

어... 하루 쉬었다가 다시 퀴즈 풀고 해설을 봤는데 왜 format을 안썼나 싶다.
동시에 format의 유용함을 깨달았다. 이런 건 절대 안까먹지.

Quiz6

def std_weight(height, gender):
    if gender == "남자":
        return height*height*22
    elif gender == "여자":
        return height*height*21

height = 175
gender = "남자"
weight = round(std_weight(height/100, gender), 2)
print("키 {0}cm {1}의 표준 체중은 {2}kg 입니다.".format(height, gender, weight))
출력문:
키 175cm 남자의 표준 체중은 67.38kg 입니다.

입력값을 바꾸면 여자나 다른 키에 대해서도 계산이 가능하다.
내 체중 - 내 표준 체중 = ???
생각하지 않기로

Quiz7

for i in range(1, 51):
    bogo_file = open (str(i)+"주차.txt", "w", encoding="utf-8")
    print("- {0}주차 주간보고 -".format(i), file=bogo_file)
    print("부서 : ", file=bogo_file)
    print("이름 : ", file=bogo_file)
    print("업무 요약 : ", file=bogo_file)
    bogo_file.close()

for i in range(1,51):
    with open(str(i)+"주차.txt", "w", encoding="utf-8") as report_file:
        report_file.write("- {0} 주차 주간보고 -".format(i))

파일명: n주차.txt
파일내용:
- n 주차 주간보고 -
부서 :
이름 :
업무 요약 :

의 형태로 50개의 파일이 만들어 졌다.
파이썬으로 군대에서 계원업무를 좀 편하게 볼 수 있지 않을까하는
가만 생각해보면 당연한 생각이 드네. 그래도 다시 (당연히) 안 간다.

Quiz8

class House:
    def __init__(self, location, house_type, deal_type, price, completion_year):
        self.location=location
        self.house_type=house_type
        self.deal_type=deal_type
        self.price=price
        self.completion_year=completion_year

    def show_detail(self):
        print(self.location, self.house_type, self.deal_type, self.price, self.completion_year)


house=[]    
h1=House("강남", "아파트", "매매", "10억", "2010년")
h2=House("마포", "오피스텔", "전세", "5억", "2007년")
h3=House("송파", "빌라", "월세", "500/50", "2000년")

house.append(h1)
house.append(h2)
house.append(h3)

print("총 {0}대의 매물이 있습니다".format(len(house)))
for hn in house:
    hn.show_detail()
출력문:
총 3대의 매물이 있습니다
강남 아파트 매매 10억 2010년
마포 오피스텔 전세 5억 2007년
송파 빌라 월세 500/50 2000년

__init__ 뒤에 이거 " : '' 콜론 하나 안 찍었는데 코드가 너무 옆으로 길어져서 못봤다가 왜 안되나 한 십분을 찾아봤다.
깔끔하게 코드를 작성하는 것도 중요하구나, 하고 생각했던 퀴즈.

(얼마 안남았다. 퀴즈 푸는대로 추가 업로드 예정)

profile
박광수입니다.

0개의 댓글