2014-10-17 7 views
-1

Я должен написать программу с циклом, которая позволяет пользователю вводить ряд целых чисел, за которыми следует -99, чтобы сигнализировать о конце серии. После того, как все номера введены, программа должна отображать самые большие и наименьшие введенные числа.Python: Loop Sentinel Value

Это то, что я до сих пор:

def main(): 
    user_input = 1 
    while user_input != -99: 
     user_input = int(input("Enter your number or -99 to end.")) 
     bigger = largest(user_input) 
     tinier = smallest(user_input) 
    print('The largest number is ', bigger, "and the smallest is ", tinier, ".")  

def largest(number): 
    largest = 0 
    if number > largest: 
     largest = number 
     return largest 

def smallest(number): 
    smallest = 10000 
    if number < smallest: 
     smallest = number 
     return smallest 


main() 

По какой-то причине значение сторожевого (-99) входит в цикл, я понятия не имею, как, и становится наименьшим значением. Кроме того, самое большое значение никогда не бывает правильным. Помогите оценить!

+4

Конечно, это так. Вы принимаете вход, проверяете все меньше и больше, * затем * проверяется следующая итерация цикла while. – CoryKramer

+1

Вы также * перезагружаете * свои 'самые маленькие' и' самые большие' переменные каждый раз, когда вы вызываете функции с тем же именем. Эти локальные переменные очищаются каждый раз, когда функция завершается. –

+0

Помимо обеих этих проблем, вы также выполняете только 'return maximum' или' return smallest', если новый номер '> 0' или' <10000'; иначе у вас нет оператора 'return', потому что он отстутнут под' if', поэтому вы вернете 'None'. Не то, что это очень важно, пока вы не исправите предыдущую проблему, но как только вы это сделаете, вам тоже нужно исправить это. – abarnert

ответ

0

Кратчайший сделать изменения в код, чтобы исправить это было бы

def main(): 
    user_input = 1 
    while user_input != -99: 
     user_input = int(input("Enter your number or -99 to end.")) 
     if use_input == -99: 
      break 
     bigger = largest(user_input) 
     tinier = smallest(user_input) 
    print('The largest number is ', bigger, "and the smallest is ", tinier, ".") 

Проблема заключается в том, если пользователь вводит -99, заполните остальные линии для этой итерации цикла. Он не завершит цикл while до следующего раза, но он уже выполнил largest и smallest в этом месте, поэтому он уже перезаписан.

0

У вас есть две проблемы, насколько я могу судить: ваш вход обрабатывается перед проверкой, и есть проблемы в ваших largest() и smallest() функциях. Когда вы просматриваете ввод пользователя, вы сразу же переходите к своим функциям перед проверкой. Реструктурировать свой цикл, как это:

input() 
while(){ 
    ... 
    ... 
    input() 
} 

Для второй части, ваши функции не работают, потому что вы инициализировать значения каждый раз, когда они выполняются. Инициализируйте свои функции в заголовке в верхней части файла, а затем просто сравните их. Например, переместите строку largest=0 в начало файла прямо под операциями импорта. Кроме этого, я думаю, что это должно сработать.

0

Ваших отступы важны в питона так что ваше наималейшее значение и наибольшая функция возвращаемого значения утверждения неверно отступа

def largest(number): 
    largest = 0 
    if number > largest: 
     largest = number 
    return largest 

def smallest(number): 
    smallest = 10000 
    if number < smallest: 
     smallest = number 
    return smallest 
0

Довольно просто, если вы используете список, чтобы сохранить номера и полагаться на минутных функции макс/из стандартной библиотеки:

def main(): 
    numbers = [] 
    while True: 
    user_input = int(raw_input("Enter a number")) 
    if user_input == -99: 
     break 
    else: 
     numbers.append(user_input) 
    print('Largest is {}, smallest is {}'.format(max(numbers), min(numbers)))