홍릉과학출판사 강환수, 신용현
파이썬으로 배우는 누구나 코딩 도전 프로그래밍 문제입니다.
혼자 공부하는데 아무리 찾아도 솔루션이 없어서 막막해 고생 좀 했습니다..
기초적인 실력으로 짰지만 저 같은 분들을 위해 공유합니다.
그래도 한번이라도 스스로 코드를 적어보셨으면 하는 마음에 드래그 금지를 걸어놓았습니다. 여기저기 솔루션을 찾아 헤메던 와중에 어떤 초등학생 고수가 했던 말이 맴돌아서요... 결국은 밤을 새더라도 스스로 해내야 한다!
아무튼
고수님들은 의견 더해주시고 초심자분들께는 조금이나마 도움 되었으면 좋겠습니다!
제목이 너무 길어서 제 맘대로 줄여서 파배누코라 부르고
짬짬이 찾아오겠습니다. 안녕

5강 도전 프로그래밍
- 1에서 99까지의 난수 10개로 리스트 만든후, 리스트와 정렬된 리스트, 그리고 내림차순으로 정렬된 역순 리스트를 출력하는 프로그램
ranlist = list()
import random
for i in range(10):
n = random.randint(1, 99)
ranlist.append(n)
print('리스트', ranlist , end = ' ')
print()
s_ranlist = sorted(ranlist)
rs_ranlist = sorted(ranlist, reverse = True)
print('정렬 리스트', s_ranlist, end = ' ')
print()
print('역순 리스트', rs_ranlist, end = ' ')
리스트 [85, 23, 7, 10, 52, 5, 31, 62, 45, 33]
정렬 리스트 [5, 7, 10, 23, 31, 33, 45, 52, 62, 85]
역순 리스트 [85, 62, 52, 45, 33, 31, 23, 10, 7, 5]
2. 영한사전과 같이 한글과 영어에 대응되는 튜플 korean과 english를 만든 후, 표준 입력으로 한글을 입력받아 영어를 출력하는 프로그램
korean = ['정렬','초보자','내포','사전']
english = ['sorting', 'novice', 'comprehension',' dictionary']
word = input('찾을 단어 입력 ? ')
# print(korean.index(word))
print(english[korean.index(word)])
찾을 단어 입력 ? 초보자
novice
3. 문자열 'HelloPython!'으로 리스트를 만들어 부분 리스트 참조인 슬라이스를 위한 3개의 정수를 표준 입력으로 받은 후, 슬라이스 결과를 출력하는 프로그램계속 입출력을 반복하며, 0 0 0 입력하면 종료슬라이스를 위해 첨자를 문자열의 위아래로 출력
hp = list('HelloPython!')
print('''+ 012345678901
HelloPython!
- 210987654321''')
# 첨자는 달리 아는 방법이 없어 '''이용했으나 다른 방법 있다면 알려주시면 감사하겠습니다!
while True:
a, b, c = map(int, input('슬라이스 [?:?:?] 3개 입력 >> ').split())
if a == 0 and b == 0 and c == 0:
print('종료'.center(20,'*'))
break;
else:
print(hp[a:b:c])
+ 012345678901
HelloPython!
- 210987654321
슬라이스 [?:?:?] 3개 입력 >> 1 2 3
['e']
슬라이스 [?:?:?] 3개 입력 >> 3 2 1
[]
슬라이스 [?:?:?] 3개 입력 >> 3 10 2
['l', 'P', 't', 'o']
슬라이스 [?:?:?] 3개 입력 >> 0 0 0
*********종료*********
4. 다음 중첩된 리스트 data에서 각행의 합과 열의 합을 리스트 rsum과 csum에 저장해 출력하는 프로그램
data = [ [1,2,3],
[4,5,6],
[7,8,9]]
rsum1 = data[0][0] + data[0][1] + data[0][2]
csum1 = data[0][0] + data[1][0] + data[2][0]
rsum2 = data[1][0] + data[1][1] + data[1][2]
csum2 = data[0][1] + data[1][1] + data[2][1]
rsum3 = data[2][0] + data[2][1] + data[2][2]
csum3 = data[0][2] + data[1][2] + data[2][2]
rsum = list()
rsum.append(rsum1)
rsum.append(rsum2)
rsum.append(rsum3)
csum = list()
csum.append(csum1)
csum.append(csum2)
csum.append(csum3)
print('각 행의 합: ', rsum)
print('각 열의 합: ', csum)
각 행의 합: [6, 15, 24]
각 열의 합: [12, 15, 18]
5. 다음 리스트 sports와 num을 활용해 스포츠 종목과 팀원 수가 번갈아 나오는 리스트를 만든 후 다음과 같이 출력하는 프로그램
sports = ['축구','야구','농구','배구']
num = [11, 9, 5, 6]
sports.insert(1,11)
sports.insert(3,9)
sports.insert(5,5)
sports.insert(7,6)
print(sports)
#리스트 sports의 홀수 참조에 빈 문자 ''을 insert() 메소드로 삽입
#sports.insert(1,'')
#sports.remove('')
#sports.insert(3,'')
#sports.remove('')
#sports.insert(7,'')
#print(sports)
sports[1]=''
sports[3]=''
sports[5]=''
sports[7]=''
print(sports)
#위 결과 리스트에서 슬라이스 sports[1::2]에 num을 대입
sports[1::2] = num
print(sports)
['축구', 11, '야구', 9, '농구', 5, '배구', 6]
['축구', '', '야구', '', '농구', '', '배구', '']
['축구', 11, '야구', 9, '농구', 5, '배구', 6]
6. 다음 중첩된 리스트를 for문으로 행과 열을 맞춰 출력한 후, 다시 행과 열이 바뀐 형태를 for문으로 츨력하는 프로그램m = [[1,2],[3,4],[5,6],[7,8]]수학의 행렬에서 행과 열이 바뀐 행렬을 전치(transpose) 행렬이라 함
m = [[1,2], [3,4], [5,6], [7,8]]
print('원 행렬(m) 출력: ')
for row in m:
for i in row:
print(i,end=' ')
print()
print('\n전치 행렬 출력:')
for column in list(zip(*m)):
for i in column:
print(i,end=' ')
print()
원 행렬(m) 출력:
1 2
3 4
5 6
7 8
전치 행렬 출력:
1 3 5 7
2 4 6 8
A = [[1,2,3],[4,5,6]]list( zip(*A))[(1, 4), (2, 5), (3, 6)]
transpose 행열 전환 블로그 http://pyengine.blogspot.com/2016/11/python-zip-transpose.html
python zip 함수를 이용한 transpose
행렬 연산중에 transpose라는 연산이 있습니다. 전치행렬이라고도 하는데요, A^T 이런식으로 행렬에서 행과 열을 바꿔서, 나타내는 방법입니다. 자매품인 numpy 에서 transpose는 transpose라는 함수가
pyengine.blogspot.com
7. 위와 동일한 중첩된 리스트에서 리스트 컴프리헨션을 활용해 행과 열이 바뀐 형태의 리스트를 새로 만들고, 이 변환된 리스트를 다음과 같이 출력하는 프로그램m = [[1,2],[3,4],[5,6],[7,8]]다음 리스트 컴프리헨션을 사용transpose = [[row[i] for row in m] for i in range(len(m[0]))]
m = [[1,2], [3,4], [5,6], [7,8]]
transpose = [[row[i] for row in m] for i in range(len(m[0]))]
print('트랜스포즈를 컴프리헨션으로 만들어 그대로 출력 \n',transpose)
print()
#transpose = []
print('트랜스포즈를 for문으로 출력')
for row in transpose:
for i in row:
print(i,end=' ')
print()
트랜스포즈를 컴프리헨션으로 만들어 그대로 출력
[[1, 3, 5, 7], [2, 4, 6, 8]]
트랜스포즈를 for문으로 출력
1 3 5 7
2 4 6 8
m = [[1,2], [3,4], [5,6], [7,8]]
transpose = [[row[i] for row in m] for i in range(len(m[0]))]
print('트랜스포즈를 컴프리헨션으로 만들어 그대로 출력 \n',transpose)
print()
transpose = []
for row in m:
for i in range(len(m[0])):
transpose.append(i)
print(transpose)
m = [[1,2], [3,4], [5,6], [7,8]]
transpose = [[row[i] for row in m] for i in range(len(m[0]))]
print()
transpose = []
for i in range(4):
#len(m[0])
transpose.append(i)
print(transpose)
트랜스포즈를 컴프리헨션으로 만들어 그대로 출력
[[1, 3, 5, 7], [2, 4, 6, 8]]
[0, 1]
[0, 1, 0, 1]
[0, 1, 0, 1, 0, 1]
[0, 1, 0, 1, 0, 1, 0, 1]
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
8. 1에서 99까지의 난수 10개로 리스트를 만든 후, 다시 이 리스트를 튜플로 변환하고, 다음과 같이 정렬된 리스트와 합, 항목 수, 최대, 최소, 평균을 출력하는 프로그램함수 tuple(리스트)는 리스트를 튜플로 변환해 반환함수 sorted(튜플)은 튜플의 항목을 정렬해 다시 리스트로 반환함수 min(튜플)은 튜플에서 최소인 항목을 반환함수 max(튜플), sum(튜플) 등도 사용
r_list = list()
import random
for i in range(10):
n = random.randint(1, 100)
r_list.append(n)
print('리스트: ', r_list)
tuple(r_list)
print('튜플: ', tuple(r_list))
sorted(tuple(r_list))
print('튜플 정렬된 리스트: ', sorted(tuple(r_list)))
print()
print('합: %d, 항목수: %d' % (sum(tuple(r_list)), len(tuple(r_list))))
print('최대: %d, 최소: %d, 평균 : %.2f' % (max(tuple(r_list)), min(tuple(r_list)), sum(tuple(r_list))/10))
리스트: [97, 86, 17, 12, 52, 20, 20, 2, 40, 4]
튜플: (97, 86, 17, 12, 52, 20, 20, 2, 40, 4)
튜플 정렬된 리스트: [2, 4, 12, 17, 20, 20, 40, 52, 86, 97]
합: 350, 항목수: 10
최대: 97, 최소: 2, 평균 : 35.00
도움이 되셨다면 + ♥
'1' 카테고리의 다른 글
| 면역항암제: 제거, 평형, 탈출 (0) | 2022.07.12 |
|---|---|
| Liquid chromatography (1) | 2022.07.10 |
| 크로마토그래피 공정 (0) | 2022.07.10 |
| 파이썬으로 누구나 배우는 코딩 도전 프로그래밍 CHAPTER 3 (0) | 2021.05.20 |
| 파이썬으로 누구나 배우는 코딩 도전 프로그래밍 CHAPTER 2 (0) | 2021.05.20 |