
그동안 살펴본 파이썬 기초 문법에 대해 예제풀이(총 20문항)를 진행코자 합니다. 제가 풀어낸 과정보다 훨씬 효율적인 방법이 있으리라 생각되지만, 지금의 제 수준에서 이해한 대로 풀이를 진행했습니다. 예제를 풀어보며 제가 느낀 점이 있다면 당분간은 파이썬 관련 자료를 계속 찾아보고, 확인해가며 반복 숙달 학습이 필요한 단계임을 알았습니다. 제가 잘못 이해하거나 보강해야 할 부분이 있으면 댓글로 남겨 주시기 바랍니다.
Q1. 문자열 ‘a:b:c:d’를 split, join 함수를 이용 ‘a#b#c#d’로 바꿔봅니다.
>>> a='a:b:c:d'
>>> a=a.split(':')
>>> a
['a', 'b', 'c', 'd']
>>> a='#'.join(a)
>>> a
'a#b#c#d'
Q2. 딕셔너리에 ‘C’를 추출할 때 발생하는 에러 대신에 70을 얻을 수 있도록 수정해 봅니다.
>>> a
{'A': 90, 'B': 80}
>>> a['C']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'C'
>>> try : a['C']
... except KeyError : a['C']=70
...
>>> a
{'A': 90, 'B': 80, 'C': 70}
저는 예외 처리 방법으로 풀었으나 출제자의 의도는 GET() 함수의 이해를 확인(?) ㅠㅠ
Q3. 리스트의 더하기와 extend 차이점을 알아봅니다.
>>> a=[1,2,3]
>>> a=a+[4,5]
>>> id(a)
27918216
>>> a=a+[6,7]
>>> id(a)
27918088
>>> a.extend([8,9])
>>> id(a)
27918088
한참 헤맸네요… 도저히 알 길이 없어 구글링 해 봅니다. 더하기를 하게 되면 a의 주소가 매번 바뀌게 되고, extend는 주소가 고정되어 있음을 알 수 있습니다. (더하기, append, extend 기능이 비슷하지만 조금씩 다릅니다.)
append [4,5]를 하게 되면 [1, 2, 3, [4, 5] ]의 결과로 돌려줍니다. 리스트 안에 리스트!
Q4. A 학생의 점수 리스트에서 50점 이상 점수의 총합을 구해 봅니다.(리스트 총합 구하기)
>>> a=[20,55,67,82,45,33,90,87,100,25]
>>> total = [total+i for i in a if i>= 50]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <listcomp>
NameError: name 'total' is not defined
>>> total=0
>>> total = [total+i for i in a if i>= 50]
>>> total
[55, 67, 82, 90, 87, 100]
>>> sum(total)
481
total 초기값을 0으로 지정했는데도 리스트가 들어가고 sum(total)로 총합을 출력합니다.
(원래 생각은 total에 총합이 들어가리라 생각했습니다. ㅎ)
Q5. 정수 n을 입력받아 n 이하까지의 피보나치수열을 출력하는 함수를 작성해 봅니다.
def fibo(a):
fb=[0,1]
for i in range(0,a):fb.append(fb[i]+fb[i+1])
return fb
n=int(input('input n :'))
print(fibo(n))
실행 결과
input n :10
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
리스트를 사용하면 간단하게 구현되지만 출제자의 의도와 부합하는지 의문입니다.
Q6. 콤마로 구분된 숫자를 입력받아 총합을 구합니다.
>>> def add_all(*a):
... sum=0
... for i in a: sum+=i
... return sum
...
>>> add_all(1,2,3,4,5)
15
내포 리스트를 사용하지 않고 총합을 구합니다.
Q7. 2~9의 숫자 중 하나를 입력받아 한 줄 구구단 출력이 가능토록 해 봅니다.
n=int(input('구구단을 출력할 숫자 입력(2~9) :'))
print([n*i for i in range(1,10)])
실행 결과
구구단을 출력할 숫자 입력(2~9) :2
[2, 4, 6, 8, 10, 12, 14, 16, 18]
Q8. 아래 abc.txt를 역순으로 저장해 봅니다.
abc.txt 내용
aaa
bbb
ccc
ddd
with open('ABC.TXT','r') as f:
l=f.readlines()
with open('ABC.TXT','w') as f:
l.reverse()
f.writelines(l)
실행 후 abc.txt
ddd
ccc
bbb
aaa
뭔가 더 간단한 방법이 있을 것 같지만 우선 아는 만큼 해 봅니다.
Q9. 아래와 같은 sample.txt를 읽어 총합, 평균을 구하고 평균값을 result.txt에 기록합니다.
sample.txt
70
60
55
75
95
90
80
85
100
with open('sample.txt','r') as f:
score = f.readlines()
t_score= sum(list(map(int,score)))
ave_score=t_score/len(score)
print (t_score,ave_score)
with open('result.txt','w') as f:
f.write(str(ave_score))
result.txt에 기록할 때 ave_score를 그대로 사용하면 “TypeError: write() argument must be str, not float” 발생합니다.
str(ave_score) 함수 사용으로 실수형을 문자열로 변경 후 에러 없이 result.txt에 79.0이 기록됩니다.
Q10. 다음과 같이 동작하는 클래스 Calculator를 작성해 봅니다.
>>>cal1=Calculator([1,2,3,4,5])
>>>cal1.sum()
15
>>> cal1.avg()
3.0
>>> cal2=Calculator([6,7,8,9,10])
>>>cal2.sum()
15
>>> cal2.avg()
3.0
class Calculator:
def __init__(self,num):
self.num=num
def sum(self) :
total = 0
for i in self.num : total += i
return total
def ave(self) :
ave=0
total=0
for i in self.num :total += i
ave = total/len(self.num)
return ave
cal1=Calculator([1,2,3,4,5])
print(cal1.sum())
print(cal1.ave())
cal2=Calculator([6,7,8,9,10])
print(cal2.sum())
print(cal2.ave())

평균을 구할 때 그냥 self.sum()을 사용하면 되는데 굳이 합을 다시 계산했네요… 클래스 내 함수 재사용이 가능합니다. 이렇게 알아가는 거죠!
'코딩 이야기 > 파이썬(Python)' 카테고리의 다른 글
파이썬(Python) – 초보 탈출 예제 풀이 (2/2) (0) | 2021.12.17 |
---|---|
파이썬(Python) – 초보 탈출 예제 풀이 (1.5/2) (0) | 2021.12.17 |
단도직입 파이썬(Python) – 파이썬 스크립트를 실행파일로 변환하기 (로또번호 생성 후 과거 자료와 비교하기) (0) | 2021.12.17 |
단도직입 파이썬(Python) – 정규식(Regular Expression) 2/2 (0) | 2021.12.17 |
단도직입 파이썬(Python) – 정규식(Regular Expression) 1/2 (0) | 2021.12.17 |
댓글