파이썬 q 입력 - paisseon q iblyeog

특정 문자 입력 시 프로그램 종료 방법 문의 드립니다.

import random

import os

import sys

def input_check(msgcasting=int):

while True:

try:

user_input = int(input("몇 일까요?(1 ~ 99 사이의 정수만 입력하세요) : "))

if user_input == "n":

sys.exit()

return user_input

except:

continue

chance = 10

os.system("cls")

print("1부터 99까지의 숫자를 10번의 시도 안에 맞춰보는 게임입니다")

def game():

global count

count = 0

number = random.randint(199)

while count < chance:

count += 1

user_input = input_check("몇 일까요?(1 ~ 99 사이의 정수만 입력하세요) : ")

if user_input == number: 

print("성공! {}이(가) 맞습니다.".format(number))

print("{}번만에 성공하셨습니다.".format(count))

break

elif count == chance:

print("실패, 정답은 {}입니다.".format(number))

break

elif user_input < number:

print("{}보다 큽니다.".format(user_input))

elif user_input > number:

print("{}보다 작습니다.".format(user_input))        

game()

while True:

print("게임을 계속 하시겠습니까?(Y/N) : "end='')

answer = input()

if answer == "y" or answer == "Y":

game()

elif answer == "n" or answer == "N":

print("게임을 종료합니다.")

break

위 코드는 제가 일부 기능을 추가 한 상태입니다.

그런데 숫자를 입력 받을 때 사용자가 n을 입력하면 게임이 종료되게끔

이런 저런 시도를 해봤는데 안되더라고요 그래서 

user_input = input("몇 일까요?(1 ~ 99 사이의 정수만 입력하세요) : ")

if user_input == "n":

sys.exit()

마지막으로 input_check 안에 이런식으로 해봤는데도 의도대로 안되더라고요.

무엇이 문제인지 잘 모르겠습니다.

어떻게 하면 n을 입력받았을 때 프로그램이 종료될까요?

아주 단순한 문제인거 같은데 답을 모르겠습니다.

반복문

  • if, elif, else는 조건에 따라 선택적으로 구문을 실행하지만, 위에서 아래로 코드를 실행 (즉, 앞에서 실행 했던 코드를 다시 실행하지 못함)
  • 같은 코드를 여러 번 반복해서 실행할 경우, 반복문을 사용
    • while구문
    • for in 구문

while

while문은 파이썬에서 가장 간단한 반복 구문

while문의 구조

while <조건식>:
	문장1
    문장2
    ...
    문장n

while 실습 예제

예제1) 사용자가 양의 정수 N을 입력하면 1~N까지 숫자를 출력하는 프로그램을 작성하라. 

n = int(input("정수를 입력하세요: "))
i = 1
while i<=n:
    print(i)
    i = i + 1

예제2) 위 예제 1은 음수를 입력하면 문제가 발생한다. 음수를 입력하면 '잘못된 입력' 이라고 출력하고 프로그램을 종료하도록 업그레이드 하여라.

import sys
n = int(input("정수를 입력하세요: "))
i = 1
if n <= 0:
    print('잘못 입력하였습니다')
    sys.exit() 
while i<=n:
    print(i)
    i = i + 1

for in

다음과 같은 리스트의 요소들을 하나씩 출력하는 프로그램을 while문으로 작성하는 경우

fruits = ['apple' , 'orange', 'grape', 'pineapple']
index = 0
while index < len(fruits):
	print(fruits[index])
    index += 1

파이썬에서 시퀸스 구조 등 순회 가능한 iterable 객체의 요소를 반복적으로 처리할 경우 for in 구문을 많이 사용

for fruit in fruits:
	print(fruit)

for in 구문의 구조

for item in <순회 가능한 객체>:
	문장1
    문장2
    ...
    문장N

순회 가능한 객체에서 요소를 하나씩 가져와 문장1 ~문장N을 실행하며, 더 이상 가져올 요소가 없을 때까지 반복한다.

for in 실습 예제

다음 코드들을 실행해 보자

ex

d = {'apple': '사과', 'orange': '오렌지', 'grape':'포도'}

for k in d:
    print(k)
print('\n')

for v in d.values():
    print(v)
print('\n')

for item in d.items():
    print(item)
print('\n')

for k, v in d.items():
    print(k,v)

apple
orange
grape


사과
오렌지
포도


('apple', '사과')
('orange', '오렌지')
('grape', '포도')


apple 사과
orange 오렌지
grape 포도

zip(), range()

