파이썬 코딩 알고리듬 정오표와 추가 설명 (수정 2020.2.15)
28p. [참고] 문자열을 쉼표(,) 기준으로 나누기
s = '사과,배,바나나,딸기'
f = s.split(',')
print(f)
[참고] 문자열 뒤집어 출력하기
1) reversed()와 join() 이용하여 뒤집기
s = "대한민국"
print(''.join(reversed(s))) # 국민한대
print('',join(reversed('abcde'))) # edcba
2) 슬라이싱으로 뒤집기
s = "대한민국"
print(s[::-1]) # 국민한대
print('abcde'[::-1] # edcba
[참고] 문자열의 내용을 정렬하기
1) 문자열 내용을 정렬하기 (오름차순)
s = "hello123"
print(''.join(sorted(s))) # sorted는 정렬(기본 오름차순)된 새로운 자료를 돌려줌
# 결과: 123ehllo
2) 문자열 내용을 정렬하기 (내림차순)
s = "hello123"
print(''.join(sorted(s, reverse=True))) # 내림차순은 reverse=True 옵션 사용
# 결과: ollhe321
35p. 문제에서
0보다 적은 --> 1보다 적은
52p. (2)번에서
(n/2)*2 ----> (n//2)*2
53, 55, 56p. 소스 코드에 나오는 모든 sum은 total로 변경
57p. [추가사항] 소스 줄 끝에 있는 역슬래시 \
역슬래시 \는 소스 코드에서
아래 줄 내용과 연결하는 기호입니다.
아랫줄을 윗줄에 이어서 연결해서 입력할 때는 역슬래시를 제거합니다.
57p. [참고] 내용 수정
int(dotori / 4.3) 대신에 정수 나누기 연산자를 사용하면 더 간단하게 표현할 수 있습니다.
dotori // 4.3 # 정수 나누기를 하지만 그 결과는 float
/ 나누기 : 실수 나누기를 하며 결과는 사용 값에 따라 int 또는 float 형입니다.
// 나누기 : 정수 나누기를 하며 결과는 사용 값에 따라 int 또는 float형입니다.
59p. swap 기능은 아래 코드를 이용해도 됩니다.
x, y = y, x # 두 변수 값을 서로 바꿈
60p. [참고] 다른 방법
서로 다른 수를 가진 a,b,c변수에서 중간 수를 찾는 다른 방법입니다.
if c>a>b or b>a>c:
print(a)
elif c>b>a or a>b>c:
print(b)
else:
print(c)
61p. 실력 향상 예제 22 (상단) 수정
while num > 0:
num2 *= 10
num2 += num%10
num //= 10
61p. 실력향상 예제 22 (하단)
str = ---> string =
%str ---> %string
61p. 실력 향상 예제 22 (하단)
string = ''.join(reversed (str(num))) 이 코드는 아래처럼 변경해도 됩니다.
string = str(num)[::-1] # 문자열 슬라이싱으로 뒤집기
64~66p. 소스 코드에서 변수 sum을 모두 total 로 변경합니다.
69p. [참고] 실력 향상 예제 28에서
pow(x,2)는 x*x 처럼 바꿀 수 있습니다.
70p. 문자열 처리 코드에서 while 문장 수정
while len(n) != 5: # 문자열 길이가 5글자 아니면 반복
[참고] 문자열에서 뒤 세 글자 구하는 다른 예제
n = "12345"
if len(n) > 4:
print(n[-3:])
else:
print(n) # 길이가 세 글자 이하면 그냥 출력
83p. [참고] 0, 1, 2, 4, 8,... 이 증가 값은 2의 (n-1) 거듭제곱으로 구할 수 있음
2의 0승 : 1
2의 1승 : 2
2의 2승 : 4
2의 4승 : 8
DAYS = 30
money = pow(2, DAYS-1)
print("30일째 저축할 돈: %.0f원" %money)
84p. 1000을 넘어가는 --> 1000 이상이 되는
[참고] 다른 방식
total = 0
n = 0
while total < 1000:
n += 1
total += n
print(n)
85p. if(n >= LIMIT): ---> if n > LIMIT:
[참고] 다른 방식
total = 0
n = 0
while total <= 10000:
n += 1
total += n
print(n-1)
87p. 출력 예
1:3, 2:2, 3:2, 4:1, 5:4
[참고] 예제44의 두번째 for문은 다음처럼 작성해도 됩니다.
for n in data:
if n == i:
count += 1
88p. [참고] 다른 방식
total = 0
na = [20, -10, 5, -4, -11, 6, -1]
for i in na:
print(i)
if i < 0:
total += i
print("\n음수 합 =", total)
86p. 남은 용돈이 있는 --> 음수 금액이 되지 않는
86p. [참고] 더 편한 방식
다음처럼 작성하면 더 간결합니다.
s1 = "3..1..4"
s2 = "1...9..2..2.....1"
s = s1 + s2 # 문자열 결합
total = 0
for i in s:
if i.isdigit(): # 숫자로 이루어진 글자이면
total += int(i)
print(total)
90p. [참고] 예제 47의 다른 방식
total = 0
...
for s in s1+s2:
if s.isdigit():
total += int(s)
print( total )
93,94p. 소스에서 결과 출력 문자열 수정
'이미 존재하는 이름입니다.'로 수정합니다.
101p. [참고] math 모듈의 factorial() 함수 사용 예제
import math
print(math.factorial(10))
109p. [참고] if count% 2:
if count%2 != 0: 또는 if count%2 == 1:
112p. 문제 수식에서 5x거듭제곱은 5x의 3거듭제곱입니다.
113p. 예제62 설명문 수정
# 100개 0으로 --> # 10개 0으로
[참고] 리스트 count() 함수를 이용한 다른 방식
import random
data = [random.randint(1,9) for i in range(100)]
print(data)
for n in range(1,10):
print(n, ':', data.count(n))
114p. 1~99 범위 랜덤값은 randrange(1,100) 또는 randint(1,99) 메소드를 사용합니다. 소스 코드에서 메소드 이름을 randrange로 바꾸거나 randint(1,99)로 수정합니다.
123p. [참고] dw 값은 문자열도 사용 가능
dw = '월화수목금토일'
133p. [참고] 리스트나 튜플 괄호 생략
소스 코드에서 아래 함수 부분이 있습니다.
def get_center(pos):
x1,y1,x2,y2,x3,y3=pos
붉은 글자 부분은 pos가 리스트이면 아래 코드와 같습니다. (만약 튜플이면 (...) 표기와 같습니다.)
[x1,y1,x2,y2,x3,y3]=pos
139p. [참고] 피보나치 수열
피보나치(fibonacci) 수열, f(n)
f(0) = 0
f(1) = 1
f(2) = 1
f(3) = 2
f(4) = 3
f(5) = 5
f(6) = 8
f(7) = 13
f(8) = 21
f(9) = 34
f(10) = 55
f(11) = 89
...
[참고] 예제를 다음처럼 작성할 수도 있습니다.
def fib(n):
if n <= 0:
return 0
if n <= 2:
return 1
return fib(n-2) + fib(n-1)
print(fib(10))
141p.
76와 288의 --> 76과 288의
(1)에서
286 --> 288
(5) 이 때 나누기에 --> 이 때 나머지에
[참고] 사실 a, b 크기 비교는 필요없어요.
나머지 연산을 하고 자리를 바꿀 때 자연스럽게 큰 수 작은 수로 바뀝니다.
그러므로 gcd() 대신에 __gcd() 함수를 바로 호출해도 됩니다.
[참고] while 문을 이용하여 최대공약수 구하기
print("두 수의 최대공약수를 구합니다.")
a = int(input("숫자를 입력하시오: "))
b = int(input("다음 숫자를 입력하시오: "))
while True:
c = a % b
if c==0:
break
a = b
b = c
print(b)
142p. 수정
b = 288; --> b = 288
[참고] 파이썬에서는 문장 끝에 세미콜론을 사용하지 않지만...
세미콜론을 사용하더라도 문법 에러가 발생하진 않습니다.
164p. if 문을 윗줄에 연결합니다.
# 월의 날짜를 돌려주는 함수
def days_of_month(y, m):
days_of_mon = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
if m>0 and m<13:
days_of_mon[2] = 29 if y%400 == 0 or (y%100 != 0 and y%4 == 0) else 28
return days_of_mon[m]
else:
return None
185p. 표 수정
문자열 사용 예 --> 리스트/튜플/사전/문자열 요소 변경 비교
요소 치완 --> 요소 치환(바꾸기)
<이상>
'도서 안내' 카테고리의 다른 글
스크래치 코딩 알고리듬 정오표와 추가 설명 (0) | 2017.12.22 |
---|---|
도서 구매 안내 (0) | 2017.12.03 |
C 코딩 알고리듬 정오표 및 추가 설명 (0) | 2017.12.02 |
파이썬 코딩 알고리듬 소스 코드 - 수알치와 함께하는 프로그래밍 예제 (0) | 2017.08.11 |
스크래치 코딩 알고리듬 소스 코드 - 수알치와 함께하는 프로그래밍 예제 (0) | 2017.08.11 |