반응형
SMALL

'전체 글'에 해당되는 글 209건

반응형
LIST
반응형
SMALL

이 프로그램 만들려고 이틀은 고민을 해봤던거 같다. 총 62스텝정도 나왔는데 자바나 C로 짤라고 하면 100스텝은 족히 넘어간다;; 앞서 공부했던거 전부 응용해야 하는 꽤 난이도 있는 프로그램이었다.(좀 똑똑한 교수님들은 코딩의 기초를 다진다고 이거 한 번 짜보라고 분명 과제 내줬을 것이다.) 난수, 반복문, 변수들의 적절한 조화가 이루어져야 나오는 프로그램이라고 볼 수 있다. 컴퓨터가 생각한 숫자를 맞추는 건데 숫자가 맞으면 스트라이크, 숫자가 맞긴한데 위치가 틀린거면 볼이라고 판정되어 나온다. 그래서 짤 때 숫자가 저장될 공간등을 잘 생각해서 코딩해줘야 한다. 코드는 아래와 같다.


from random import randint

def generate_numbers():
# 숫자 3개를 보관할 리스트 생성
numbers = []

# 3개의 요소가 있을때까지 반복
while len(numbers) < 3:
# 새로 뽑은 수가 numbers에 없을 경우에만 추가
new_number = randint(0,9)
if new_number not in numbers:
numbers.append(new_number)


# 리스트 리턴
return numbers

# 정답 뽑기
ANSWER = generate_numbers()

# 변수 초기값 설정
tries = 0 # 시도 횟수
strike_count = 0 # 스트라이크 개수
ball_count = 0 # 볼 개수

# 번호를 모두 맞출때까지 반복
while strike_count < 3:
# 번호 3개 입력 받기
guess = []
while len(guess) < 3:
# 새로 입력한 수가 guess에 없을 경우에만 추가
new_number = int(input("%d번째 수를 입력하세요: " % (len(guess) + 1)))

# 범위를 벗어나면 설명메시지 출력
if new_number < 0 or new_number > 9:
print("0에서 9까지의 수를 입력해주세요!")
# 중복된 수를 입력하면 설명 메시지 출력
elif new_number in guess:
print("새로운 수를 입력해주세요!")
# 타당한 값이면 guess에 추가!
else:
guess.append(new_number)

# 스트라이크 볼 개수 세기
strike_count = 0 # 스트라이크 개수
ball_count = 0 # 볼 개수
i = 0 # 인덱싱 변수

while i < 3:
if guess[i] == ANSWER[i]:
strike_count = strike_count + 1
elif guess[i] in ANSWER:
ball_count = ball_count + 1
i = i + 1

print("%dS %dB" % (strike_count, ball_count))

# 시도 횟수 추가
tries = tries + 1

# 축하 메시지
print("축하합니다 %d번 만에 세 숫자의 값과 위치를 모두 맞추셨습니다." % (tries))

ㅋㅋ 친절하게 주석까지 달아놨다. 저거 짜다 종이 2장은 썼던 것 같다.(코딩의 기본은 설계) 저 코드를 실행시키면 다음과 같은 화면이 나온다.


나는 운좋게 3번만에 맞춰서 저렇게 나왔지만 안나오면 계속 입력해봐야한다-_-;; 20번만에 맞추면 20번만에 맞췄다고 아래 메시지가 뜨게 된다. 그리고 중복된 값을 입력하게 되면 중복된값이라고 다시 입력하라는 메시지가 뜰 것이다. 애초에 설계할때 그렇게 해놨다. 파이참에 저 코드 그대로 입력하면 저대로 잘 나올것이다. 난수의 활용, while문, elif문 사용법에 대해 많이 익히게 될 프로그램 일 것이다.

반응형
LIST

'프로그래밍언어 > PYTHON' 카테고리의 다른 글

자리수의 합 구하기  (0) 2017.08.13
피타고라스 수  (0) 2017.08.13
환전 프로그램  (0) 2017.07.23
온도변환프로그램  (0) 2017.07.23
구구단 프로그램  (0) 2017.07.12
블로그 이미지

