Python 기초

문자열 처리하기

문자열을 처리하는 용도로도 반복문이 많이 사용됩니다. 문자열의 각 문자들을 꺼내 출력하는 코드를 작성하면 다음과 같습니다.

name = "seulgi"
index = 0

while index < len(name):
	letter = name[index]
	print(letter, end = " ")
	index += 1

 

<실행 결과>

s e u l g i 

 

문자열도 시퀀스의 일종이라는 것을 이용하면 더 쉬운 코드도 작성이 가능합니다.

name = "seulgi"

for char in name: # char에 하나의 문자가 저장됩니다.
	print(char, end=" ")

 

<실행 결과>

s e u l g i 

 

문자열을 받아 모음을 전부 없애는 코드는 다음과 같이 작성할 수 있습니다.

s = input('문자열을 입력하세요 : ')
vowels = "aeiouAEIOU"
result = ""

for letter in s:				# 문자에 대하여 반복합니다.
	if letter not in vowels:	# 문자가 모음 리스트에 있지 않으면, result에 문자를 추가합니다.
		result += letter

print(result)

 

<실행 결과>

  • 문자열 "redvelvet"을 입력했을 때
문자열을 입력하세요 : redvelvet
rdvlvt
  • 문자열 "seulgi"를 입력했을 때
문자열을 입력하세요 : seulgi
slg

 

문자열 중에서 자음과 모음의 개수를 집계하는 프로그램을 작성하여 봅시다. 이 프로그램은 파이썬의 강력한 기능을 유감없이 보여줍니다.

original = input('문자열을 입력하시오 : ')
word = original.lower()							# 소문자로 변환합니다
vowels = 0
consonants = 0

if len(original) > 0 and original.isalpha():	# 문자가 하나라도 있고 알파벳이면
	for char in word:							# 각 문자에 대하여 반복합니다
		if char in 'aeiou':						# 모음이면
			vowels += 1						# 모음의 개수를 1개 증가합니다.
		else:								# 그렇지 않으면
			consonants += 1						# 자음의 개수를 1개 증가합니다.

print("모음의 개수 :", vowels)
print("자음의 개수 :", consonants)

 

<실행 결과>

  • 문자열 "redvelvet"을 입력했을 때
문자열을 입력하시오 : redvelvet
모음의 개수 : 3
자음의 개수 : 6
  • 문자열 "seulgi"를 입력했을 때
문자열을 입력하시오 : seulgi
모음의 개수 : 3
자음의 개수 : 3

 

모음을 찾는 부분을 다음과 같이 작성할 수도 있으나 상당히 길어집니다.

word = input('문자열을 입력하세요 : ')
vowels = 0
consonants = 0

for char in word:
	if char in ('a', 'e', 'i', 'o', 'u'): # 튜플이라는 변경할 수 없는 리스트입니다.
		vowels += 1
	else:
		consonants += 1

print("모음의 개수 :", vowels)
print("자음의 개수 :", consonants)

 

<실행 결과>

  • 문자열 "redvelvet"을 입력했을 때
문자열을 입력하시오 : redvelvet
모음의 개수 : 3
자음의 개수 : 6
  • 문자열 "seulgi"를 입력했을 때
문자열을 입력하시오 : seulgi
모음의 개수 : 3
자음의 개수 : 3

 

만약 모음의 위치를 전부 출력해야 한다면 다음과 같이 위치를 나타내는 변수를 사용하여야 합니다.

original = input('문자열을 입력하시오 : ')
word = original.lower()

if len(original) > 0 and original.isalpha():
	for i in range(len(word)):
		if word[i] in 'aeiou':
			print(i)

 

<실행 결과>

  • 문자열 'redvelvet'을 입력했을 때
문자열을 입력하시오 : redvelvet
1
4
7
  • 문자열 'seulgi'를 입력했을 때
문자열을 입력하시오 : seulgi
1
2
5

 

파이 계산

난수를 수학 문제를 해결하는데 사용하는 것을 Monte Carlo 방법이라고 합니다. 기초 기하학에서 아래의 이유로 원의 면적에서 사각형의 면적을 나누면 \frac{\pi}{4}임을 알고 있습니다.

 

Monte Carlo 방법은 사각형 안에 랜덤하게 점들을 선택하여 얼마나 많은 점이 원 안에 떨어지는지를 계산합니다.

전체 점들 중에서 원 안에 떨어지는 점들의 비율을 알면 \frac{\pi}{4} 의 값을 계산할 수 있습니다. 이것을 이용하여 파이의 값을 계산하는 프로그램을 작성해봅시다.

 

monte carlo pi에 대한 이미지 검색결과

 

from random import *
from math import sqrt

# n은 전체 점의 개수입니다.
n = int(input("반복횟수를 입력하시오 : "))

inside = 0
for i in range(0, n):
	x = random()	# random()은 0.0에서 1.0 사이의 난수를 반환합니다.
	y = random()

	# 원점으로부터의 거리가 1.0 이하이면 원 안에 있는 점입니다.
	if sqrt(x * x + y * y) <= 1:
		inside += 1

pi = 4 * inside / n
print(pi)

 

<실행 결과>

반복횟수를 입력하시오 : 1000000
3.141776

 

도전 과제

1. 문자열을 조사하여 알파벳 문자의 개수, 숫자의 개수, 스페이스의 개수를 출력하는 프로그램을 작성해봅시다.

 

<실행 결과>

  • 문자열 "RedVelvet(Debut 20140801) is one of the most famous girlgroup in the World!" 을 입력했을 때
문자열을 입력하시오 : RedVelvet(Debut 20140801) is one of the most famous girlgroup in the World!
알파벳 문자의 개수 :  53
숫자 문자의 개수 :  8
스페이스 문자의 개수 :  11

 


2. 봉민이는 옷을 사려 인터넷 뱅킹을 이용하던 중 계좌번호를 입력할 때 "810-199701-24607" 과 같이 "-" 을 사용하면 안 된다는 경고를 받았습니다.

사용자로부터 "-"가 포함된 계좌 번호를 받아 "-"을 삭제한 문자열을 만들어봅시다.

 

<실행 결과>

  • 문자열 "810-199701-24607" 을 입력했을 때
계좌번호를 입력하세요 : 810-199701-24607
81019970124607

 


3. 봉민이는 모두의 마블을 하다 문득 2개의 주사위를 던져 나오는 합의 확률을 계산해보고 싶어졌습니다.

파이썬으로 반복문을 이용한 컴퓨터 시뮬레이션 프로그램을 만들어봅시다.

 

<실행 결과>

주사위 실험 반복 횟수 : 100000
2 2795
3 5384
4 8356
5 11266
6 13701
7 16702
8 13987
9 11165
10 8198
11 5610
12 2836

 

HINT

1 부터 6 사이의 난수를 생성하는 코드는 아래와 같습니다.

from random import randint

randNum = randint(1, 6)
print(randNum)