1부터 사용자가 입력한 숫자까지의 약수와 소수를 리스트에 각각 저장하고, 이것을 출력하는 프로그램
inputNum = int(input('1보다 큰 정수 입력: '))
listA = []
listB = []
for n in range(1, inputNum+1):
if n == 1:
listA.append(n)
else:
if inputNum % n == 0:
listA.append(n)
for number in range(2, inputNum+1):
flag = True
for n in range(2, number):
if number % n == 0:
flag = False
break
if flag:
listB.append(number)
print(f'{inputNum}의 약수: {listA}')
print(f'{inputNum}까지의 소수: {listB}')
'''
1보다 큰 정수 입력: 20
20의 약수: [1, 2, 4, 5, 10, 20]
20까지의 소수: [2, 3, 5, 7, 11, 13, 17, 19]
'''
1부터 100사이에 난수 10개를 생성한 후 짝수와 홀수를 구분해서 리스트에 저장하고 각각의 개수를 출력하는 프로그램
import random
even_list = []
odd_list = []
for i in range(10):
num = random.randint(1, 100)
if num % 2 == 0:
even_list.append(num)
else:
odd_list.append(num)
print("짝수 리스트: ", even_list)
print("짝수 개수: ", len(even_list))
print("홀수 리스트: ", odd_list)
print("홀수 개수: ", len(odd_list))
'''
짝수 리스트: [88, 38, 42]
짝수 개수: 3
홀수 리스트: [53, 81, 65, 1, 87, 53, 19]
홀수 개수: 7
'''
다음은 공원 입장료를 나타낸 표이다. 1일 총 입장객이 100명이라고 할 때, 1일 전체 입장 요금을 구하는 프로그램을 만들어보자. 단, 입장 고객의 나이는 난수를 이용한다.
import random
visitors = []
for n in range(100):
visitors.append(random.randint(1, 100))
group1, group2, group3, group4, group5 = 0,0,0,0,0
for age in visitors:
if age >= 0 and age <= 7:
group1 += 1
elif age >= 8 and age <= 13:
group2 += 1
elif age >= 14 and age <= 19:
group3 += 1
elif age >= 20 and age <= 64:
group4 += 1
else:
group5 += 1
group1Price = group1 * 0
group2Price = group2 * 200
group3Price = group3 * 300
group4Price = group4 * 500
group5Price = group5 * 0
print('-' * 25)
print(f'영유아\t: {group1}명\t: {group1Price}원')
print(f'어린이\t: {group2}명\t: {group2Price}원')
print(f'청소년\t: {group3}명\t: {group3Price}원')
print(f'성인\t\t: {group4}명\t: {group4Price}원')
print(f'어르신\t: {group5}명\t: {group5Price}원')
sum = group1Price + group2Price + group3Price + group4Price + group5Price
sumFormat = format(sum, ',')
print('-' * 25)
print(f'1일 요금 총합계: {sumFormat}원')
print('-' * 25)
'''
-------------------------
영유아 : 12명 : 0원
어린이 : 8명 : 1600원
청소년 : 5명 : 1500원
성인 : 46명 : 23000원
어르신 : 29명 : 0원
-------------------------
1일 요금 총합계: 26,100원
-------------------------
'''
친구 이름 다섯 명을 리스트에 저장하고 오름차순과 내림차순으로 정렬해보자
friends = []
for i in range(5):
friends.append(input('친구 이름 입력: '))
print(f'친구들 : {friends}')
friends.sort()
print(f'오름차순 : {friends}')
friends.sort(reverse=True)
print(f'내림차순 : {friends}')
'''
친구 이름 입력: 바바
친구 이름 입력: 이지
친구 이름 입력: 포포
친구 이름 입력: 나나
친구 이름 입력: 알리
친구들 : ['바바', '이지', '포포', '나나', '알리']
오름차순 : ['나나', '바바', '알리', '이지', '포포']
내림차순 : ['포포', '이지', '알리', '바바', '나나']
'''
중복 숫자 제거
numbers = [2, 22, 7, 8, 9, 2, 7, 3, 5, 2, 7, 1, 3]
print(f'numbers : {numbers}')
for n in numbers:
if numbers.count(n) >= 2:
numbers.remove(n)
print(f'numbers : {numbers}')
'''
numbers : [2, 22, 7, 8, 9, 2, 7, 3, 5, 2, 7, 1, 3]
numbers : [22, 8, 9, 5, 2, 7, 1, 3]
'''
4개의 숫자 중 서로 다른 숫자 2개를 선택해서 만들 수 있는 모든 경우의 수를 출력하는 프로그램
numbers = [4,6,7,9]
result = []
for n1 in numbers:
for n2 in numbers:
if n1==n2:
continue
result.append([n1, n2])
print(f'result : {result}')
print(f'result length: {len(result)}')
'''
result : [[4, 6], [4, 7], [4, 9], [6, 4], [6, 7], [6, 9], [7, 4], [7, 6], [7, 9], [9, 4], [9, 6], [9, 7]]
result length: 12
'''
튜플 합집합 교집합 구하기
tuple1 = (1, 2, 3, 4, 5)
tuple2 = (3, 4, 5, 6, 7)
# 합집합
union = tuple(set(tuple1) | set(tuple2))
print(union) # (1, 2, 3, 4, 5, 6, 7)
# 교집합
intersection = tuple(set(tuple1) & set(tuple2))
print(intersection) # (3, 4, 5)
튜플 슬라이싱
# 튜플 생성
my_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# 슬라이싱을 이용한 부분 튜플 생성
slice_tuple1 = my_tuple[2:6] # (3, 4, 5, 6)
slice_tuple2 = my_tuple[:5] # (1, 2, 3, 4, 5)
slice_tuple3 = my_tuple[5:] # (6, 7, 8, 9, 10)
slice_tuple4 = my_tuple[1:9:2] # (2, 4, 6, 8)
# 슬라이싱을 이용한 튜플 역순 생성
reverse_tuple = my_tuple[::-1] # (10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
# 출력
print(slice_tuple1)
print(slice_tuple2)
print(slice_tuple3)
print(slice_tuple4)
print(reverse_tuple)
'''
(3, 4, 5, 6)
(1, 2, 3, 4, 5)
(6, 7, 8, 9, 10)
(2, 4, 6, 8)
(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
'''
다음 튜플의 과일 개수에 대해서 오름차순 및 내림차순으로 정렬
fruits = ({'수박':8},{'포도':13},{'참외':12},{'사과':17},{'자두':19},{'자몽':15})
fruits = ({'수박':8},{'포도':13},{'참외':12},{'사과':17},{'자두':19},{'자몽':15})
sorted_fruits_asc = sorted(fruits, key=lambda x: list(x.values())[0])
print(sorted_fruits_asc)
sorted_fruits_desc = sorted(fruits, key=lambda x: list(x.values())[0], reverse=True)
print(sorted_fruits_desc)
학급별 학생 수를 나타낸 튜플을 이용해서, 요구 사항에 맞는 데이터를 출력하는 프로그램을 만들어보자
studentCnt = {'cls01': 18, 'cls02': 21, 'cls03': 20, 'cls04': 19, 'cls05': 22, 'cls06': 20, 'cls07': 23, 'cls08': 17}
totalCnt = sum(studentCnt.values())
avgCnt = totalCnt/len(studentCnt)
minCls, minStdCnt = min(studentCnt.items(), key=lambda x: x[1])
maxCls, maxStdCnt = max(studentCnt.items(), key=lambda x: x[1])
deviation = {k: round(v - avgCnt, 2) for k, v in studentCnt.items()}
print(f'전체 학생 수: {totalCnt}명')
print(f'평균 학생 수: {round(avgCnt, 2)}명')
print(f'학생 수가 가장 적은 학급: {minCls}({minStdCnt}명)')
print(f'학생 수가 가장 많은 학급: {maxCls}({maxStdCnt}명)')
print(f'학급별 학생 편차: {deviation}')
'''
전체 학생 수: 160명
평균 학생 수: 20.0명
학생 수가 가장 적은 학급: cls08(17명)
학생 수가 가장 많은 학급: cls07(23명)
학급별 학생 편차: {'cls01': -2.0, 'cls02': 1.0, 'cls03': 0.0, 'cls04': -1.0, 'cls05': 2.0, 'cls06': 0.0, 'cls07': 3.0, 'cls08': -3.0}
'''
과목별 점수를 딕셔너리에 저장하고 출력하는 프로그램
subjects = ['국어','영어','수학','과학','국사']
scores = {}
for s in subjects:
score = input(s + '점수 입력: ')
scores[s] = score
print(f'과목별 점수 : {scores}')
'''
국어점수 입력: 96
영어점수 입력: 92
수학점수 입력: 87
과학점수 입력: 72
국사점수 입력: 64
과목별 점수 : {'국어': '96', '영어': '92', '수학': '87', '과학': '72', '국사': '64'}
'''
삼각형부터 십각형까지의 내각의 합과 내각을 딕셔너리에 저장하는 프로그램을 만들어 보자
angles = {}
for i in range(3, 11):
angle_sum = (i-2)*180
angles[f"{i}각형"] = {"합": angle_sum, "한 변의 내각": angle_sum/i}
print(angles)
#{'3각형': {'합': 180, '한 변의 내각': 60.0}, '4각형': {'합': 360, '한 변의 내각': 90.0}, '5각형': {'합': 540, '한 변의 내각': 108.0}, '6각형': {'합': 720, '한 변의 내각': 120.0}, '7각형': {'합': 900, '한 변의 내각': 128.57142857142858}, '8각형': {'합': 1080, '한 변의 내각': 135.0}, '9각형': {'합': 1260, '한 변의 내각': 140.0}, '10각형': {'합': 1440, '한 변의 내각': 144.0}}
1부터 10까지 각각의 정수에 대한 약수를 저장하는 딕셔너리를 만들고 출력하는 프로그램을 만들어 보자
divisors = {}
for i in range(1, 11):
divisors[i] = []
for j in range(1, i+1):
if i % j == 0:
divisors[i].append(j)
for i in divisors:
print(f"{i}의 약수: {divisors[i]}")
'''
1의 약수: [1]
2의 약수: [1, 2]
3의 약수: [1, 3]
4의 약수: [1, 2, 4]
5의 약수: [1, 5]
6의 약수: [1, 2, 3, 6]
7의 약수: [1, 7]
8의 약수: [1, 2, 4, 8]
9의 약수: [1, 3, 9]
10의 약수: [1, 2, 5, 10]
'''
다음 문구를 공백으로 구분하여 리스트에 저장한 후, 인덱스와 단어를 이용해서 딕셔너리에 저장해보자.
aboutPython = '파이썬은 1991년 프로그래머인 귀도 반 로섬이 발표한 고급 프로그래밍 언어이다.'
word_list = aboutPython.split()
result = {}
for idx, word in enumerate(word_list):
result[idx] = word
print(result)
#{0: '파이썬은', 1: '1991년', 2: '프로그래머인', 3: '귀도', 4: '반', 5: '로섬이', 6: '발표한', 7: '고급', 8: '프로그래밍', 9: '언어이다.'}
다음은 학생 정보 테이블이다. 파이썬에서 학생 정보를 가장 효율적으로 저장하고 관리할 수 있는 자료구조를 선택해서 컨테이너 자료형으로 만들어보자.
students = {'S21-0001': {'이름': '최성훈',
'성구분': 'M',
'전공': '디자인',
'연락처': '010-1234-5678',
'메일': 'hun@gmail.com',
'취미': ['농구', '음악']},
'S21-0002': {'이름': '탁영우',
'성구분': 'M',
'전공': '바리스타',
'연락처': '010-5678-9012',
'메일': 'yeong@gmail.com',
'취미': ['축구']},
'S21-0003': {'이름': '황진영',
'성구분': 'W',
'전공': '음악',
'연락처': '010-9012-3456',
'메일': 'jin@gmail.com',
'취미': ['수영', '코딩']}
}
# 각 회원의 정보 출력
for memNo, student in students.items():
print('-' * 40)
print(f"회원번호 : {memNo}")
for key, value in student.items():
print(f"{key} : {value}")
# 회원번호로 회원 정보 검색
memNo = input('조회할 회원번호를 입력하세요.: ')
if memNo in students:
student = students[memNo]
print(f"{memNo} : {student}")
else:
print(f"{memNo}는 존재하지 않는 회원번호입니다.")