Information Security Lab

Research on penetration testing and information security

Python/Basic programming

Ch06. 문자열

information-security-lab 2025. 4. 9. 05:42
목 차
Ⅰ. 문자열 개요
      1. 문자열 기초
      2. 문자열 다루기

Ⅱ. 플러스 예제
      1. 모스 부호

Ⅲ. 연습 문제

Ⅳ. 프로그래밍 문제

 

 


 

 

Ⅰ. 문자열 개요

1. 문자열 기초

연구 1-1)

입력받은 문자열을 s에 저장한 후 거꾸로 한 글자씩 출력하는 프로그램을 작성하시오

 

풀이)

s = input("문자열 입력 : ")

for i in range(len(s) - 1, -1, -1):
  print(s[i])

 

리스트처럼 아래와 같이 코드를 작성해보니 AttributeError: 'str' object has no attribute 'reverse'라는 에러가 출력되어 풀이와 같이 코드를 작성하였다.

s = input("문자열 입력 : ")

s.reverse()

print(s)

 

 

연구 1-2)

입력받은 문장이 회문인지 아닌지 판별하는 프로그램을 작성하시오(회문 : 거꾸로 뒤집어도 뒤집기 전과 같은 문장이나 단어)

 

풀이)

str1 = input("문장 입력 : ")
str2 = ''

for i in range(len(str1) - 1, -1, -1):
  str2 = str2 + str1[i]

if str1 == str2:
  print("회문입니다.")
else:
  print("회문이 아닙니다.")

 

풀이의 5행을 "str2 = str1[ i ]"로 작성하면 str2의 내용이 계속 덮어써지면서 원하는 결과물이 출력되지 않는다. 그래서 "str2 = str2 + str1[ i ]"로 작성한 것이다.

 

자세한 내용은 아래 생성형 ai의 답변을 참고해보자.

 

 

 

2. 문자열 다루기

연구 2-1)

사용자가 입력한 문자열에서 대문자는 소문자로, 소문자는 대문자로 바꾸는 프로그램 작성해보기

 

풀이)

str1 = input("문자열 입력 : ")
str2 = ''

for i in str1:
  if i.isupper():
    str2 += i.lower()
  elif i.islower():
    str2 += i.upper()
  else:
    str2 += i

print(str2)

 

 

연구 2-2)

학생들로부터 좋아하는 친구를 입력받아 하나의 리스트로 만드는 프로그램을 작성해보기(사용자가 여러 명을 입력한 경우에는 split() 함수를 이용해서 한 명씩 분리)

 

풀이)

friend_list = []

while True:
  friend_name = input("좋아하는 친구의 이름 또는 종료 입력(여러 명 입력 시 \",\" 사용) : ")

  if friend_name == "종료":
    break
  
  friend_list.extend(friend_name.split(", "))

print(friend_list)

 

 


 

 

Ⅱ. 플러스 예제

1. 모스 부호

모스 부호 번역 1)

입력받은 영어 단어 모스 부호로 번역하는 프로그램을 작성하시오

모스 부호

 

풀이)

al = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
morse = [".-", "-..", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."]

answer = input("영어 단어 입력 : ").upper()

for i in range(len(answer)):
  if answer[i] in al:
    print(morse[al.index(answer[i])], end=' ')

 

 

모스 부호 번역 2)

입력받은 모스 부호로 이루어진 단어를 영어로 번역하는 프로그램을 작성하시오

 

풀이)

al = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
morse = [".-", "-..", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."]

answer = input("모스 부호 입력(각 부호는 공백으로 구분) : ")
answer = answer.split(" ")

for i in range(len(answer)):
  if answer[i] in morse:
    print(al[morse.index(answer[i])], end='')
  else:
    print("모스 부호 표를 참고하여 모스 부호를 공백으로 구분하여 입력해주세요.")

 

 

관련 문제 2-1)

영어 단어를 입력하면 모스 부호로 변환하고, 모스 부호로 단어를 입력하면 영어로 변환하는 프로그램을 작성하시오

 

풀이)

al = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
morse = [".-", "-..", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."]

answer = input("영어 단어, 또는 모스 부호를 입력하세요.(모스 부호 입력 시 각 부호는 공백으로 구분) : ").upper()

if answer.isalpha():
  for i in range(len(answer)):
    print(morse[al.index(answer[i])], end=' ')

answer = answer.split(" ")
for i in range(len(answer)):
  if answer[i] in morse:
    print(al[morse.index(answer[i])], end='')

 

 

도전 문제 2-1)

영어 단어를 입력하면 모스 부호로 변환하고, 모스 부호로 단어를 입력하면 영어로 변환하는 프로그램을 작성하시오.(단, 사용자가 종료를 입력할 때까지 프로그램은 반복해서 동작해야 함.)

 

풀이)

al = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
morse = [".-", "-..", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."]

while True:
  answer = input("영어 단어 또는 모스 부호를 입력하세요.(모스 부호 입력 시 각 부호는 공백으로 구분 / 프로그램 종료를 위해서는 \"종료\" 입력) : ").upper()

  if answer == "종료":
    print("프로그램을 종료합니다.")
    break
    
  elif answer.isalpha():
    for i in range(len(answer)):
      print(morse[al.index(answer[i])], end=' ')

  answer = answer.split(" ")
  for i in range(len(answer)):
    if answer[i] in morse:
      print(al[morse.index(answer[i])], end='')

 

 


 

 

Ⅲ. 연습 문제

연습 문제 1-1)

다음 코드의 실행 결과를 예측하시오

s = "Python " + "3.13"

print(s)

 

풀이)

Python 3.13

 

 

연습 문제 1-2)

다음 코드의 실행 결과를 예측하시오

s = "Hello Python" * 2

print(s)

 

풀이)

Hello PythonHello Python

 

 

연습 문제 1-3)

다음 코드의 실행 결과를 예측하시오

s = "Hello Python"

for i in range(len(s)):
  print(s[i], end='')

 

풀이)

Hello Python

 

 

연습 문제 1-4)

다음 코드의 실행 결과를 예측하시오

s = "Hello Python"

print(len(s))
print(s[0])
print(s[3])
print(s[2:6])
print(s[:5])
print(s[5:])

 

풀이)

12
H
l
llo 
Hello
 Python

 

 

연습 문제 1-5)

다음 코드의 실행 결과를 예측하시오

s = "Hello Python"

print(s.lower())
print(s.upper())

 

풀이)

hello python
HELLO PYTHON

 

 

연습 문제 1-6)

다음 코드의 실행 결과를 예측하시오

s = "Hello Python"

print(s.find("Python"))
print(s.find("C"))

 

풀이)

6
-1

 

 

연습 문제 1-7)

다음 코드의 실행 결과를 예측하시오

s = " 12345kg"

s = s.lstrip()
s = s.rstrip("kg")

print(s)

 

풀이)

12345

 

 

연습 문제 1-8)

다음 코드의 실행 결과를 예측하시오

s = "Hello Python!"

print(s.isdigit())
print(s.isalpha())
print(s.isalnum())
print(s.islower())
print(s.isupper())
print(s.isspace())

 

풀이)

False
False
False
False
False
False

 

 

연습 문제 1-9)

다음 코드의 실행 결과를 예측하시오

pi = "3.14"

print(float(pi))

 

풀이)

3.14

 

 

연습 문제 2-1)

다음 코드를 실행하면 오류가 발생한다. 그 원인을 설명하고 코드를 수정하시오

s = "Python" * "3"

print(s)

 

풀이)

위의 코드는 "Python"을 세 번 반복하여 "PythonPythonPython"으로 출력하려는 코드인데 3을 큰 따옴표( " )로 감싸서 3을 문자열로 인식하여 오류가 발생한다.(오류 : TypeError: can't multiply sequence by non-int of type 'str')

 

큰 따옴표를 삭제해주면 오류가 발생하지 않는다.

s = "Python" * 3

print(s)

 

 

연습 문제 2-2)

다음 코드를 실행하면 오류가 발생한다. 그 원인을 설명하고 코드를 수정하시오

s = "Python" + 3

print(s)

 

풀이)

위의 코드에서 변수 s를 보면 문자열과 숫자의 덧셈이므로 오류가 발생한다.(오류 : TypeError: can only concatenate str (not "int") to str)

 

" + 3"을 삭제하여 "Python"만 출력되도록 하거나 " + "를 " * "로 바꿔주어 "Python"이 연달아서 세 번 출력되도록 수정해야 한다.

// 풀이 1


s = "Python"

print(s)



// 풀이 2


s = "Python" * 3

print(s)

 

 

연습 문제 2-3)

다음 코드를 실행하면 오류가 발생한다. 그 원인을 설명하고 코드를 수정하시오

s = "Python"

for i in s:
  print(s[i], end = "")

 

풀이)

"for i in s:" 는 문자열 s의 각 문자를 순서대로 변수 i에 할당한다.

 

그런데 print() 함수를 보면 "s[ i ]" 라고 적혀져 있는데 이렇게 되면 s[ P ], s[ y ], s[ t ], ... 이런 식으로 들어가게 된다.

 

print() 함수의 "s[ i ]"의 i 에는 정수 인덱스가 들어가야 되는데 알파벳이 들어가서 오류가 출력되는 것이다.(오류 : TypeError: string indices must be integers, not 'str')

 

이를 해결하기 위해 for 문의 " s "를 "range(len(s))"로 변경하거나 print() 함수 내의 "s[ i ]"를 " i "로 변경하여야 한다.

// 풀이 1


s = "Python"

for i in range(len(s)):
  print(s[i], end = "")
  
  
  
// 풀이 2


s = "Python"

for i in s:
  print(i, end = "")

 

 

연습 문제 2-4)

다음 코드를 실행하면 오류가 발생한다. 그 원인을 설명하고 코드를 수정하시오

s = "3.14"

print(int(s))

 

풀이)

위의 코드는 변수 s에 저장된 문자열 3.14를 숫자로 형 변환을 해서 출력하려고 하는 코드이다.

 