zip()

  • 여러 시퀸스를 병합한 순회 가능한 객체를 생성
  • 가장 짧은 시퀸스를 기준으로 병합
  • ex
names = ['홍길동', '임꺽정', '유관순']
ages = [19, 30, 25, 100]
genders = ['남', '남', '여']
for name, age, gender in zip(names, ages, genders):
    print('이름:', name, '나이:', age, '성별:' , gender)
    
이름: 홍길동 나이: 19 성별: 남
이름: 임꺽정 나이: 30 성별: 남
이름: 유관순 나이: 25 성별: 여

range()

  • range([start, ]stop[,step])의 형태로 사용
    • start와 step은 생략 가능하고, stop은 반드시 입력해야 함
    • start를 생략할 경우 기본값은 0
    • step을 생략할 경우 기본값은 1
    • 슬라이스와 유사: start에서 stop보다 작은 수까지의 수를 step 만큼씩 증가시켜가면서 수를 생성하는 순회 가능한 객체 생성
    • 예1) range(10): 0~9까지의 정수를 생성
    • 예2) range(1, 11): 1~10까지의 정수 생성
    • 예3) range(1, 11, 2): 1, 3, 5, 7, 9를 순서대로 생성

break, continue

break

반복문에서 brak문이 실행되면 반복이 중단되고 해당 반복문 다음 코드를 실행

continue

반복문에서 continue문이 실행되면 continue문의 다음 문장이 실행되지 않고 반복문의 처음으로 돌아가 실행

반복문에서의 else

  • 반복문 내에서 brak 구문을 사용했을 때, break 구문이 한 번도 실행되지 않았을 경우 반복문과 쌍을 이루는 else구문이 실행
  • 쉽게 말해, break 구문의 실행 여부를 체크하는 구문

예제

break 사용 예제) 사용자로부터 문자열을 입력받아 이를 대문자로 바꿔 출력하는 프로그램을 작성하되, q가 입력될 때까지 반복해서 실행하라.

while True:
    s = input('입력: ')
    if s == 'q':
        break
    print(s.upper())

continue 사용예제) 1~100사이의 짝수만 출력하는 프로그램을 작성해라.

for n in range(2, 101, 2):
    print(n)

Problems

양의 정수 N을 입력받아 N의 약수를 출력하는 프로그램을 작성하시오

(HINT) 1~N까지의 수를 하나씩 순회하면서 순회하는 수 i가 N을 나누어 나머지가 0 일 때, i는 N의 약수이다. 즉, N % i == 0일 때, i는 N의 약수

n = int(input('정수를 입력하시오: '))
i = 1
while i<=n:
    if n % i == 0:
        print(i)
    i += 1

숫자 맞추기 게임) 1~100 사이의 임의의 수를 생성하고, 사용자가 생성된 숫자를 맞추는 프로그램을 작성하라.

(게임규칙)예를 들어 무작위로 생성된 수가 77이라고 가정했을 때, 플레이어가 처음에 40을 입력하면 77은 40보다 크므로, '더 큰수 입니다' 라고 출력, 다시 90을 입력하면 '더 작은 수 입니다' 라고 출력하면서 플레이어가 맞춰야 할 숫자의 범위를 좁혀 가서 맞출 수 있도록 한다. 최종적으로 77을 입력하면 '맞췄습니다'라고 출력하고 프로그램 종료.

import random
computer_random_number = random.randint(1,100)

while True:
    user_input_number = int(input('숫자를 입력하세요: '))
    if computer_random_number > user_input_number:
        print('더 큰 수 입니다')
        continue
    elif computer_random_number < user_input_number:
        print('더 작은 수 입니다')
        continue
    elif computer_random_number == user_input_number:
        print('맞췄습니다!')
        break

Summary

  1. 반복문은 같은 코드를 여러 번 실행할 수 있게 해주며, while 구문과 for in 구문이 있다.
  2. while 구문은 조건식이 참인 동안 while 구문 안의 문장을 반복해서 실행한다.
  3. for in 구문은 순회 가능한 객체에서 요소를 하나씩 가져오면서 구문 안의 문장을 반복해서 실행하며 더 이상 가져올 요소가 없을 때 반복을 끝낸다.
  4. zip() 함수는 두 개 이상의 순회 가능한 객체를 튜플로 병합한 순회 가능한 객체를 생성하며, range() 함수는 특정 범위의 숫자를 순회할 수 있는 객체를 생성한다.
  5. break 구문은 반복문의 실행을 중지하는 구문이며, continue는 다음 코드의 반복을 건너뛰어 다시 반복문의 처음부터 실행하게 하는 구문이다.