[개발노트] /# Python

(기초1) 구문 예시

PCDuckHu 2018. 9. 11. 21:59

# 생년월일로부터 만 나이 계산하기


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]))