파이썬/개념

[알기 쉽게 해설한 파이썬 with 컴퓨팅 사고력] Chapter 06 연습 문제

2024. 11. 19. 21:50
728x90

01. 입력된 문자가 회문(앞뒤에서 읽어도 같은 문자)인지를 판별하는 프로그램을 작성하시오. 단 대소문자를 같은 문자로 취급하고, 문자열에 공백이 있을 경우 공백을 제고하고 판단하시오.

문자열을 입력 : Madam
회문입니다
문자열을 입력 : Nurses Run
회문입니다
문자열을 입력 : cskim run
회문이 아닙니다
string = input("문자열을 입력 : ")
stringList = ''.join(string.split()).lower()

if stringList == stringList[::-1]:
    print("회문입니다")
else:
    print("회문이 아닙니다")

 

 

 

02. 1부터 1000 사이의 소수를 구하여 리스트에 저장한 후, 소수와 소수의 개수를 출력하는 프로그램을 작성하시오.

numList = []
count = 0

for i in range(2, 1001):
    for j in range(2, i):
        if (i % j == 0):
            break
    else:
        numList.append(i)

print(numList)
print(len(numList))
실행 결과

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]

168

 

 

 

03. 다음과 같은 리스트를 생성하고, 회전 횟수를 입력받아 입력된 횟수만큼 회전된 리스트를 출력하는 프로그램을 작성하시오.

최초의 리스트 : [1,2,3,4,5,6,7,8,9,10]
회전 횟수 : 3
3회전된 리스트 : [8,9,10,1,2,3,4,5,6,7]
firstList = list(map(int, input("최초의 리스트 : ").split(",")))
rotation = int(input("회전 횟수 : "))

rotationList = [0] * len(firstList)

for i in range(len(firstList)):
    new_index = (i + rotation) % len(firstList)  # 회전된 위치 계산
    rotationList[new_index] = firstList[i]

print(rotation, "회전된 리스트 : ", rotationList)

 

 

 

04. 다음과 같은 튜플에서 중복된 숫자와 중복 횟수를 출력하고, 중복이 제거된 요소를 리스트로 출력하는 프로그램을 작성하시오.

최초의 튜플 : (1,2,4,4,2,3,7,7,9,3)
중복된 숫자 : 2, 2회
중복된 숫자 : 4, 2회
중복된 숫자 : 3, 2회
중복된 숫자 : 7, 2회
중복이 제거된 리스트 : [1,2,3,4,7,9]
firstTuple = tuple(map(int, input("최초의 튜플 : ").split(",")))
tubleList = []

for i in range(len(firstTuple)):
    if firstTuple.count(firstTuple[i]) >= 2 and firstTuple[i] not in tubleList:
        print("중복된 숫자 : ", firstTuple[i], ",", firstTuple.count(firstTuple[i]), "회")
        tubleList.append(firstTuple[i])

tubleList = list(set(firstTuple))
tubleList.sort()

print("중복이 제거된 리스트 : ", tubleList)

 

 

 

05. 실행 결과를 참조하여 학생들의 답안을 채점하는 파이썬 프로그램을 작성하시오. 5명의 학생들이 제출한 답안지의 답을 아래와 같이 내포된 리스트(2차원)를 생성한 뒤, 문제의 문제의 정답을 프로그램에서 입력받아 학생들의 점수를 출력하시오.

학생1  1,3,2,4,3,1,4,2,2,1
학생2  3,2,4,2,2,1,1,3,4,1
학생3  2,4,3,2,1,2,1,3,3,4
학생4  2,3,3,1,1,3,2,2,4,4
학생5  3,1,1,2,4,1,2,3,1,3
print("정답을 입력하세요")

correctAnswer = []

for i in range(1, 11):
    answer = input(f"{i}번 : ")
    correctAnswer.append(int(answer))

studentList = [["학생1", "학생2", "학생3", "학생4", "학생5"],
               [1, 3, 2, 4, 3, 1, 4, 2, 2, 1],
               [3, 2, 4, 2, 2, 1, 1, 3, 4, 1],
               [2, 4, 3, 2, 1, 2, 1, 3, 3, 4],
               [2, 3, 3, 1, 1, 3, 2, 2, 4, 4],
               [3, 1, 1, 2, 4, 1, 2, 3, 1, 3]]

for j in range(len(studentList[0])):
    correct = 0
    for k in range(10):
        if studentList[j+1][k] == correctAnswer[k]:
            correct += 1
    print(f"{studentList[0][j]}의 점수 : {correct}점")