[혼공파] # 4. 반복문

문연수·2023년 1월 16일
0

혼공파

목록 보기
4/8

1. 리스트와 반복문

- 1. 리스트 클래스

list_a = [ 0, 1, 2, 3, 4, 5, 6, 7 ] 
함수list_a 의 값
list_a.extend(list_a)[0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7]
list_a.append(10)[0, 1, 2, 3, 4, 5, 6, 7, 10]
list_a.insert(3, 0)[0, 1, 2, 0, 3, 4, 5, 6, 7]
list_a.remove(3)[0, 1, 2, 4, 5, 6, 7]
list_a.pop(3)[0, 1, 2, 4, 5, 6, 7]
list_a.clear()[]

- 2. 조건문과 반복문

numbers = [273, 103, 5, 32, 65, 9, 72, 800, 90]

for number in numbers:
	if (number >= 100):
		print("- 100 이상의 수:", number)

- 3. 프로그램 작성

* 홀수, 짝수 구분해서 출력하기

numbers = [273, 103, 5, 32, 65, 9, 72, 800, 90]

for number in numbers:
	print("{:d} 는 {:s}입니다.".format(
			number,
			"짝수" if number % 2 == 0
			else "홀수"
		)
	)

* 자릿수 출력하기

numbers = [273, 103, 5, 32, 65, 9, 72, 800, 90]

for number in numbers:
	origin = number

	ndigit = 0
	while (number > 0):
		number //= 10
		ndigit += 1

	print(f"{origin}{ndigit}입니다.")

- 4. 빈칸 채우기 1

* 실행결과

[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

* 코드

numbers = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
output = [[], [], []]

for number in numbers:
	output[(number - 1) % len(output)].append(number)
    
print(output)

- 5. 빈칸 채우기 2

* 실행결과

i = 0, j = 1
i = 1, j = 3
i = 2, j = 5
i = 3, j = 7
[1, 4, 3, 16, 5, 36, 7, 64, 9]

* 코드

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

for i in range(0, len(numbers) // 2):
	j = i * 2 + 1
	print(f"i = {i}, j = {j}")
	numbers[j] = numbers[j] ** 2
    
print(numbers)

- 2. 딕셔너리와 반복문

- 1. 딕셔너리 확인 문제

dict_a 의 값dict_a 에 적용할 코드dict_a 의 결과
{}dict_a['name'] = '구름'{'name':'구름'}
{"name":"구름"}dict_a.pop('name'){}

솔직하게 확인은 안 해봤지만 99.48% 정도 확률로 맞음

- 2. 딕셔너리의 출력

pets = [
	{ "name": "구름",   "age": 5 },
    { "name": "초코",   "age": 3 },
    { "name": "아지",   "age": 1 },
    { "name": "호랑이", "age": 1 }
]

print("# 우리 동네 애완 동물들")
for pet in pets:
	print(f"{pet['name']} {pet['age']}살")

- 3. 숫자 세기

import random

numbers = random.sample(range(0, 10), k = 10)
counter = dict()

for number in numbers:
	if (number not in counter):
		counter[number] = 0

	counter[number] += 1

print(counter)

- 4. 딕셔너리 순회

character = {
	"name": "기사",
    "level": 12,
    "items": {
    	"sword": "불꽃의 검",
        "armor": "풀플레이트"
    },
    "skill": [ "베기", "세게 베기", "아주 세게 베기" ]
}

for key in character:
	data = character[key]
	if (type(data) is dict):
		for key in data:
			print(f"{key}: {data[key]}")
	elif (type(character[key]) is list):
		for value in character[key]:
			print(f"{key}: {value}")
	else:
		print(f"{key}: {data}")

재귀함수 마렵네...

3. 범위 자료형과 while 반복문

- 1. range() 클래스 사용법

코드나타내는 값
range(5)[0, 1, 2, 3, 4]
range(4, 6)[4, 5]
range(7, 0, -1)[7, 6, 5, 4, 3, 2, 1]
range(3, 8)[3, 4, 5, 6, 7]
range(3, 12, 3)[3, 6, 9]

- 2. 빈칸 채우기

key_list = ["name", "hp", "mp", "level"]
value_list = ["기사", 200, 30, 5]
character = {}

if (len(key_list) != len(value_list)):
	print("key:value does not match")
	exit(1)

for i in range(0, len(key_list)):
	character[key_list[i]] = value_list[i]

print(character)

- 3. 순차적으로 더하기

limit = 10000
i = 1

sum_value = 0
while (sum_value < limit):
	sum_value += i 
	i += 1

print("{}를 더할 때 {}을 넘으면 그때의 값은 {}입니다.".format(i - 1, limit, sum_value))

- 4. 최대가 되는 경우 찾기

max_value = 0
a = 0
b = 0

for i in range(0, 100):
	j = 100 - i

	if (i * j > max_value):
		a = i 
		b = j
		max_value = i * j
    
print("최대가 되는 경우: {} * {} = {}".format(a, b, max_value))

4. 문자열, 리스트, 딕셔너리와 관련된 기본 함수

- 1. 선택 문제

문: enumerate() 함수와 items() 함수의 사용법으로 올바른 것은?
답: 1. enumerate(리스트)  2. 딕셔너리.items()

- 2. 리스트 내포

output = [
	value for value in range(1, 100 + 1)
		  if str(f"{value:b}").count('0') == 1
]

for i in range(len(output)):
	print("{} : {}".format(i, "{:b}".format(i)))

print("합계:", sum(output))

5. 도전 문제

- 1. 숫자의 종류

numbers = [1, 2, 3, 4, 1, 2, 3, 1, 4, 1, 2, 3]
number_table = dict()

for number in numbers:
	if (number not in number_table):
		number_table[number] = 0
	
	number_table[number] += 1

print(f"사용된 숫자의 종류는 {len(number_table)}개입니다.")
print("참고:", number_table)

- 2. 염기의 개수

dna = input("염기 서열을 입력해주세요: ")
dna_table = dict()

for base in dna:
	if (base not in dna_table):
		dna_table[base] = 0

	dna_table[base] += 1

for (base, count) in dna_table.items():
	print(f"{base}의 개수: {count}")

- 3. 염기 코돈 개수

codon_len = 3

dna = input("염기 서열을 입력해주세요: ")
codon_table = dict()

for i in range(0, len(dna), codon_len):
	codon = dna[i:i + codon_len]
	if (codon not in codon_table):
		codon_table[codon] = 0

	codon_table[codon] += 1

print(codon_table)

- 4. 2차원 리스트 평탄화

list_2d = [ 1, 2, [3, 4], 5, [6, 7], [8, 9] ]
list_plane = list()

print(f"{list_2d}를 평탄화하면")

for element in list_2d:
	if (type(element) is list):
		for elem in element:
			list_plane.append(elem)
	else:
		list_plane.append(element)

print(f"{list_plane}입니다.")
profile
2000.11.30

0개의 댓글