만년필석사

,
반응형
SMALL

앞서 짜봤던 온도변환프로그램이랑 구조가 거의 비슷했기 때문에 쉽게 짤 수 있었다. return, while문을 연습해보려고 했던 거였는데 벌써 비슷한 프로그램이 2개나 나왔다..ㅋㅋ 환전 프로그램 코드는 다음과 같다.


# 원(₩)에서 달러($)로 바꿔주는 함수
def krw_to_usd(won):
return won / 1000


# 달러($)에서 엔(¥)로 바꿔주는 함수
def usd_to_jpy(dollars):
return dollars / 8


# 원(₩)으로 각각 얼마인가요?
amounts = [1000, 2000, 3000, 5000, 8000, 13000, 21000, 34000]
print("한국 화폐: " + str(amounts))

# amounts를 원(₩)에서 달러($)로 바꿔주기
i = 0
while i < 8:
amounts[i] = round(krw_to_usd(amounts[i]), 1)
i = i + 1
print("미국 화폐: " + str(amounts))

# amounts를 달러($)에서 엔(¥)으로 바꿔주기
amounts = [1000, 2000, 3000, 5000, 8000, 13000, 21000, 34000]
i = 0
while i < 8:
amounts[i] = round(usd_to_jpy(amounts[i]), 1)
i = i + 1
print("일본 화폐: " + str(amounts))

어떤가? 프로그램 구조는 거의 비슷하다. 단지 조금 더 응용해 추가했을뿐 구조자체가 바뀌고 말고 한게 한개도 없을 정도이다.

결과는 다음과 같이 나온다.



환전이 아주 잘됐음을 보여준다. 굳이 네이버 검색쳐서 환전시스템 안돌려도 내 프로그램으로 이렇게 정확하게 환산이 됨을 알 수 있다.

물론 환율이 얼만지는 그때그때 반영해 줘야겠지..ㅋㅋ


반응형
LIST

'프로그래밍언어 > PYTHON' 카테고리의 다른 글

피타고라스 수  (0) 2017.08.13
숫자야구게임  (0) 2017.07.23
온도변환프로그램  (0) 2017.07.23
구구단 프로그램  (0) 2017.07.12
숫자맞추기 프로그램  (0) 2017.07.12
블로그 이미지

만년필석사

,
반응형
SMALL

리스트를 이용해 온도변환 프로그램을 짜보았다. 섭씨온도를 화씨온도로 바꾸는 프로그램인데 그닥 길고 어렵진 않았지만 return 값에 대해 다시 한 번 생각해보며 만들었어야 하는 프로그램이었다. 프로그램 짠 건 다음과 같다.


# 화씨 온도에서 섭씨 온도로 바꿔주는 함수
def fahrenheit_to_celsius(fahrenheit):
return (fahrenheit - 32) * 5 / 9

# 테스트용 온도 리스트
sample_temperature_list = [40, 15, 32, 64, -4, 11]

# 화씨 온도 출력
print("화씨 온도 리스트: " + str(sample_temperature_list))

# 리스트의 값들을 화씨에서 섭씨로 변환
i = 0
while i < len(sample_temperature_list):
sample_temperature_list[i] = round(fahrenheit_to_celsius(sample_temperature_list[i]),2) # 소수 둘째짜리까지 반올림
i = i + 1
print("섭씨 온도 리스트: " + str(sample_temperature_list))

겉보기엔 복잡하게 보일수도 있지만 코드 천천히 살펴보면 그렇게 어려운 코드는 아니다. round함수는 반올림 할 때 쓰는 함수인데

나는 둘째짜리까지 반올림하고싶어서 쓴 함수였다. 결과를 실행하면 다음과 같이 나온다.



온도가 정확하게 변했다는 것을 확인할 수 있다. 파이썬으로도 이렇게 재밌는 프로그램들을 몇스텝 안되고도 잘 만들 수 있다. 이 프로그램

의 핵심은 return문과 while문이다.


반응형
LIST