그러나 3.14는 실수형인데 정수형인 int를 사용해서 형 변환을 하였으므로 오류가 발생한다.(오류 : ValueError: invalid literal for int() with base 10: '3.14')

 

int를 float로 고쳐주어야 오류가 출력되지 않는다.

s = "3.14"

print(float(s))

 

 

연습 문제 2-5)

다음 코드를 실행하면 오류가 발생한다. 그 원인을 설명하고 코드를 수정하시오

print(chr("A" + 1))

 

풀이)

위 코드의 print() 함수 안의 chr() 함수는 정수에 해당하는 문자를 반환하는 함수이다. 그런데 chr() 함수 안에 "A"라는 문자가 들어있으므로 오류가 발생하는 것이다.(오류 : TypeError: can only concatenate str (not "int") to str)

 

문자에 해당하는 정수를 반환하는 ord() 함수를 사용하여 "chr("A" + 1)"을 "chr(ord("A") + 1)"로 고쳐주어야 한다.

print(chr(ord("A") + 1))

 

 

연습 문제 3)

변수 s에 저장된 문자열 오른쪽의 "kg"을 제거하기 위해 다음과 같이 코드를 작성했으나 원하는 결과가 나오지 않았다. 그 원인을 설명하고 코드를 수정하시오

s = "77kg"

if s.find("kg") == -1:
  print(s.rstrip("kg"))
else:
  print(s)

 

풀이)

위 코드의 if 문을 보면 "if s.find("kg") == -1" 이라고 작성되어 있는데 이는 문자열 내에 "kg"가 없을 때 참이 된다.

 

그런데 변수 s의 문자열 값은 "kg"를 포함하고 있으므로 else 문이 출력되어 "77kg" 이 출력되는 것이다.

 

if 문의 "=="를 "!="로 바꿔줘야 한다.

s = "77kg"

if s.find("kg") != -1:
  print(s.rstrip("kg"))
else:
  print(s)

 

 

연습 문제 4)

입력받은 문자열을 거꾸로 뒤집어서 변수 b에 저장하는 프로그램을 작성하시오

 

풀이)

a = input("문자열 입력 : ")
b = ''

for i in range(len(a) - 1, -1, -1):
  b += a[i]

print(b)

 

 

연습 문제 5)

입력받은 문자열에서 첫 번째 문자와 마지막 문자를 비교하고, 두 번째 문자와 끝에서 두 번째 문자를 비교하는 식으로 회문을 판별하는 프로그램을 작성하시오

 

풀이)

s = input("문자열 입력 : ")
check = 1

for i in range(len(s)//2):
  if s[i] != s[-1-i]:
    check = 0
    break

if check == 1:
  print("회문입니다.")
else:
  print("회문이 아닙니다.")

 

 

연습 문제 6)

키(cm)와 몸무게(kg)를 입력받아 체질량지수를 구하는 프로그램을 작성하시오

체질량지수 = 몸무게 / 키 * 키

 

풀이)

height = input("키(cm) 입력 : ")
weight = input("몸무게(kg) 입력 : ")

if height.find("cm") != -1:
  height = float(height.replace("cm", ""))
else:
  height = float(height)

if weight.find("kg") != -1:
  weight = float(weight.replace("kg", ""))
else:
  weight = float(weight)

bmi = weight / (height/100 * height/100)

print(bmi)

 

 


 

 

Ⅳ. 프로그래밍 문제

프로그래밍 문제 1)

입력받은 문자열의 길이가 4 이상이면서 "zzz"가 포함되어있지 않으면 "pass"를 출력하고, 그렇지 않으면 "fail"을 출력하는 프로그램을 작성하시오

 

풀이)

s = input("문자열 입력 : ")

if len(s) >= 4 and s.find("zzz") == -1:
  print("pass")
else:
  print("fail")

 

 

프로그래밍 문제 2)

입력받은 문자열에서 영어 스펠링의 개수, 숫자 개수, 기타 문자의 개수를 세는 프로그램을 작성하시오

 

풀이)

al = "abcdefghijklmnopqrstuvwxyz"
num = "0123456789"

al_sum = 0
num_sum = 0
other_sum = 0

s = input("문자열 입력 : ")

for i in range(len(s)):
  if s[i].lower() in al:
    al_sum += 1
  elif s[i] in num:
    num_sum += 1
  else:
    other_sum += 1

print(f'스펠링 수 : {al_sum}, 숫자 수 : {num_sum}, 기타 문자 수 : {other_sum}')

 

 

프로그래밍 문제 3)

입력받은 메뉴 목록을 " , "를 구분자로 분리해서 리스트에 저장하는 프로그램을 작성하시오

 

풀이)

menus_input = input("메뉴 입력(여러가지 메뉴 입력 시 \", \"로 구분) : ")

menus = menus_input.split(", ")

print(menus)

 

 

 

끝.

'Python > Basic programming' 카테고리의 다른 글

Ch05. 리스트  (0) 2025.04.03
Ch04. 반복 구조  (0) 2025.03.24
Ch03. 선택 구조  (2) 2025.03.06
Ch02. 변수와 연산자  (0) 2025.03.04
Ch01. 파이썬 기초  (0) 2025.03.03