파이썬 다시 입력받기 - paisseon dasi iblyeogbadgi

num,result,i = 0,0,1 while True: num = int(input("1~10 숫자 입력 : ")) if num<1 or num>10: print("잘못 입력하셨습니다. 다시 입력해주세요.") continue break while i<=num: result += i; i += 1 print("1 부터",num,"까지의 합 :",result)

수고하셨습니다! Challege 2를 여러분 스스로의 힘으로 해내셨다면, 이제 무엇이든 사용하는 방법만 익힌다면 만드실 수 있을 것이라고 생각됩니다. 하지만 지금까지 만든 프로그램으로 일반 사람들이 프로그램을 사용하게 된다면 에러가 많다고 항의가 들어올 수 있습니다. 지금 시간에는 더욱 디테일하게 게임을 만들어보는 시간을 가져보겠습니다.

Challenge 1을 통하여 31까지 말하도록 처리해주신 분이 있다면, 정말 훌륭하십니다! 그래도 한 번 같이 보겠습니다. 모범 답안으로 짜여진 코드에는 반복문의 종료 조건이 31보다 크거나 같으면 종료가 됩니다. 따라서 마지막에 호출하는 사람이 31을 넘어서까지 말할 수 있습니다. 이를 방지하기 위해서 번호를 출력할 때, 31을 호출하는지 판단해서 31보다 큰 수가 호출된다면 반복문을 빠져나오는 코드를 추가해주도록 합니다.

break문에 대해서 잠깐 짚고 넘어갔지만, 사용해본 적은 없습니다. break문은 반복을 중간에 중지해주는 역할을 합니다. 우리는 31이라는 수를 호출하고 반복을 강제적으로 중지해야하기 때문에 이번에 break문을 사용합니다.

아래의 코드를 사용자와 컴퓨터가 숫자를 출력하는 부분에 삽입해주면 정상적으로 작동합니다.

games/beskin_rabins_game.py

처음에 순서를 정할 때, 안내문으로 0 또는 1을 입력해달라고 요청했습니다. 그러나 사용자의 실수로 0 또는 1이 아닌 'abc'나 'ㅁㄴㅇ'와 같은 문자가 들어오거나 이외의 숫자가 들어오면 에러가 나거나 게임이 진행되지 않습니다. 그래서 이를 방지하기 위해 사용자로부터 입력받은 정보가 0 또는 1인지 판단하는 코드를 삽입합니다. 사용자가 숫자를 호출할 때도 마찬가지입니다. 이 때도 1, 2, 3 세 수 중 하나가 입력되어야 게임이 정상 진행됩니다.

game/beskin_rabins_game.py

order = input('''순서를 입력하세요. (선공 1, 후공 0 입력) : ''')

print("잘못된 입력입니다. 재입력해주세요.")

  • 조건 검사 시 ['0', '1'] 리스트를 만들어 리스트 안에 문자가 포함되는지 판단합니다.

  • break문을 사용하여 while문을 중지합니다.

game/beskin_rabins_game.py

size_of_call = input("호출할 개수를 입력하세요 : ")

if size_of_call in ['1', '2', '3']:

size_of_call = int(size_of_call)

print("잘못된 입력입니다. 재입력해주세요.")

  • 조건 검사 시 ['1', '2', '3'] 리스트를 만들어 리스트 안에 문자가 포함되는지 판단합니다.

  • break문을 사용하여 while문을 중지합니다.

Codeit Logo

로그인

파이썬 프로그래밍의 힘리스트숫자 야구

다시 수 입력할 수 있게하기

2018년 10월 24일

2,113 조회

답변 1

윤성재

LV

9

파이썬 다시 입력받기 - paisseon dasi iblyeogbadgi

윤성재

LV

9

파이썬 다시 입력받기 - paisseon dasi iblyeogbadgi

질문 지켜보기를 시작하면 질문에 답변, 댓글이 달릴 때 알림을 받을 수 있어요.

댓글 1개

1

2018년 10월 25일

그러기 위해서는 쉽게는 전체가 반복문 안에 들어가야될 것 같습니다. 그래야 반복문이 끝난 뒤 못맞추면 다시 숫자 3개 고르기 부터 시작할 수 있으니까용

happiness0110

2018년 10월 26일

LV

34

파이썬 다시 입력받기 - paisseon dasi iblyeogbadgi

댓글 0개

0

질문 지켜보기

질문 지켜보기를 시작하면 질문에 답변, 댓글이 달릴 때 알림을 받을 수 있어요.

break문과 continue문

앞서 설명한

for문 : 순회할 객체의 마지막 항목까지 반복

while문 : bool 값을 반환하는 조건식이 False를 반환할 때까지 반복