'프로그래밍언어 > PYTHON' 카테고리의 다른 글

숫자야구게임  (0) 2017.07.23
환전 프로그램  (0) 2017.07.23
구구단 프로그램  (0) 2017.07.12
숫자맞추기 프로그램  (0) 2017.07.12
택이의 우승상금 프로그램  (0) 2017.07.11
블로그 이미지

만년필석사

,
반응형
SMALL

프로그래밍 언어 공부를 하는 사람이라면 C나 java갖다가 반복문 문법을 공부할때 가장 먼저 짜보는게 구구단일 것이다. C나 java로 구현해보면 은근 코드라인수가 길 것이다. 하지만 python은 단 몇줄만으로 구구단 1~9단까지 한번에 구현한다. 구구단 코드는 다음과 같다.

# 구구단
i = 0
while i < 9:
i = i + 1
j = 1
while j <= 9:
print("%d * %d = %d" % (i, j, i * j))
j = j + 1

무지하게 간단하다는 걸 볼 수 있다. i를 증가시키고 j를 넣어 +를 해주면서 반복을 돌리게 되면 1~9단까지 쭉 출력이

된다. 결과는 다음과 같다.


9까지 곱해지고 그 다음단으로 가게 되면 정상적으로 출력된다. 저거 말고도 하는 법은 더 여러가지가 있으니 각자 취향

에 맞게 짜길 권장한다.


반응형
LIST

'프로그래밍언어 > PYTHON' 카테고리의 다른 글

환전 프로그램  (0) 2017.07.23
온도변환프로그램  (0) 2017.07.23
숫자맞추기 프로그램  (0) 2017.07.12
택이의 우승상금 프로그램  (0) 2017.07.11
피보나치 수열 프로그램  (0) 2017.07.11
블로그 이미지

만년필석사

,
반응형
SMALL

파이썬은 random 모듈이라는 것이 있다. random 모듈의 정의는 두 정수 사이에 난수를 리턴시키는 함수 값이다. 되게 재밌는건 1,20을 random함수 안에 설정해 놓으면 1~20사이에 랜덤한 숫자가 print를 통해 출력이 된다. 그래서 이 함수로 여러가지 재밌는 프로그램을 만들 수 있다. 근데 어떤원리로 리턴되고 정의되는지부터 확실히 공부할 필요가 있다. 그래서 이 함수로 첫번째로 만들어본 프로그램은 숫자맞추기 프로그램이었다. 총 기회는 4회가 주어지며 이 안으로 컴퓨터가 랜덤으로 뽑은 숫자를 내가 맞춰야 하는 게임이다. 4번안으로 못맞추면 아쉽다는 메시지를 보내며 정답을 알려준다. 어찌보면 참 단순한 프로그램인데 생각외로 구현하긴 쉽진 않았다. 특히 while문쪽에서 좀 애를 먹었다. 내가 짠 소스는 다음과 같다.


from random import randint

chance = 4 # 주어지는 기회
ANSWER = randint(1,20) # 1~20까지 숫자들

while (chance != 0):
enter = int(input("기회가 %d번 남았습니다. 1-20 사이의 숫자를 맞춰보세요: " % chance))
# 사용자가 입력한 답과 컴퓨터가 생각해놓은 답을 비교해 판정한다.
if ANSWER > enter:
chance = chance - 1
print("Up")
elif ANSWER < enter:
chance = chance - 1
print("Down")
else:
print("축하합니다. %d번만에 숫자를 맞추셨습니다." % (5 - chance))
break
else:
print("아쉽습니다 정답은 %d였습니다." % (ANSWER))

코드길이는 짧은듯 하지만 쉽진않아서 택이의우승상금 풀때처럼 종이에 그림 그려가면서 코드를 짜보았다.

특히 마지막 else문은 전역변수로 빼주어야 코드가 정상적으로 작동했다. 실행결과는 아래 그림과 같다.



기회를 좀 더 주고 싶으면 chance부분을 수정하면 된다. 또 다른방법으로도 짜는 방법이 있을테니 그건 각자

