Python 기초 4 : 리스트의 벡터활용 메서드와 함수, for, while, if 문을 활용한 다양한 문제풀이
빅브로오
2020. 4. 9. 19:05
@author: Yoon Baek
4번째 시간을 들어가기 앞서...
다양한 if문 활용 명령 구문 break(수행문 종료), exit (프로그램 종료), next ( pass 와 유사 ), continue 등등 리스트 메서드가 편라한 게 꽤 많으니 자주 써보기 for문, while문은 논리구조를 세워놓는 것이 특히 중요한 듯.
리스트를 R의 벡터처럼 활용하기 위한 함수 pandas::Series
from pandas import Series
s1 = Series([1,2,3,4,5])
s1[[0,3]] # 벡터 색인 가능
s1 < 2 # 조건 전달 가능
s1[s1 < 2] # 조건 색인 가능
s1 + 1 # 벡터에 스칼라 연산 가능
알아두면 유용한 리스트 주요 메서드
L1 = [1,2,3,4,5]
L2 = [1,5,2,3,4]
L1.append(6) # 원소추가
L1.extend([7]) # 원소추가
L1.insert(0,10) # 0번쨰 위치에 10 삽입
L1.remove(3) # 특정 원소 삭제
L1.pop() # 마지막 원소 삭제
L1.count(1) # 원소 포함 횟수
L1.index(4) # 원소 위치
L1.index(3) # 원소 위치( 값이 없으면 에러 발생) ValueError: 3 is not in list
L2.sort(reverse = False) ; L1 # 정렬된 결과 추출
for문
for i in range(0,6) : # 0:5 in R
print(i) # 0부터 6 이전의 숫자까지 출력
# 4-2
for i in range(0,6,2) : # 0:6:2
print(i)
for i in L1 :
print(i)
for i in L1 :
print(i, end = ' ')
[ 연습문제 ]
jumin = ['8812111223928','8905042323343','90050612343432'] 에서 각 성별을 나타내는 숫자를 추출(for문 사용)
v1 = []
type(v1) # 빈리스트 생성시 리스트 타입으로 생성
for i in jumin :
v1.extend([i[6]])
[ 연습문제 ]
2 ~ 300, 3씩 증가시킨 값의 합계 구하기(15050) sol1
v1 = int(input('시작값을 입력하세요 : '))
v2 = int(input('끝값을 입력하세요 : '))
v3 = int(input('증가값을 입1력하세요 : '))
vi =[]
for i in range(v1,v2+1,v3) :
vi.extend([i])
sum(vi)
sol2
vi=0
for i in range(v1,v2+1,v3) :
vi += i
[L2를 2차원 형식으로 표현]
L1 = [1,2,3]
L2 = [[1,2,3],[4,5,6],[7,8,9]]
for i in L1 :
print(i, end = ' ')
for i in L2 :
print(i, end = ' ')
리스트 값을 바로 넣는 방법
for i in L2 :
for j in i :
print(j, end = ' ')
print() # print는 \n을 end 값으로 디폴트로 갖고 있음
위치값으로 색인하는 방법
for i in range(0,3) :
for j in range(0,3) :
print(L2[i][j], end = ' ')
print()
[ 연습 문제 - 불규칙한 리스트의 2차원 형식 출력 ]
L3 = [[1,2],[1,2,3],[4,5,6]]
리스트값 색인
for i in L3 :
for j in i :
print(j, end = ' ')
print()
range를 활용한 위치값 색인 이용 풀이
for i in range(0, len(L3)) :
for j in range(0, len(L3[i])) :
print(L3[i][j], end = ' ')
print()
while문
i가 11일 때 스톱하는 i 출력 while문
if문
[ 연습문제 : 1부터 100까지 합 출력, 짝수만]
sol1 : for문 만을 이용한 풀이법
vsum = 0
for i in range(2,101,2) : # by 설정값을 이용
vsum += i
vsum
sol2 if 문을 활용한 풀이법
for i in range(1,101) :
if (i % 2 == 0) :
vsum += i
else :
next
vsum
sol3 while문을 활용한 풀이법
i = 0
while i <= 100 :
if i % 2 == 0 :
vsum += i
else :
next
i += 1
[실습 문제]
1. 구구단 출력
%2d를 응용하여 간격을 맞춰주면 아래와 같이 좀 더 깔끔한 결과를 얻을 수 있다.
2. 별 출력
i = 1
j = 4
while i < 6:
print(' ' * j, end = '')
j -= 1
print('\u2605' * (2 *i - 1))
i += 1
i = 4
j = 1
while i > 0:
print(' ' * j, end = '')
j += 1
print('\u2605' * (2 *i - 1))
i -= 1
sol2 : while문과 if문을 활용한 풀이
v1 = ' '
v2 = '\u2605'
i = 1
while i <= 10 :
if i <= 5 :
print(v1*(5-i) + v2*(2*i -1))
else :
print(v1*(i-5) + v2*((10-i)* 2 - 1))
i += 1
아래와 같이 출력되면 된다.
3. 사용자로부터 하나의 단어를 입력받고 회문여부 판별
t1 = input('단어를 입력하세요 : ')
lloll sol 1 : if문 두개를 활용한 풀이
sol1 : while 문 두 개를 이용한 풀이
for i in range(1,10):
for j in range(2,10):
print('%dX %2d = %2d' % (j, i, i*j), end = ' ')
print()
L1 = [1,2,3,4,5]
i = 0
for i in L1 :
if i > 3 :
print(i)
i = 0
while i < 11 :
print(i)
i = i + 1
test = [] for i in range(0, len(t1)//2): if t1[i] == t1[-i-1] : test.append(t1[i]) else: next if len(test) == len(t1)//2 : print('회문입니다.') else: print('회문이 아닙니다.')
sol 2 : 회문이 아닐 시 프로그램 종료
```python
vword = input('회문판별할 문자를 입력하세요 : ')
for i in range(0,len(vword) // 2) :
if vword[i] == vword[-(1+i)] :
continue
else :
print('회문이 아닙니다.')
exit(0)
print('회문입니다.')
sol 3 : 회문이 아닐 시에도 프로그램 종료는 하지 않음.
vword = input('회문판별할 문자를 입력하세요 : ')
for i in range(0,len(vword) // 2) :
if vword[i] == vword[-(1+i)] :
1
else :
print('회문이 아닙니다.')
break
print('회문입니다.')