파이썬 라이브러리 강의를 듣다가
어느 순간, 어..? 나 그냥 타자 연습 하고 있잖아..? 하는 생각이 들었다..
사전캠프에서 강의를 듣긴 했지만, 아직 체화가 되지 않아서
구문만 봐도 이해가 안되는데 Numpy와 Pandas의 많은 기능까지 추가하려니
밑 빠진 독에 물 붓기 같은 느낌이랄까..?
그래서 사전캠프 때의 파이썬 문제를 풀어보기로 했다!
랜덤한 닉네임 생성하는 문제였는데,
- 사용자는 최소 27가지 이상의 닉네임 중 하나를 랜덤으로 print 할 수 있습니다. (아래의 키워드를 사용해주세요!)
- 기철초풍, 멋있는, 재미있는
- 도전적인, 노란색의, 바보같은
- 돌고래, 개발자, 오랑우탄
난, 이 문제를 보자 마자 '모르겠는데' 그랬다.
기초는 어디있나요? 없어요.
그래서 또 지피티한테 물어봤다...
지피티는 아주 빠르게 코드를 짜 주었고,
나는 그 코드에서 모르는 것들을 물어보았다..😭
일단 지피티가 코드 짜준 거...
그렇다. 난 f-string이 뭔지 모르고 있었다.
오늘 알게 된 것들을 적으려면 좀 길다.
f-string의 기본 문법
- 문자열 앞에 f 또는 **F**를 붙여 사용합니다.
- 중괄호 {} 안에 변수나 표현식을 넣어 문자열에 삽입합니다.
name = "Alice
age = 25
# f-string을 사용한 문자열 포매팅
greeting = f"My name is {name} and I am {age} years old."
print(greeting) # 결과: My name is Alice and I am 25 years old.
정리
- f-string은 문자열에 변수와 표현식을 포함할 때 가장 간단하고 효율적인 방법입니다.
- Python 3.6 이상에서 사용 가능하며, 직관적이고 가독성이 좋아 많이 사용됩니다.
그리고 정말 정말 그냥. 이 왕초보를 위한 파이썬을. 계속 공부해야겠다고 생각해서...
하나 하나 다시 읽으면서 실습하기 시작했다.
1.2.1 연습 문제: 파일 크기 계산
문제
파일을 다운로드할 때의 평균 속도(average rate)를 r이라 하고, 다운로드하는 데 걸린 시간(time)을 t라고 할 때, 다운로드한 파일의 용량은 r×t로 계산할 수 있습니다.
다운로드 속도가 초당 800kB이고 다운로드하는 데 걸린 시간이 110초라고 할 때, 다운로드한 파일의 크기는 몇 MB일까요? 단, 1MB=1000kB로 계산합니다.
여기서 난 또 헤매고 말았따..
도와줘 지피티야~~~~
# 주어진 값
r = 800 # 다운로드 속도 (kB/s)
t = 110 # 다운로드 시간 (초) # 파일 크기 계산
file_size_kb = r * t # 파일 크기 (kB)
file_size_mb = file_size_kb / 1000 # 파일 크기 (MB)
print(f"다운로드한 파일의 크기는 {file_size_mb} MB입니다.")
어떻게 계산하는지는 당연히 알아도 쓰려고 하니까 아무 것도 떠오르지가 않는 경험을 했다.
그리고 지피티가 알려준 답을 보니까... 할만한데? 싶어, 다음 문제를 봤다.
1.6.1 연습 문제: 제곱
문제
사용자에게 정수를 입력받아, 그 수의 제곱을 계산해 출력하는 파이썬 스크립트를 작성하세요.
내가 쓴 답보다 예쁜 지피티의 답을 보라.
# 사용자에게 정수 입력 받기
num = int(input("정수를 입력하세요: ")) # 입력받은 정수의 제곱 계산
square = num ** 2 # 결과 출력
print(f"{num}의 제곱은 {square}입니다.")
네모도 맞지만 제곱으로 쓰인댄다... 부족한 영어실력 다 들켰다
2.1.1 연습 문제: 입력받은 숫자만큼 반복하기(while)
문제
input()으로 사용자로부터 정수를 한 개 입력받아, 그 숫자를 숫자 크기만큼 반복해서 출력하는 파이썬 스크립트를 작성하세요.
이 때 출력 앞에 공백을 한 칸 주어서, 입력과 출력이 구분되게 합니다.
단, while 문을 사용하세요.
문제는 공백을 한 칸 주라고 하는데, 출력된 예시는 줄바꿈 처리가 되어있었다.
그래서 두개 다 했다.
# 공백 한 칸 준 것
num = int(input("정수를 입력하세요: ")) # 사용자로부터 정수를 입력받기
# 초기값 설정
count = 1 # 1부터 시작해서 num까지 반복 #
while문을 이용해 입력받은 숫자를 반복 출력
print("출력:", end=" ") # 출력 앞에 공백 추가
while count <= num: # count가 num보다 작거나 같은 동안 반복
print(num, end=" ") # 입력된 숫자를 출력
count += 1
# 줄바꿈 처리
# num = int(input("정수를 입력하세요: "))
count = 1 # 반복 횟수를 추적하는 변수 초기화
print("출력:") while count <= num: # count가 num 이하일 때까지 반복
print(num) # num을 출력 count += 1 # count를 1씩 증가
사실 그냥 출력 뒤의 ,end=" "가 있나 없나의 차이였다.
난 몰랐지만...
2.1.2 연습 문제: 제곱표(while)
문제
정수를 한 개 입력받아, 1부터 입력받은 수까지 각각에 대해 제곱을 구해 프린트하는 프로그램을 작성해 보세요.
단, while 문을 사용하세요.
til쓰기 귀찮아졌냐고? 조금 맞다.
다음문제 ㄱㄱ
2.1.3 연습 문제: 얌체공
문제
고무 공을 100 미터 높이에서 떨어뜨리는데, 이 공은 땅에 닿을 때마다 원래 높이의 3/5 만큼 튀어오릅니다. 공이 열 번 튈 동안, 그때마다 공의 높이를 계산합니다.
round() 함수를 사용해서, 다음과 같이 소수점 아래 네 자리까지 출력해 보세요.
와... 근데 이건 진짜 앞이 깜깜하더라
문제점
- num 값이 업데이트되지 않음:
- num은 공이 튀어오를 때마다 원래 높이의 3/5(0.6)로 줄어들어야 하지만, 코드에서는 num 값을 업데이트하지 않고 있습니다.
- print() 구문에 잘못된 쉼표 사용:
- Python 3에서는 print() 구문에서 쉼표(,)를 사용할 수 없습니다. 필요 없는 쉼표를 제거하세요.
- 루프 조건 오류:
- i는 0부터 시작하여 10까지 총 11번 반복해야 하므로 i <= 10은 올바릅니다. 그러나 첫 번째 계산에서 num 값을 출력해야 하는 요구사항에 따라 초기 높이도 포함되어야 합니다.
- 소수점 계산 결과를 반올림하지 않음:
- 출력값을 반올림하려면 round() 함수를 사용해야 합니다.
# 초기 높이 설정
num = 100
# 초기값 설정
i = 1 # 1번 튕기는 것부터 시작
while i <= 10:
num = num * 0.6 # 높이를 3/5로 줄이기.
print(f"{i} {round(num, 4)} ") # 소수점 4자리로 반올림하여 출력
i += 1
이제 f"이것도 알고, 그래도 괜찮다 발전하고 있다 뭐 그런 생각을 했다.
print가 i 앞에 있냐 뒤에 있냐 이것도 헷갈려서 여러 번 봤다. ㅎ..
다음문제 ㄱ
2.2.1 연습 문제: 숫자 읽기(1~3)
문제
input()을 사용해 사용자로부터 입력받은 숫자를 한글로 출력하는 프로그램을 작성하세요. 단, 사용자는 1 이상 3 이하의 정수 중 하나를 입력한다고 가정합니다.
예) 입력 : 1 / 출력 : 일
입력 : 2 / 출력 : 이
입력 : 3 / 출력 : 삼
이건 처음에 아 이건 할 수 있지 ㅎ 하면서 풀었는데..
응... 비교 연산자가 ==였지 =이 아니라...
다른 사람들이 댓글에 엄청 잘 풀어놨길래 지피티 보여주니까 리스트를 사용한 거라고 그러고, 리스트에 대해서도 공부했다.
그랬다.ㅎ 지피티는 천사다.
Tip: 잘하려면 작은 목표부터!
- 작은 코드부터 시작:
- 한 번에 복잡한 걸 하려 하지 말고, 간단한 조건문부터 연습해 보세요.
- 문제를 쪼개기:
- "내가 지금 뭘 하고 싶은지"를 생각하고 그걸 한 줄씩 구현해 보세요.
- 다른 사람 코드 보고 배워도 OK!:
- 다른 사람 코드 보는 건 아주 좋은 학습 방법이에요. 대신, 그걸 스스로 바꿔보는 연습도 해보세요.
마음가짐
- 못하는 게 당연합니다.
처음부터 잘하는 사람은 없어요. 배우고 있는 지금이 성장하는 과정이에요! - 비교하지 말고 자신과 비교하세요.
오늘 배운 것들이 어제보다 조금이라도 늘었다면, 이미 잘하고 계신 거예요.
어려운 점이 있으면 언제든 물어보세요! 항상 도와드릴게요. 같이 배우는 거니까요! 🚀😊
구래구래...
다음문제 ㄱㄱ
2.2.2 연습 문제: 나이에 따른 세대 구분 (1)
문제
input()으로 사용자의 나이를 입력받은 후, 다음 표의 어느 세대에 속하는지 출력하세요. 입출력 문구는 자유롭게 지으면 됩니다.
사실 좀 자신만만하게 풀었는데
int(input()) int 빼먹어서!!!!!!!
근데 좀 정답은 좀 달랐다.
작성한 코드와의 차이점
- gen 변수 도입:
- 답안 코드에서는 gen이라는 변수를 사용해 세대 이름을 저장합니다.
- 이 방식은 가독성을 높이고, 조건에 따라 처리된 결과를 한 번만 출력하는 장점이 있습니다.
- 작성한 코드에서는 조건마다 print()를 호출했기 때문에 출력 로직이 중복되었습니다.
- 가독성 향상:
- 조건마다 세대 이름을 변수 gen에 저장한 뒤, 마지막에 한 번만 출력합니다.
- 코드가 길어졌을 때 출력 부분이 한 곳에 모여 있으면 유지보수가 더 쉬워집니다.
비슷한 점
- 논리 구조는 똑같이 작동합니다.
- 정수 변환을 추가한 부분도 동일합니다.
코드 작성 능력 피드백
- 굉장히 잘 하셨어요!
작성하신 코드는 답안 코드와 거의 동일한 논리를 가졌고, 작은 차이만 있었어요. - 개선 포인트를 생각하신다면:
- 중복된 코드를 줄이기 위해 gen 같은 변수를 사용하는 방식을 활용하면 더 간결하고 유지보수가 쉬운 코드를 작성할 수 있습니다.
- 결론적으로:
- 답안 코드와 거의 같은 수준입니다. 앞으로는 "가독성"이나 "효율성"을 고민하면서 발전하면 금방 능숙해질 거예요!
정리
"나도 근접했어"라는 생각이 정확합니다! 😊 지금 이미 훌륭한 코드를 작성하셨고, 약간의 수정만으로 답안 코드와 동일한 결과를 얻을 수 있었어요. 앞으로도 자신감을 가지고 하나씩 해보세요. 정말 잘하고 계십니다! 🚀👏
추가 질문이 있다면 언제든 물어보세요! 😊
따숩다 따수워
그럼 gen=None이라고 한 게 변수로 둔다는 거야?
맞아요! 😊 **gen = None**은 변수를 초기화하는 과정이에요. 이 변수를 **"세대 이름을 저장하기 위한 공간으로 사용"**하려고 미리 정의해 둔 겁니다.
- gen = None: gen이라는 변수를 초기화하고, 조건문에서 값을 할당하기 전까지는 비어 있는 상태로 둔다는 뜻이에요.
- 이를 통해 코드를 더 깔끔하고 유지보수하기 쉽게 만들 수 있습니다.
혹시 다른 부분도 궁금하다면 편하게 물어보세요! 😊
응 다음 문제 ㄱㄱ
2.2.3 연습 문제: 단위 기호
문제
1. 백만 이상의 숫자를 입력받았을 때 1~10만자리 숫자를 생략하고 ‘M’을 붙여서 출력하게 코드를 수정해 보세요.
2. 성공했다면, 그 이상도 구현해 보세요(10의 승수 단위 참조).
다음 문제 ㄱㄱ
2.2.4 연습 문제: 양수만 덧셈하기
문제
input()으로 사용자로부터 입력받은 정수를 계속 더해나가다가, 음수가 입력되면 중단하고 그 전까지 계산한 값을 출력하는 파이썬 스크립트를 작성하세요.
예
입력:
1
2
3
-1
출력:
6
예 2
입력:
50
60
70
-100
출력:
180
어 이게 복붙이 되네
아무튼
맞아요! 반복적으로 입력을 처리하고, 음수가 입력되었을 때 중단하려면 while 문을 사용하는 것이 적합합니다.
아래에 문제를 해결할 수 있는 코드를 작성해드릴게요.
result = 0 # 결과를 저장할 변수
while True: # 무한 루프
num = int(input("정수를 입력하세요: ")) # 사용자로부터 정수 입력받기
if num < 0: # 음수가 입력되면 중단
break
result += num # 양수라면 결과에 더함
print(f"총합: {result}")
아홉시다 빨리 해
2.2.5 연습 문제: 윤년 판별하기
문제
윤년은 역법을 실제 태양년에 맞추기 위해 여분의 하루 또는 월을 끼우는 해입니다. 현재 사용하는 그레고리력의 윤년 규칙은 다음과 같습니다.
- 서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. (1988년, 1992년, 1996년, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년, 2032년, 2036년, 2040년, 2044년 ...)
- 서력 기원 연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다. (1900년, 2100년, 2200년, 2300년, 2500년...)
- 서력 기원 연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다. (2000년, 2400년...)
출처: 위키백과
이 규칙을 나타내는 흐름도를 그려보았습니다.1
이 규칙에 따라, 연도를 나타내는 정수를 입력으로 받아서 윤년인지 아닌지 출력하는 프로그램을 작성해 보세요.
나 이거 보고 뇌가 잠시 멈추는 것 같았다.
지피티한테 윤년을 쉽게 설명해달라고 해서 이해했다.(머리가 좀 좋지 않은 것 같다)
이건 답을 보고 나서도 윤년이 뭔지 몰라서 왜 이런지 몰랐는데,
지금은 윤년 뭔지 안다..ㅎ...ㅎㅎ. 어디서 잘난 척 할 수 있을 것 같다.
오늘의 천사 : 지피티
'TIL' 카테고리의 다른 글
내일배움캠프 본캠프 4일차 - 딕셔너리, 함수 (0) | 2024.11.28 |
---|---|
내일배움캠프 본캠프 3일차 - Python 공부 (0) | 2024.11.27 |
내일배움캠프 본캠프 1일차 - 파이썬 라이브러리 (Numpy) (0) | 2024.11.25 |
내일배움캠프 본캠프 4일차 - 엑셀보다 쉽고 빠른 SQL 1-1 ~ 3-3 (2) | 2024.11.14 |
내일배움캠프 사전캠프 3일차 - MySQL (0) | 2024.11.10 |