(기초1) 구문 예시
# 생년월일로부터 만 나이 계산하기
print("이름, 생년, 생일(네 자리 수)을 입력하세요:")
name = input("이름: ")
b_year = int(input("생년: "))
b_date = int(input("생일: "))
b_month = b_date // 100
b_day = b_date % 100
c_year = 2018
c_month = 8
c_day = 11
today = c_year * 10000 + c_month * 100 + c_day
birthday = b_year * 10000 + b_month * 100 + b_day
age = (today - birthday) // 10000
print("{} 님의 만나이는 {}세입니다.".format(name, age))
# 주민등록번호로부터 생년월일을 출력
def getbirthday(ssn): # 800512-115566
if ssn[7] in ["1", "2", "5", "6"]:
# year = 1900 + int(ssn[0:2])
year = int("19" + ssn[0:2])
elif ssn[7] in ["3", "4", "7", "8"]:
# year = 2000 + int(ssn[0:2])
year = int("20" + ssn[0:2])
month = int(ssn[2:4])
day = int(ssn[4:6])
return [year, month, day]
ssn = input("주민등록번호 : ")
birthday = getbirthday(ssn)
year = birthday[0]
month = birthday[1]
day = birthday[2]
print("생년월일 : {}년 {}월 {}일".format(year, month, day))
print("생년월일 : {}-{:02}-{:02}".format(year, month, day))
# 네 자리 수 암호 검증 프로그램
def verify(password):
p1 = int(password[0])
p2 = int(password[1])
p3 = int(password[2])
p4 = int(password[3])
# duplicate : 중복되는 숫자가 있는지를 검사
# increment : 4자리 수가 모두 1씩 증가하는지를 검사
# decrement : 4자리 수가 모두 1씩 감소하는지를 검사
duplicate = p1 == p2 or p1 == p3 or p1 == p4 or p2 == p3 or p2 == p4 or p3 == p4
increment = p1 + 1 == p2 and p2 + 1 == p3 and p3 + 1 == p4
decrement = p1 - 1 == p2 and p2 - 1 == p3 and p3 - 1 == p4
if duplicate or increment or decrement:
return False
else:
return True
def print_pass(result):
if result:
print("사용할 수 있는 암호입니다.")
else:
print("사용할 수 없는 암호입니다.")
for i in range(0, 100):
password = input("사용하고자 하는 암호를 입력하세요: ")
result = verify(password)
print_pass(result)
# 사용가능한 암호가 입력될 때까지, 반복적으로 암호 입력받기
# True : -1, 1, "0", "a", [0], [1, 2]
# False : 0, "", [], None
def verify(password):
p1 = int(password[0])
p2 = int(password[1])
p3 = int(password[2])
p4 = int(password[3])
# duplicate : 중복되는 숫자가 있는지를 검사
# increment : 4자리 수가 모두 1씩 증가하는지를 검사
# decrement : 4자리 수가 모두 1씩 감소하는지를 검사
duplicate = p1 == p2 or p1 == p3 or p1 == p4 or p2 == p3 or p2 == p4 or p3 == p4
increment = p1 + 1 == p2 and p2 + 1 == p3 and p3 + 1 == p4
decrement = p1 - 1 == p2 and p2 - 1 == p3 and p3 - 1 == p4
if duplicate or increment or decrement:
return False
else:
return True
# 해결방법 1
"""
password = input("사용할 암호는? ")
while not verify(password):
print("사용할 수 없는 암호입니다.")
password = input("사용할 암호는? ")
print("사용할 수 있는 암호입니다.")
"""
# 해결방법 2
"""
result = False
while not result:
password = input("사용할 암호는? ")
result = verify(password)
if result:
print("사용할 수 있는 암호입니다.")
else:
print("사용할 수 없는 암호입니다.")
"""
# 해결방법 3
"""
while True:
password = input("사용할 암호는? ")
result = verify(password)
if result:
print("사용할 수 있는 암호입니다.")
break
else:
print("사용할 수 없는 암호입니다.")
"""
# Pass/Fail 판정 프로그램
mid = int(input("중간고사 점수: "))
fin = int(input("기말고사 점수: "))
average = mid * 0.4 + fin * 0.6
if average >= 60:
message = "Pass"
else:
message = "Fail"
print("교양음악의 평균은 {:.1f}점이고, 최종학점은 {}입니다.".format(average, message))
# 거스름돈 계산하기
price = int(input("물건 값? "))
money = int(input("받은 돈? "))
change = money - price
if change > 0:
print("다음과 같이 거슬러주세요:")
m1 = change // 10000 # 10000원권 갯수
m2 = (change - 10000 * m1) // 5000
m3 = (change - 10000 * m1 - 5000 * m2) // 1000
if m1 > 0:
print("10000 x {}장".format(m1))
if m2 > 0:
print(" 5000 x {}장".format(m2))
if m3 > 0:
print(" 1000 x {}장".format(m3))
# 입장료 계산하기
# 성인(age >= 18) : 입장료 8000
# 미성년(age < 18) : 입장료 4000
# 나이를 입력받아 다음과 같은 메시지를 출력한다.
# 요금은 8000원입니다., 요금은 4000원입니다.
def computefee(age):
if age >= 18:
fee = 8000
else: # age < 18
fee = 4000
return fee
age = int(input("나이가 몇입니까? "))
fee = computefee(age)
print("요금은 {}원입니다.".format(fee))
# 세 개의 점수 가운데 최고점 찾기
def findmax(s1, s2, s3):
max = s1
if max < s2:
max = s2
if max < s3:
max = s3
return max
print("세 번의 TOFEL 점수를 입력하세요.")
score1 = int(input("시험1: "))
score2 = int(input("시험2: "))
score3 = int(input("시험3: "))
maximum = findmax(score1, score2, score3)
print("최고점: {}".format(maximum))
# 평균 점수로부터 합격/불합격 여부를 판정 프로그램
def findaverage(scores):
name = scores[0]
avg = (int(scores[1]) + int(scores[2]) + int(scores[3])) / 3
return [name, avg] # [이름, 평균]
scores = input("학생명과 세 개의 점수: ").split()
result = findaverage(scores)
name = result[0]
avg = result[1]
if avg >= 60:
message = "합격"
else:
message = "불합격"
print("'{}'님의 평균점수는 {:.1f}점이고, {}입니다.".format(name, avg, message))
# 세금계산
# 1구간 - 0 ~ 1000 : 세율 0%
# 2구간 - 1000 ~ 2400 : 세율 10%
# 3구간 - 2400 ~ 4000 : 세율 12%
# 4구간 - 4000 ~ 6000 : 세율 15%
# 5구간 - 6000 ~ : 세율 20%
# 소득(3500) = 1구간(1000) * 0% + 2구간(1400) * 10% + 3구간(1100) * 12%
def findtax(income):
if income <= 1000:
tax = income * 0
elif income <= 2400:
tax = 1000 * 0 + (income - 1000) * 0.1
elif income <= 4000:
tax = 1000 * 0 + 1400 * 0.1 + (income - 2400) * 0.12
elif income <= 6000:
tax = 1000 * 0 + 1400 * 0.1 + 1600 * 0.12 + (income - 4000) * 0.15
else: # elif 6000 < income:
tax = 1000 * 0 + 1400 * 0.1 + 1600 * 0.12 + 2000 * 0.15 + (income - 6000) * 0.2
return tax
income = int(input("연소득을 입력하세요: "))
tax = findtax(income)
print("소득세 = {}".format(tax))
중첩 For문
# 학생들의 TOFEL 점수들을 입력받아 최고 높은 평균점수를 반환하는 함수
# 1. 학생들마다의 평균점수를 찾아야하고,
# 2. 평균 점수들 중에 가장 높은 점수를 반환한다.
# max = 0 , sum = 0 , avg, if max < avg
def str2int(slist):
nlist = []
for s in slist:
nlist.append(int(s))
return nlist
def findavg(students):
avgs = []
for student in students:
sum = 0
for score in student:
sum = sum + score
avg = round(sum / len(student), 1)
avgs.append(avg)
return avgs
kim = input("학생1 점수: ").split()
park = input("학생2 점수: ").split()
lee = input("학생3 점수: ").split()
kim = str2int(kim)
park = str2int(park)
lee = str2int(lee)
students = [kim, park, lee]
avgs = findavg(students)
print("학생별 평균 점수들 : {}".format(avgs))
# best = findbest(students)
# print("가장 높은 평균 점수는 {:.1f}점입니다.".format(best))
# 반장 선거
def str2int(slist):
nlist = []
for s in slist:
nlist.append(int(s))
return nlist
def countvotes(num, votes):
earns = [0] * num
for vote in votes:
# earns[vote - 1] += 1
earns[vote - 1] = earns[vote - 1] + 1
return earns
def printearns(earns):
for i in range(0, len(earns)):
print("기호 : {:2}, 득표 수 : {}".format(i + 1, earns[i]))
def printwinner(earns):
max = 0
for i in range(0, len(earns)):
if max < earns[i]:
max = earns[i]
maxidx = i
print("최다득표자 : 기호 {}".format(maxidx + 1))
num = int(input("총 후보자수 : ")) # 숫자 y
votes = input("투표 내용 : ").split() # (x x x x x x x) x:투표자의 기호 (각 x는 y의 범위를 넘지 못함)
votes = str2int(votes)
earns = countvotes(num, votes)
printearns(earns)
printwinner(earns)
# 목록의 원소 판단하기 (홀짝)
def str2int(slist):
nlist = []
for s in slist:
nlist.append(int(s))
return nlist
# findeven()함수는 인자로 목록이 들어오면,
# 목록안에 원소가 모두 짝수이면, True 반환하고,
# 1개이상의 홀수가 있으면, False 반환한다.
def findeven(numbers):
"""
for number in numbers:
if number % 2 == 1:
return False
return True
"""
i = 0
while numbers[i] % 2 == 0:
i = i + 1
if i == len(numbers):
break
if i == len(numbers):
return True
else:
return False
numbers = input("수의 목록 : ").split()
numbers = str2int(numbers)
result = findeven(numbers)
if result:
print("짝수들의 목록입니다.")
else:
print("홀수가 포함되어있습니다.")
# 원소의 목록에 대한 멤머쉽 검사
def member(list, item):
i = 0
mem = False
while i < len(list) and not mem :
if list[i] == item:
mem = True
i = i + 1
return mem
tom = ['car', 'dog', 'house', 'car', 'bike', 'yaght']
item = input("어떤 값이 목록에 있는지 궁금하세요? ")
result = member(tom, item)
if result:
print("예, 있습니다.")
else:
print("아니오, 없습니다.")
# 입력된 인자로부터 최고점과 최저점을 반환하는 함수
def findmaxmin(s1, s2, s3):
max = min = s1
if max < s2:
max = s2
if max < s3:
max = s3
if min > s2:
min = s2
if min > s3:
min = s3
return [max, min]
print("세번의 TOFEL점수를 입력하세요:")
s1 = int(input("점수1 : "))
s2 = int(input("점수2 : "))
s3 = int(input("점수3 : "))
result = findmaxmin(s1, s2, s3)
print("최고점 = {} , 최저점 = {}".format(result[0], result[1]))