2016-08-11 3 views
1

Я создаю игру угадывания, и я создал две функции. Один для ввода пользователя, а другой - для проверки правильности ввода пользователя.Возвращаемое значение не определено

def getGuess(maxNum): 
    if maxNum == "10": 
     count=0 
     guess = -1 
     guessnum = [ ] 
     while guess >10 or guess<0: 
      try: 
       guess=int(input("Guess?")) 
      except: 
       print("Please enter valid input") 
     guesses.append(guess) 
     return guesses 
     return guess 

def checkGuess(maxNum): 
    if maxNum == "10": 
     if guess>num1: 
      print("Too High") 
     elif guess<num1: 
      print ("Too Low") 
     else: 
      print("Correct") 
      print (guesses) 

и основной код

if choice == "1": 
    count = 0 
    print("You have selected Easy as the level of difficulty") 
    maxNum= 10 
    num1=random.randint(0,10) 
    print (num1) 
    guess = 11 
    while guess != num1: 
     getGuess("10") 
     checkGuess("10") 
     count = count+1 
    print (guess) 

Хотя функция возвращает пользователям угадать код всегда принимает догадку как 11. Если я не определяю догадку, он не работает. Пожалуйста помоги.

ответ

0

Во-первых, вы возвращаете два значения. Оператор return также действует как break, поэтому второй return не будет вызываться. Кроме того, вы не сохраняете возвращаемое значение в любом месте, поэтому оно просто исчезает.

Вот ваш отредактированный код:

def getGuess(maxNum): 
    if maxNum == "10": 
     guess = -1 
     while guess >10 or guess<0: 
      try: 
       guess=int(input("Guess?")) 
      except: 
       print("Please enter valid input") 
     return guess 

def checkGuess(maxNum, guess, num1): 
    if maxNum == "10": 
     if guess>num1: 
      print("Too High") 
     elif guess<num1: 
      print ("Too Low") 
     else: 
      print("Correct") 
      return True 
     return False 

if choice == "1": 
    count = 0 
    print("You have selected Easy as the level of difficulty") 
    maxNum= 10 
    num1=random.randint(0,10) 
    print (num1) 
    guess = 11 
    guesses = [] 
    while guess != num1: 
     guess = getGuess("10") 
     guesses.append(guess) 
     hasWon = checkGuess("10", guess, num1) 
     if hasWon: 
      print(guesses) 
      break 
     count = count+1 

You have selected Easy as the level of difficulty 
2 
Guess?5 
Too High 
Guess?1 
Too Low 
Guess?2 
Correct 
[5, 1, 2] 
>>> 
+0

Большое спасибо за ваш ответ, это помогло мне. Я не знал, что возвращение действует как перерыв, а также сожалеет об этом, но не могли бы вы кратко рассказать мне, что делает этот код. если hasWon: print (догадки) break count = count + 1 –

+0

Итак, если вы выиграли, он печатает все догадки, которые вы сделали, а затем выходит из цикла while, чтобы он не просил вас вводить данные. 'Count = count +' находится после оператора 'if', поэтому, если вы не выиграли, он добавляет один к' count', который я ожидаю, это количество используемых догадок. –

+0

Привет, как сделал hasWon = checkGuess («10», догадаться, num1) этот оператор становится инструкцией, чтобы проверить, выиграл ли пользователь. Разве это не просто функция, используемая для проверки догадки (правильно ли она или неверна)? Большое вам спасибо. Извините за поздний комментарий. –

0

У вас есть стиль программирования я называю "тип и надежда". maxNum, похоже, отскакивает между числом и строкой, указывающей, что вы не продумали свой подход. Ниже приведена переработка, когда каждая процедура пытается сделать что-то очевидное и полезное без дополнительных переменных. (Я оставил от начальной choice логики, поскольку это не способствует этому примеру, который может быть введен в вашу рамку выбора.)

import random 

def getGuess(maxNum): 
    guess = -1 

    while guess < 1 or guess > maxNum: 
     try: 
      guess = int(input("Guess? ")) 
     except ValueError: 
      print("Please enter valid input") 

    return guess 

def checkGuess(guess, number): 
    if guess > number: 
     print("Too High") 
    elif guess < number: 
     print("Too Low") 
    else: 
     print("Correct") 
     return True 

    return False 

print("You have selected Easy as the level of difficulty") 

maxNum = 10 

maxTries = 3 

number = random.randint(1, maxNum) 

count = 1 

guess = getGuess(maxNum) 

while True: 
    if checkGuess(guess, number): 
     break 

    count = count + 1 

    if count > maxTries: 
     print("Too many guesses, it was:", number) 
     break 

    guess = getGuess(maxNum) 

Несколько конкретных вещи, чтобы рассмотреть следующие вопросы: избегать использования except без какого-либо смысла какого исключения вы ожидаете; избегайте пропускать числа в виде строк - конвертируйте числовые строки в числа на входе, преобразуйте числа в числовые строки на выходе, но используйте фактические числа между ними.

+0

Прошу прощения за недостаток знаний, поскольку я новичок, но не могли бы вы рассказать мне больше о том, что вы имели в виду под maxNum, подпрыгивая между числом и строкой. И спасибо за ваш вклад. –

+0

@RavinduGamage, я имел в виду код типа 'if maxNum ==" 10 ":' и 'maxNum = 10', который смотрит на ваш код, не приносит никакой полезной цели. – cdlane

Смежные вопросы