생각해서 짜보는 것도 좋을 것 같다. random모듈은 많은 프로그램을 짤 수 있는 유용한 함수이다.


반응형
LIST

'프로그래밍언어 > PYTHON' 카테고리의 다른 글

온도변환프로그램  (0) 2017.07.23
구구단 프로그램  (0) 2017.07.12
택이의 우승상금 프로그램  (0) 2017.07.11
피보나치 수열 프로그램  (0) 2017.07.11
학점계산기 프로그램  (0) 2017.07.10
블로그 이미지

만년필석사

,
반응형
SMALL

되게 재밌는 문제기도 해서 올려본다. 택이가 우승상금으로 5천만원을 받았는데 동일이아저씨는 이걸 은행에다 넣으면 1년에 이자가 0.12%가 붙어 5600만원이 되고 6200만원이 된다고 했고 이런식으로 년마다 증가하게 되고 미란아주머니는 생돈을 왜 은행에다 넣어놓느냐고 5천만원짜리 아파트를 사라고 했다. 그럼 두가지 조건중에 택이한테는 더 이득이 될까? 2016년 기준으로 5천만원짜리 아파트는 11억이 되었다.


일단 이문제를 풀라면 이자 계산하는 방법을 알아야 한다. 이자가 0.12% 증가한댔으니 1+0.12를 해주면 쉽게 해결될 문제기도 하다. 조건문을 공부하기 위한 문제였는데 이자율 계산과 변수명 값 설정 때문에 10분정도 고민을 해봤던 것 같다. 코드는 다음과 같다.


INTER_RATE = 0.12
APARTMENT_PRICE = 1100000000
year = 1988
money = 50000000
count = 0
while year < 2016:

money = money * (1 + INTER_RATE)
year = year + 1

if APARTMENT_PRICE < money:
count = money - APARTMENT_PRICE
print("%d원 차이로 건주의 말씀이 맞습니다." % (count))
if APARTMENT_PRICE > money:
count = money - APARTMENT_PRICE
print("%d원 차이로 미란아주머니의 말씀이 맞습니다." % (count))

생각보다 몇줄 안되는 코드이다. 변수명값 설정이 좀 오래 걸려서 그렇지 while, if문 구현하는 방법은 어렵지 않다.

그냥 어떤게 이득인지 아닌지만 잘 구별하면 쉽게 풀 수 있는 문제다. 결과값은 다음과 같다.



이런식으로 나오면 결과가 잘 나온거다. 결국은 은행에다 넣어놓아야 한다고 주장한 내말이 맞은 셈이다.

저 코드 말고 이렇게 짜는 방식도 있다.


# 상수 정의
INTEREST_RATE = 12
APARTMENT_PRICE = 1100000000

# 변수 정의
year = 1988
amount = 50000000

while year < 2016:
amount = amount + INTEREST_RATE / 100 * amount
year = year + 1

if amount > APARTMENT_PRICE:
print("%d원 차이로 건주의 말씀이 맞습니다." % (amount - APARTMENT_PRICE))
elif amount < APARTMENT_PRICE:
print("%d원 차이로 미란아주머니의 말씀이 맞습니다." % (APARTMENT_PRICE - amount))
else:
print("똑같습니다.")

이것도 동일한 결과가 나오는데 elif를 사용해서 조금 더 간결하고 이쁘게 짠 정석코드이다. 프로그래밍은 한가지

방법만 있는게 아닌 여러가지로 짜는법이 있으니 많이 연습해 두면 좋을 것 같다.


반응형
LIST

'프로그래밍언어 > PYTHON' 카테고리의 다른 글

구구단 프로그램  (0) 2017.07.12
숫자맞추기 프로그램  (0) 2017.07.12
피보나치 수열 프로그램  (0) 2017.07.11
학점계산기 프로그램  (0) 2017.07.10
짝수,홀수 구분하기 프로그램  (0) 2017.07.10
블로그 이미지

만년필석사

,
반응형
SMALL

