반응형

파이썬 코딩 알고리듬 정오표와 추가 설명 (수정 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:     -->  결과가 1이면 참값이고 홀수를 의미합니다. 아니면 다음처럼 작성해도 결과는 같습니다.

if count%2 != 0:  또는  if count%2 == 1:

수알치 http://blog.daum.net/sualchi Y

 

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. 표 수정

문자열 사용 예 --> 리스트/튜플/사전/문자열 요소 변경 비교

요소 치완 --> 요소 치환(바꾸기)

 

<이상> 

 

 

 

반응형

+ Recent posts