이외에

break문 : 논리적으로 반복문을 빠져나갈 때 사용. 그 자리에서 바로 반복문이 종료됨

continue문 : 이후 코드는 건너뛰고 반복문을 이어서 계속 실행할 때 사용

break문 예제

사용자의 입력값이 문자열 "q"이면 반복문을 빠져나오는 코드

>>> answer=""
>>> while True:
	answer=input("명령을 입력하세요.\n'q'를 입력하면 프로그램이 종료됩니다.:")
	if answer=="q":
		break
	print("'{0}'를 입력하셨습니다.".format(answer))

>>> print("프로그램을 종료합니다...")

변수 answer는 공백 문자열("")로 초기화

while문에서는 가장먼저 input() 함수를 이용해 사용자가 입력한 문자열을 변수 answer에 저장

이때 저장된 answer의 값이 q이면 break문에 의해 while문에서 벗어남

결과 출력

입력된 값이 q가 아닐경우 블록 내의 print()함수 실행

q입력시 결과

명령을 입력하세요.
'q'를 입력하면 프로그램이 종료됩니다.:q
프로그램을 종료합니다...

a입력시 결과

명령을 입력하세요.
'q'를 입력하면 프로그램이 종료됩니다.:a
'a'를 입력하셨습니다.

str.format()함수의 첫 번째 인자 answer의 값이 {0}에 대입

continue문 예제

1부터 10까지 저장되어 있는 리스트 객체에서 3의 배수를 제외한 합을 구하는 코드

>>> numlist=[1,2,3,4,5,6,7,8,9,10]
>>> total=0
>>> for n in numlist:
	if n%3==0:
		continue
	total+=n

	
>>> print("3의 배수를 제외한 총합: {0}".format(total))
3의 배수를 제외한 총합: 37

numlist : 1부터 10까지 정수를 갖는 리스트

total : 합을 누적해서 저장할 정수형 변수

for문에서 numlist의 항목은 차례대로 변수n에 대입

n의 값이 3의 배수인지를 검사하기 위해 나머지(%)연산자 사용

변수 n의 값이 3의 배수일때 -> 나머지 블록은 건너뛰고 for문으로 제어를 옮김

변수 n의 값이 3의 배수가 아닐때 -> 변수 total에 값 누적

더 이상 접근할 수 없는 항목이 없는 경우 for문을 빠져나와 print()함수 호출

str.format() 함수의 첫 번째 인자 total의 값이 {0}에 대입

for문과 while문을 활용해 값이 반복되는 프로그램 만들기(트리만들기)

파이썬 다시 입력받기 - paisseon dasi iblyeogbadgi
Step 1 풀기
for i in range(1,5):
    print("*" * i)

for 문에서 range객체를 이용하여 변수 i의 반복 횟수 설정

4번 반복이기 때문에 시작은 1, 종료는 5를 입력 ->반복은 4번 실행됨

print() 문에서는 반복해서 출력해야 하므로 반복 제어변수 i를 사용

*
**
***
****

for루프로 작성했던 코드를 while루프로 변경하기

i = 1
while i <= 4:
    print("*" *i)
    i = i+1

while루프를 빠져나가는 조건 설정 필요 ->변수를 선언해야 함

(위의 코드를 주석 처리 시, 블록 지정 후 ctrl+/ 단축키로 주석처리)

변수 i의 선언

반복이 4번이므로 i를 1로 시작

while 문에서 i를 4와 비교하는 코드 작성 -> 반복적인 수 i에 대한 변이를 반드시 체크해야 함

i = i+1 처럼 i값을 증가시키는 코드가 없으면 무한루프 발생

*
**
***
****

Step 2의 경우, Step 1 의 결과를 두번 반복해서 출력

Step 2 풀기
for i in range(1,3):
    for k in range(1,5):
        print("*" * k)

중첩된 for루프 사용

range 객체를 이용하여 변수 i의 반복 횟수 설정

전체 루프는 두 번 반복되고, 내부 루프는 4번 반복된다

*
**
***
****
*
**
***
****

for루프 대신에 while루프를 사용해서 코드 작성

i, k = 1, 1
while i <= 2:
    while k <= 4:
        print("*" * k)
        k = k + 1
    i = i + 1

바깥 루프를 제어하는 i와 안쪽 루프를 제어하는 k 만들기

실행 결과

*
**
***
****

k를 초기화 해주는 구문이 없기 때문에 틀린값이 나온다

k=1로 초기화 해주는 코드를 추가로 작성

i, k = 1, 1
while i <= 2:
    while k <= 4:
        print("*" * k)
        k = k + 1
    i = i + 1
    k=1
*
**
***
****
*
**
***
****