초심자 숫자 추측 게임
Sep 01 2020
나는 프로그램을 배우기 시작했고, 내가 직접 쓴 첫 번째 프로그램으로 숫자 추측 게임을 만들고 싶었습니다. 아래는 제가 얻은 것입니다.
주로 내 Guess기능 에 대한 리뷰를 찾고 있지만 몇 가지 구체적인 질문이 있습니다.
- 루프 변수를 함수 매개 변수로 사용하는 것이 합리적입니까?
- 현재
tries내 함수 외부에 몇 가지 변수 (예 :)를 정의하고 있습니다. 이 작업을 수행하는 관용적 인 방법입니까?
import random
tries = [1]
def Guess(playing):
number = random.randint(1,100)
print(number)
print("We are going to play high and low, the avabile numbers are from 1 to 100 included.")
while playing == True:
user_input = input("What is your number? ")
if int(user_input) == number:
print("You have won!")
playing = False
elif int(user_input) < number:
print("You need to give a higher number")
tries.append(1)
elif int(user_input) > number:
print("You need to give an lower number")
tries.append(1)
else:
print("You have put an wrong number")
playing = False
print("It took you " + str(sum(tries)) + " turns to guess")
still = input("Do you want to play again?")
if still == "yes" or still == "YES" or still == "y" or still == "si":
Guess(playing=True)
else:
playing=False
Guess(playing=True)
답변
8 IEatBagels Sep 01 2020 at 21:02
전반적으로 코드를 훌륭하게 수행했습니다. 제가 살펴 봐야 할 몇 가지 사항이 있습니다.
- 공백에 대한 비용을 지불하지 않습니다! 내 말은 코드가 숨을 쉬게하는 것이 중요하다는 것입니다. 빈 줄을 사용하면 큰 코드 덩어리를 다룰 때 눈에 놀라운 일이 될 것입니다.
- 왜
tries어레이입니까? 제 생각tries에는 시도 횟수를 나타내야하므로 숫자 여야합니다! - 조건이 있습니다.
==, <, > and... ?같거나, 작거나, 3보다 크지 않은 숫자를 알려주십시오. 가능한 옵션이 있습니까? 대신해야 할 일은 플레이어가 숫자를 입력했는지 확인하는 것입니다! 지금 당장 "내 번호를 모르겠어, 난 그냥 아기 야"라고 대답하면 "우리는 높고 낮게 플레이 할 것입니다. 사용 가능한 번호는 1부터 100까지 포함됩니다."라고 대답하면 프로그램이 중단됩니다. !try/catch이 문제를 해결하려면 블록을 조사해야 합니다. 다음 번에 배울 수 있습니다! - 첫 번째 플레이에서 세 번의 시도가 필요하고 새 게임을 시작하고 (메시지가 표시되면 "예"사용) 첫 번째 시도에서 성공할 수 있다고 가정하면 코드에서 성공하려면 네 번의 시도가 필요하다는 메시지가 표시됩니다. 왜 그리고 어떻게 해결할 수 있는지 알아낼 수 있습니까?
break키워드를 사용하여 루프를 단순화 할 수 있습니다 . 이는 검색해야하는 항목이기도합니다 (이에있는 동안break,return및 의 사용법을 이해하려고합니다continue.이 세 키워드는 이미 알고있을지라도 꽤 유용합니다return).- 내가 영어 전공이고 문법 실수를 할 수없고 (분명히 내 경우는 아님) 다시 플레이하고 싶은지 물었을 때 "예"또는 "예"대신 "예"라고 적 으면 어떻게 되나요? 당신이 할 수있는 일은 입력 의 낮은 버전 (또는 높은 버전)을 확인하려는 것 (예 :) 과 비교하는 것
still.lower() == "yes"입니다.
1 ChristianDean Sep 02 2020 at 08:55
다음은 여러분이 할 수있는 몇 가지 개선 사항입니다 (IEatBabels는이 중 많은 부분을 다루었지만 일부 영역을 확장하고 제 자신의 문구를 추가하고 싶습니다).
- 왜
tries목록입니까? 처음tries = 0부터 시작한 다음tries += 1사용자가 잘못된 숫자를 입력 할 때마다 증분 시도 ( )를 시도하는 것이 더 쉽고 합리적 입니다. - 프로그램에 다른 함수가 없기 때문에
Guess함수 를 만드는 데 신경 쓰지 않을 것 입니다. 프로그램에서 직접 코드를 작성하십시오. - 당신은 당신의 프로그램을 디버깅되었을 수도 있습니다,하지만 당신은 사용자에게 그들이 작성하여 추측되어있는 번호를 표시하고
print(number)에서를Guess! - 사용자가 횡설수설하고 횡설수설 (즉, 숫자가 아닌 것)을 사용하기로 결정하면 어떻게됩니까? 프로그램은 입력을 숫자로 변환하려고 할 때 예외를 발생시킵니다. 해야 할 일은 try/except블록 의 루프 아래에 코드를 래핑하는 것입니다 . 이렇게하면 사용자가 횡설수설을 입력 할 때마다 유효한 전체 번호를 입력하라는 메시지를 표시 할 수 있습니다.
- 진술
else뒤에 왜 차단 이 있는지 잘 모르겠습니다if/elif. 사용자 입력이 숫자와 같지 않고 숫자보다 작지 않고 숫자보다 크지 않은 경우 다른 것은 무엇일까요? 아무것도! 그래서 거기에else성명서가 필요하지 않습니다 .else사용자 입력이 유효하지 않은 경우 문 을 사용하려고 시도했을 수 있습니다 . 그래도 작동하지 않습니다. 그게 당신이하려는 일이라면 내 마지막 요점을 참조하십시오. - 사용자 입력을 정수로 한 번 변환하고 변수에 저장합니다. 이렇게하면 테스트 할 때마다 사용자 입력을 변환하는 것보다 시간이 절약되고 깔끔해 보입니다.
- 여기서 재귀를 사용하는 이유를 잘 모르겠습니까? 재귀는 훌륭한 도구이지만, 종종
while또는for루프가 훨씬 더 잘 작동합니다. 나는 당신의 프로그램이 그러한 경우 중 하나라고 생각합니다. 두 개의 루프를 사용하십시오. 하나는 사용자에게 다시 플레이하고 싶은지 묻는 루프이고 다른 하나는 실제 게임을위한 루프입니다. - 나는 당신이 우리 루프에서 벗어나기 위해 플래그를 사용하는 것을 발견했습니다. 이것은 좋은 방법입니다. 하지만 여기서
break.break파이썬에게 현재 루프에서 즉시 뛰어 내 리도록 지시하는 문입니다. 플래그를True및 / 또는 로 설정하는 것과 동일한 효과가False있습니다. - 당신은 프로그램에서 이것에 대해 꽤 잘했지만, 항상 설명 변수 이름을 사용하고 명확하고 명시적인 코드를 작성해야합니다. 이를 통해 코드를 깔끔하고 자체 문서화 할 수 있으며, 지금부터 몇 달 후에 다시 돌아와서 그 기능과 작동 방식을 빠르게 이해할 수 있습니다.
위의 제안과 일부 형식화, 논리 및 이름 지정 개선 사항을 사용하여 프로그램을 다시 작성하는 방법은 다음과 같습니다 (IEatBagels는 공백에 대한 훌륭한 포인트를 제공했습니다.이 점을 마음에 새겨 두십시오!).
import random
print("We are going to play high and low, the avabile numbers are from 1 to 100 included.")
tries = 0
while True:
number_to_guess = random.randint(1, 100)
while True:
try:
user_input = input("What is your number? ")
guess = int(user_input)
except ValueError:
print("That's not a valid number! Try again.")
else:
if guess == number_to_guess:
print("You have won!")
break
elif int(user_input) < number_to_guess:
print("You need to give a higher number")
tries += 1
elif int(user_input) > number_to_guess:
print("You need to give a lower number")
tries += 1
print("It took you " + str(tries) + " turns to guess")
still = input("Do you want to play again?")
if not (still == "yes" or still == "YES" or still == "y" or still == "si"):
break