2016-10-27 1 views
0

Функция getvalidint объясняется ниже, так как я вызываю функцию getvalidint и давая ей ввод, чтобы он мог генерировать целочисленный вывод. Это не так, как я печатаю выходные данные (см. Ниже в основной программе), он выводит «none», я запускаю python33.Функция не производит целое число, но вместо этого производит вывод «none»

#getValidInt() takes in a minn and maxx, and gets a number from the 
#    user between those two numbers (inclusive) 
#Input:  minn and maxx, two integers 
#Output:  an integer, between minn and maxx inclusive 


MIN_VAL = -1000000 
MAX_VAL = 1000000 

def getValidInt(minn, maxx): 
    message = "Please enter a number between " + str(minn) + " and " + \ 
     str(maxx) + " (inclusive): " 
    newInt = int(input(message)) 
    while newInt <= minn & newInt >= maxx: 

    # while loop exited, return the user's choice 
     return newInt 

def main(): 

    userNum = getValidInt(MIN_VAL, MAX_VAL) 
    print(userNum) 

main() 
+4

Отпечаток важен. Ваш оператор возврата находится на другом уровне отступов, чем функция. Похоже, что это часть цикла. Если цикл никогда не попал, вы ничего не возвращаете ... –

ответ

2

Если условие while newInt <= minn & newInt >= maxx: никогда не будут выполнены, то ничего не будет возвращено. Это означает, что функция будет неявно возвращать None. Кроме того, предположим, что вы используете python 3 (который я вызвал из вашего идиома int(input())).

Более глубокая проблема заключается в том, что входной код будет запускаться только один раз, независимо от того, соответствует ли значение значению ограничения. Типичным способом этого было бы что-то вроде:

import sys 

def get_int(minimum=-100000, maximum=100000): 
    user_input = float("inf") 
    while user_input > maximum or user_input < minimum: 
     try: 
      user_input = int(input("Enter a number between {} and {}: ".format(minimum, maximum))) 
     except ValueError: 
      sys.stdout.write("Invalid number. ") 
    return user_input 
+0

есть ли способ сделать это без импорта sys method? –

+0

Импорт sys предназначен только для использования sys.stdout, которое по умолчанию используется print(). Единственное, что нужно было сделать, чтобы «Недопустимый номер» появлялся в той же строке, что и «Ввести номер ...» после сбоя. Это чисто для эстетики. Если вы используете python3, то идентичный эффект может быть достигнут с помощью 'print (" Invalid Number ", end =" ")' – Goodies

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