AIFFEL 과정에서 첫 풀잎스쿨은 2주 동안의 '파이썬 마스터 '였다. 파이썬 마스터 당연히 2주 동안 못하겠지ㅎㅎ. 정확히 '기초'라도 마스터 했어야 하는 건데, 의욕은 있지만 실천력은 없었다. 그때 예습을 꼬박할 열정으로 복습도, 추가 보충도 했어야 했는데! 하지만 후회는 이미 실컷했다. 과거에 대한 미련과 집착은 버리고, 현재 다시 다짐한 김에 열심히 하는 걸로.
내가 3일 동안 공부할 파이썬 기초 예제는 코드업의 파이썬 100제이다. 33문제씩 풀면... 끝난다.
로그인하고 문제를 풀고 제출하면 채점을 해주는 방식이다.
참고로 1번 문제이다. 1번은 파이썬 모르는 사람도 풀 수 있는 수준이다. 코드업은 그렇게 난이도가 어렵지 않다. 일단 시작해보는 걸로!
print('Hello')
print("Hello World")
print("Hello\nWorld")
print("\'Hello\'")
print('"Hello World"')
print("\"!@#$%^&*()\'")
print("\"C:\Download\\'hello\'.py\"")
print("print(\"Hello\\nWorld\")")
여기까지 출력 문제
여기서부턴 입출력 문제
a = input()
print(a)
a = int(input())
print(a)
a = float(input())
print(a)
a = int(input())
b = int(input())
print(a,b,sep='\n')
a = input()
b = input()
print(b, a, sep='\n')
a = float(input())
for i in range(3):
print(a)
a, b = input().split()
print(a,b,sep='\n')
a, b = map(str, input().split())
print(b,a)
s = input()
print((s+' ')*3)
a, b = input().split(':')
print(a, b, sep=':')
y, m, d = input().split('.')
print(d, m, y, sep='-')
a,b=input().split('-')
print(a,b,sep="")
a = input()
for i in a:
print(i)
a = input()
print(a[0:2], a[2:4], a[4:])
난 변수[] 이 형태가 이때까지 리스트에서만 가능한 줄 알았다^^;
h, m, s = input().split(':')
print(m)
a, b = input().split()
print(a+b)
여기까지가 입출력 문제!
여기서부터 값변환 문제!
a, b = map(int, input().split())
print(a+b)
아까 6013 문제는 map을 거부하더니 얘는 또 잘 되네? 뭐가 잘못된 걸까...
a, b = map(float, input().split())
print(a+b)
제출한 코드인데 자꾸 틀렸다고 한다. 아까 6013이랑 똑같이 오답으로 뜬다... 답답해서 주피터까지 켰다 결국... split() 이 공백 기준으로 나눠주는 건데, 뭐 실수라서 '.' 이 문제인 걸까...?
a = float(input())
b = float(input())
print(a+b)
하지만 동그라미 받고 싶으니까 그냥 이렇게 냈다.
a = input()
b = input()
a = float(a)
b = float(b)
print(a+b)
또 다른 답
a = input()
b = input()
print(float(a)+float(b))
그냥 이게 최고인듯!
print('%x' %int(input()))
사실 이런 건 처음 봤다.
print('%X' %int(input()))
print('%o' %int(input(),16))
# a = input()
# n = int(a, 16)
#입력된 a를 16진수로 인식해 변수 n에 저장
# print('%o' % n)
#n에 저장되어있는 값을 8진수(octal) 형태 문자열로 출력
이건 나중에 까먹을 것 같다...
print(ord(input()))
ord가 입력받은 10진수 유니코드 값으로 변환시켜준다고 한다...
새로운 걸 배웠다.
print(chr(int(input())))
chr은 정수 값을 유니코드 문자(chracter)로 바꿔 출력
print(-int(input()))
문자 1개를 입력받아 그 다음 문자를 출력해보자.
영문자 'A'의 다음 문자는 'B'이고, 숫자 '0'의 다음 문자는 '1'이다.
print(chr(ord(input())+1))
a, b = map(int, input().split())
print(a-b)
a, b = map(float, input().split())
print(a*b)
a, b = input().split()
print(a*int(b))
a = int(input())
b = input()
print(a*b)
a, b = map(int, input().split())
print(a**b)
한 번 틀린 문제
첫 번째 오류난 답
a, b = map(float(), input().split())
print(a**b)
정답 코드는 이것
a, b = map(float, input().split())
print(a**b)
아침이라 정신이 덜 깬듯
a, b = map(int, input().split())
print(a//b)
a, b = map(int, input().split())
print(a%b)
a = float(input())
print(round(a, 2))
뭔지 몰라서 엑셀에서 하는 방법으로 했는데 맞았다 ㅎㅎ;;; round가 있구나?
예시 정답
a=float(input())
print( format(a, ".2f") )
하지만 format 함수의 ".2f" 이 방법에 익숙해지는 것이 더 좋을 듯. .2f의 의미는 소숫점 두 번째 자리라는 뜻! format은 걍 쓰면서 익히는게 가장 좋은 것 같다. 더 풀면서 익숙해지자
a, b = map(float, input().split())
print(format(a/b, ".3f"))
a, b = map(int, input().split())
print(a+b)
print(a-b)
print(a*b)
print(a//b)
print(a%b)
print(format(a/b, ".2f"))
이 문제는 사람들의 정답을 찾아보았는데 함수를 만들 거나, 꽤 다양했던 걸로 기억...
이쯤되면 본능적으로 궁금해 해야 할 것 같은 두 개...
round(0.2) # 0 반환
round(0.7) # 1 반환
round(1.6) # 2 반환
안의 수도 알아서 내림과 올림을 하나봅니다.
3. 두 배수가 똑같이 가깝다면, 반올림은 짝수를 선택한다.
round(0.5) # 0 반환
round(-0.5) # 0 반환
round(1.5) # 2반환
a, b, c = map(int, input().split())
print(a+b+c)
print(format((a+b+c)/3, ".2f"))
mean, sum, average는 numpy꺼구나...
그래도 뭔가 본능적으로 len(), mean(), sum() 등을 떠올려서 ㅋㅋㅋ 기뻤다
a = int(input())
print(a<<1)
a,b = map(int, input().split())
print(a<<b)
이건 반성 좀 하자,,
틀린 답
a, b = map(int, input().split())
if a <b:
print("True")
else
print("False")
맞는 답
a, b = map(int, input().split())
if a <b:
print("True")
else:
print("False")
else 뒤에도 : 를 붙여줘야 한다^^
a, b = map(int,input().split())
if a == b:
print("True")
else:
print("False")
a, b = map(int,input().split())
if a <= b:
print("True")
else:
print("False")
a, b = map(int,input().split())
if a != b:
print("True")
else:
print("False")
n = int(input())
print (bool(n))
a = bool(int(input()))
print(not a)
a,b = map(int, input().split())
print(bool(a) and bool(b))
a,b = map(int, input().split())
print(bool(a) or bool(b))
a,b = map(int, input().split())
print(bool(a) != bool(b))
예시 답안
c = bool(int(a))
d = bool(int(b))
print((c and (not d)) or ((not c) and d))
not 불값 이랑 and, or 연산자를 통해 모두 서로 bool 값이 다를 때 출력하도록 해준 듯하다.
a,b = map(int, input().split())
print(bool(a) == bool(b))
a,b = map(int, input().split())
print(not a and not b)
참고
컴퓨터에 저장되는 모든 데이터들은 2진수 형태로 바뀌어 저장된다.
0과 1로만 구성되는 비트단위들로 변환되어 저장되는데,
양의 정수는 2진수 형태로 바뀌어 저장되고, 음의 정수는 "2의 보수 표현"방법으로 저장된다.
양의 정수 5를 32비트로 저장하면,
5의 2진수 형태인 101이 32비트로 만들어져
00000000 00000000 00000000 00000101
로 저장된다.(공백은 보기 편하도록 임의로 분리)
32비트 형의 정수 0은
00000000 00000000 00000000 00000000
그리고 -1은 0에서 1을 더 빼고 32비트만 표시하는 형태로
11111111 11111111 11111111 11111111 로 저장된다.
-2는 -1에서 1을 더 빼면 된다.
11111111 11111111 11111111 11111110 로 저장된다.
이러한 내용을 간단히 표현하면, 정수 n이라고 할 때,
~n = -n - 1
-n = ~n + 1 과 같은 관계로 표현할 수 있다.
이 관계를 그림으로 그려보면 마치 원형으로 수들이 상대적으로 배치된 것과 같다.
a = int(input())
print(~a)
a, b = map(int, input().split())
print(a&b)
참고
** | 은 파이프(pipe)연산자라고도 불리는 경우가 있다.
** 비트단위(bitwise) 연산자는,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift)
가 있다.
예를 들어 3과 5가 입력되었을 때를 살펴보면
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 | 5 : 00000000 00000000 00000000 00000111
이 된다.
비트단위 or 연산은 둘 중 하나라도 1인 자리를 1로 만들어주는 것과 같다.
이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서도 효과적으로 사용된다.
a, b = map(int, input().split())
print(a|b)
a, b = map(int, input().split())
print(a^b)
a,b = map(int,input().split())
print(a if (a>b) else b)
a,b,c = map(int, input().split())
print((a if a < b else b) if (a if a < b else b) < c else c)
이것도 풀이 과정은 여러 가지. 걍
if a < b:
if ...
이렇게 하는게 가장 좋을 지도 모르겠다. 그런데 이 형식이 for문도 똑같이 쓰였던 것 같은데, 굉장히 많이 본 기억은 나는데... 일단 익혀두면 좋을 것 같다. 최근에 봤던 기억이 나서... ex10부터 내려가서 7에서 찾은 코드.
for sentence in train_data['document']:
temp_X = tokenizer.morphs(sentence) # 토큰화
temp_X = [word for word in temp_X if not word in stopwords] # 불용어 제거
x_train.append(temp_X)
이건 for문 안의 for문 안에서 if문이 쓰인건가. stopwords 안에 word가 없다면(조건), temp_X에서 word 꺼내 다시 temp_X에 (리스트로) 저장한다?
if를 쓰면 else가 필요한 것 같고, 연산자가 괜히 바로 떠오르니까 근데 if는 그냥 조건문이다!
이런 양식에도 익숙해져야 하고,
1 in [1, 2, 3]
i not in [1, 2, 3]
이런 거에 익숙해져야
def wordlist_to_indexlist(wordlist):
return [word_to_index[word] if word in word_to_index else word_to_index['<UNK>'] for word in wordlist]
... 아직도 한 눈에 안 보인다. 이건 나중에 다시 봐야할 듯...
a, b, c = map(int, input().split())
if a % 2 == 0:
print(a)
if b % 2 == 0:
print(b)
if c % 2 == 0:
print(c)
data = list(map(int, input().split()))
for i in range(len(data)):
if (data[i] % 2 == 0):
print("even")
else:
print("odd")
문제는 3개의 정수를 입력 받아서 짝수면 even, 홀수면 odd를 뽑아내라는 거였는데 막 좋은 아이디어는 안 떠오르고, 반복하기 싫어서 내 친구 map에 list를 씌어 만들어줬는데 여기서 난 좀 큰 착각을 했다. 내 코드를 보며 이게 최선인가 생각이 들었을 때 map은 이미 리스트를 만들어주는 함수라는게 뒤늦게 떠올랐다. 어제 질문해놓고 까먹는 class...
다른 사람의 풀이
a,b,c = map(int,input().split())
if a%2==0:
print('even')
else : print('odd')
if b%2==0:
print('even')
else : print('odd')
if c%2==0:
print('even')
else : print('odd')
문제를 보면 여기까지는 떠오를 것이다. 그래. 난 여기서 원래 for 안에 if문을 넣고 싶었는데, 반복문 만드는 방법을 모르겠어서 그냥 list로 바꿔준 것...
a = map(int,input().split())
for num in a:
if num % 2 == 0:
print("even")
else
print("odd")
가 된다네? 정수 세 개를 입력 받아야 한다고 해서 일단 내 첫 번째 착각은 변수 a, b, c 를 다 지정해줘야 하는 줄 알았고, a 자리에 리스트가 와야 한다고 알고 있으면서 map은 리스트를 만들어주는 함수라는 걸 까먹었다. range는 어차피 list를 만들어주는 거였으니까 그럼 저 자리에 a가 들어가도 잘 나오는 거였다. 뭔가 돌아돌아 엉망진창으로 풀어 버린 예제인듯 하다.
data = list(map(int, input().split()))
for i in range(len(data)):
if data[i] % 2 == 0:
if data[i] > 0:
print("C")
else:
print("A")
elif data[i] % 2 != 0:
if data[i] > 0:
print("D")
else:
print("B")
67번도 66번을 복붙한 거여서 얘를 다시 고쳐보면
a = map(int, input().split())
for i in a:
if i % 2 == 0:
if i > 0:
print("C")
else:
print("A")
elif i % 2 != 0:
if i > 0:
print("D")
else:
print("B")
그냥 이렇게 풀면 되는 거였다! 😜
a = int(input())
if a >= 90:
print("A")
elif a >= 70:
print("B")
elif a >= 40:
print("C")
else:
print("D")
a = input()
if a == 'A':
print("best!!!")
elif a == 'B':
print("good!!")
elif a == 'C':
print("run!")
elif a == 'D':
print("slowly~")
else:
print("what?")
이 문제 뭔가 딕셔너리랑 for, if로 풀 수 있을 것 같아서 풀어보려 했는데 실패했다!
a = {"A":"best!!!", "B":"good!!!", "C":"run!", "D":"slowly~"}
b = "what?"
안 되나?
key = input()
key in a.keys()
etc... 해보고 싶었는데 실패.
a = int(input())
if a //3 == 1:
print("spring")
elif a//3 == 2:
print("summer")
elif a//3 == 3:
print("fall")
else:
print("winter")
while True:
a = int(input())
if a == 0:
break
else: print(a)
while문은 진짜 거~의 써본 적이 없어서 사용 방법을 전혀 모르겠다.
a=int(input())
while a!=0:
print(a)
a=a-1
^^;
a=int(input())
while a!=0:
a-=1
print(a)
6072랑 6073이 왜 다른 거지? 차이는 0까지 출력해주냐 아니냐 같은데, 모르겠다...
모르겠어서 모범답안을 베낌
c = ord(input())
t = ord('a')
while t<=c :
print(chr(t), end=' ')
t += 1
다른 사람의 풀이
a = input()
start = ord('a')
while True:
print(chr(start), end = ' ')
if (chr(start) == a):
break
start = start + 1
a = int(input())
for i in range(0, a+1):
print(i)
a = int(input())
for i in range(0, a+1):
print(i)
6075, 6076 같은 문제 같은데, while, for 문으로 각각 푸는 문제였나보다!
while로 푼 풀이
a = int(input())
i = 0
while i <= a:
print(i)
i += 1
n = int(input())
sum = 0
for i in range(n+1):
if i % 2 == 0:
sum = sum + i
print(sum)
while True:
x = input()
print(x)
if x == 'q':
break
i = 0
sum = 0
a = int(input())
while True:
i += 1
sum += i
if sum >= a:
print(i)
break
n, m = map(int, input().split())
for i in range(1, n+1):
for j in range(1, m+1):
print(i, j)
a = int(input(), 16)
for i in range(1, 16):
print('%X*%X=%X' % (a,i,a*i))
n = int(input())
for i in range(1, n+1):
if (i % 10 == 3 or i % 10 == 6 or i % 10 == 9):
print("X", end=' ')
else:
print(i, end=' ')
r, g, b = map(int, input().split())
for i in range(0, r):
for j in range(0, g):
for k in range(0, b):
print(i, j, k)
print(r*g*b)
h, b, c, s = map(int, input().split())
print(round(h*b*c*s/8/1024/1024, 1), "MB")
나는 format에 약하니까 format의 방법도 한 번 사용해보겠다.
h, b, c, s = map(int, input().split())
rgb = h*b*c*s/8/1024/1024
print("%.1f"%rgb, "MB")
w,h,b = map(int, input().split())
rgb = w*h*b/1024/1024/8
print('%.2f'%rgb,"MB")
n = int(input())
sum = 0
i = 0
while sum < n :
sum = i + sum
i += 1
print(sum)
n = int(input())
for i in range(1, n+1):
if i%3 ==0:
continue
print(i, end=' ')
❗실수한 점
end='' 는 만약 10을 입력시 12345678910 이런식으로 공백 없이 출력된다.
a, d, n = map(int, input().split())
print(a+(n-1)*d)
등차수열의 공식을 생각하면 된다.
첫째항 + (n-1) * 공차
a, r, n = map(int, input().split())
print(a*+r**(n-1))
등비수열 공식
첫째항+공비^(n-1)
a, m, d, n = map(int, input().split())
for i in range(1, n):
a = (a*m+d)
print(a)
a,b,c=map(int, input().split())
i = 1
while i%a != 0 or i%b != 0 or i%c != 0 :
i += 1
print(i)
이 풀이는 1씩 늘어나는 i 의 값에 입력한 a,b,c 값을 나누면서 하나라도 0이 아닌 값이 나오면 반복하는 구조문이다.