Помогите вывести минимальное число (ошибку выдает:TypeError: 'int' object is not iterable)
Пишу программу, которая в последовательности натуральных чисел определяет минимальное число, кратное 3.
Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, кратное 3. Количество чисел не превышает 1000. Введённые числа не превышают 30 000. Программа должна вывести одно число — минимальное число, кратное 3.
n = int(input())
k = 0
for i in range(n):
a = int(input())
if a%3 == 0:
minimum = min(a)
print(minimum)
Ответы (3 шт):
Например, так:
n = int(input())
items = []
for i in range(n):
a = int(input())
if a % 3 == 0:
items.append(a)
print(min(items))
или так:
n = int(input())
min_num = None
for i in range(n):
a = int(input())
if a % 3 == 0:
if min_num is None:
min_num = a
else:
min_num = min(min_num, a)
print(min_num)
Проблема вашего кода вот в этой строке:
...
minimum = min(a)
...
Функция min возвращает минимальное число из списка (кортежа/словаря/множества) чисел, а вы пытаетесь передать ей просто число.
Вариант валидного использования функции min для решения вашей задачи:
n = int(input())
data = [int(input()) for _ in range(n)]
divided = [elem for elem in data if not elem%3]
print(min(divided))
Если вы пишите n = 10 for i in range(n) Это означает, что вы берете числа от 1 до 9
А for i in range(n + 1) это уже от 1 до 10.
Теперь если вы решаете через функцию range вам не нужно использовать функцию min , а просто вернуть первое значение, которое нацело делится на 3.
n = int(input('ЧИСЛО: '))
for i in range(n+1):
if i == 0: # Если не добавить это вернется 0
continue # так же, чтобы не вернуло 0 можно написать for i in range(1, n)
if i % 3 == 0:
print(i)
break
вывод:
$ python test.py
ЧИСЛО: 55555555
3
Если вы решаете через список рандомных чисел, то нужно будет воспользоватся min
l1 = [47851, 819289, 51778, 5878, 145256, 145587, 2456, 1456, 915, 879, 37895, 1, 5,
7, 8, 99999999, 891]
def min_div_by_three(num_list):
return min([i for i in num_list if i % 3 == 0])
print(min_div_by_three(l1))
вывод:
$ python test.py
879
Вот ещё код с генерированием списка на десерт)
from random import randint
def min_div_by_three(num_list: list):
return min([i for i in num_list if i % 3 == 0])
def gen_list(start: int = 111, end: int = 9999999, range_var: int = 1001):
num = []
for _ in range(range_var):
num.append(randint(start, end))
return num
print(min_div_by_three(gen_list()))