Как я могу исправить, что объект функции не является итеративным?

#python

#python

Вопрос:

После вызова обеих функций я получаю сообщение об ошибке «объект функции недоступен». Я думаю, что ошибка появляется где-то в цикле for, я просто не могу понять, почему, если я перебираю список. Цель программы — вывести диапазон чисел между первым ‘input1’ и ‘upper_threshold’. Tyvm за вашу помощь.

 def get_user_values():
    user_values = []
    input1 = int(input())
    while input1 > 0:
        input2 = int(input())
        user_values.append(input2)
        input1 -= 1
    return user_values


def output_ints_less_than_or_equal_to_threshold(user_values, upper_threshold):
    for value in user_values:
        if value >= min(user_values) and value <= upper_threshold:
            print (value)


if __name__ == '__main__':
    user_values = []
    get_user_values()
    upper_threshold = int(input())
    print (output_ints_less_than_or_equal_to_threshold(get_user_values, upper_threshold))
  

Ответ №1:

Я почти уверен, что там, где у вас есть:

 print (output_ints_less_than_or_equal_to_threshold(get_user_values, upper_threshold))
  

вы имеете в виду иметь:

 print (output_ints_less_than_or_equal_to_threshold(get_user_values(), upper_threshold))
  

Другими словами, вы хотите передать результаты вызова функции get_user_values функции output_ints_less_than_or_equal_to_threshold . Прямо сейчас вы передаете саму функцию, а не то, что она вернула. Итак, ваш код пытается выполнить итерацию по переданному ему значению user_values , думая, что это список значений. Вместо этого он получает и пытается выполнить итерацию по функции.

Две другие проблемы, которые я вижу, заключаются в том, что вы не предоставляете никаких подсказок при принятии пользовательского ввода, и вы вызываете get_user_values() дважды, отбрасывая результаты при первом вызове.

Вот версия вашего кода с исправленными этими двумя проблемами. Кроме того, ваша основная функция ничего не возвращает, поэтому я удалил print() то, что печаталось None в качестве результата.С этими исправлениями, похоже, он делает то, что я ожидаю, что вы хотите, чтобы код выполнял:

 def get_user_values():
    user_values = []
    input1 = int(input("How many numbers?"))
    while input1 > 0:
        input2 = int(input("Enter a number"))
        user_values.append(input2)
        input1 -= 1
    return user_values

def output_ints_less_than_or_equal_to_threshold(user_values, upper_threshold):
    for value in user_values:
        if value >= min(user_values) and value <= upper_threshold:
            print (value)

if __name__ == '__main__':
    upper_threshold = int(input("What threshold should I use?"))
    output_ints_less_than_or_equal_to_threshold(get_user_values(), upper_threshold)
  

Пример запуска:

 What threshold should I use?5
How many numbers?4
Enter a number7
Enter a number2
Enter a number99
Enter a number3
2
3
  

Комментарии:

1. Спасибо за ваш ответ. Я попробовал это, и программа запросила у меня 10 общих входных данных вместо 7. Также я получил сообщение об ошибке «недопустимый литерал для int() с основанием 10: «»

2. Я расширил свой ответ, чтобы привести вас к чему-то, с чем мы, я надеюсь, согласимся, работает довольно хорошо.

3. Еще одна незначительная мелочь… Чего вы ожидаете value >= min(user_values) от добавления? Я думаю, что это выражение всегда будет True , и поэтому его можно удалить.