#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
, и поэтому его можно удалить.