피보나치 수열은 워낙 유명한 수열이라 C나 JAVA를 공부한 사람들은 다 한번씩 접해 봤을 수열일 것이다. 이번엔 파이썬으로 짜본거였는데 스텝수도 몇개 안될만큼 무지하게 간단하다. C로 짜려고 하면 스텝수 이거에 2배는 나올 수 있다.(물론 짜는사람마다 다르겠지만)


파이썬으로 피보나치 수열을 짜본 결과는 다음과 같다.


# 변수
previous = 0
current = 1
temp = 0
i = 0

while i <= 20:
print(current)

previous = current
current = temp
temp = previous


current = previous + current // 저장된 값에 더하기
i= i + 1 // 루프증가

1 1 2 3 5 이런식으로 가정되있으면 1+1 = 2, 1+2 = 3 이런식으로 해서 원하는 항의 수를 설정하면 그 항까지만 더하고 멈춘다. 이 방법말고도 조금 더 간결하게 짜는 방법이 있는데 그건 독자들이 한번 고민해보고 짜봤으면 하는 바램이다.

반응형
LIST

'프로그래밍언어 > PYTHON' 카테고리의 다른 글

숫자맞추기 프로그램  (0) 2017.07.12
택이의 우승상금 프로그램  (0) 2017.07.11
학점계산기 프로그램  (0) 2017.07.10
짝수,홀수 구분하기 프로그램  (0) 2017.07.10
거스름돈 계산 프로그램  (0) 2017.07.09
블로그 이미지

만년필석사

,
반응형
SMALL

학점계산기 프로그램은 대표적으로 if, else, elif를 공부할때 만들어보기 참 좋은 프로그램이다. 기본적으로 C언어도 if, else elseif가 다있지만 간단한 프로그램은 괜찮은데 복잡한 프로그램을 만들시에 코드는 엄청나게 지저분해진다. if else안에 또 if를 쓰고 else를 쓰고 이러다보면 코드는 어느새 심하게 말하면 난장판이 된다. 하지만 파이썬은 elif라는 함수가 있어 if와 else를 합쳐줘서 코드를 간결하고 이쁘게 만들어준다. 그래서 복잡한 프로그램을 만들때 매우 유용하게 쓰일 수 있다. 이런점이 사람들이 파이썬에 열광하는 이유가 아닐까 싶다. 


학점계산기를 만들때 필자는 90이상이면 A 80~89점은 B 70~79점은 C 60~69은 D 그 이하는 F를 주는 전제로 프로그램을 만들었다. 코드는 다음과 같다.

def print_grade(midterm, final):
total = midterm + final
if total >= 90:
print("You get an A")
elif total >= 80:
print("You get an B")
elif total >= 70:
print("You get an C")
elif total >= 60:
print("You get an D")
else:
print('You fail')
# 테스트
print_grade(40, 45)
print_grade(20, 35)
print_grade(30, 32)
print_grade(50, 45)



의외로 몇줄 안될 정도로 간단하다. C언어로 저거 짜보면 코드길이 저거에 2~3배 길어진다는건

짜본 사람은 알 것이다. 그정도로 파이썬은 간결하고 이쁘게 짤 수 있다. elif를 사용한 이유는

80~89점의 값을 계산할때 if else를 써야 값이 나오는데 elif를 쓸때 코드길이가 간결해지면서

if else를 하나로 합쳐준다. 위 코드를 실행시키면 다음과 같은 결과가 나온다.



정확히 결과가 나온게 보인다. 85점은 B학점 55점은 F 이런식으로 나온다. 이렇듯 파이썬으론

몇줄 안되는 코드로 학점계산기도 간단하게 만들 수 있다.


반응형
LIST

'프로그래밍언어 > PYTHON' 카테고리의 다른 글

택이의 우승상금 프로그램  (0) 2017.07.11
피보나치 수열 프로그램  (0) 2017.07.11
짝수,홀수 구분하기 프로그램  (0) 2017.07.10
거스름돈 계산 프로그램  (0) 2017.07.09
파이썬의 기초  (0) 2017.07.09
블로그 이미지

만년필석사

,