Python - делимость и количество
Хорошо, редактируем для ясности, извините за путаницу.
Мне нужно посчитать количество вхождений числа (скажем, 2) от 1 до n (введенное пользователем положительное число). Это включает каждый раз, когда данное число может входить в каждое число от 1 до n.
Таким образом, каждый экземпляр 2 в каждом числе до п. таким образом, 10 будет 5 из 10, плюс 4 из 9, 4 из 8, 3 из 7, 3 из 6, 2 из 5, 2 из 4, 1 из 3 и 1 из 2. Остальные значения не имеют значения, я просто нужно посчитать 2с.
поэтому пользователь, введя 10, должен напечатать 25, если моя математика верна.
Я новичок и совершенно невежественен.
На данный момент, я в основном прошу пользователя ввести число.
n = int (input ("Введите положительное число от 1 до 1000"))
Я успешно получил свой код для деления на девять, но на самом деле это не то, что я пытаюсь сделать. Я думаю, что мне нужно преобразовать все между 1 и n в строку? Будет ли это использовать диапазон, как 1:n? Это вообще возможно?
Тогда я мог посчитать, сколько из определенного числа?
Спасибо!
1 ответ
Вы имеете в виду что-то подобное?
def count(n):
occurrences = 0
for i in range(n, 0, -1): # i -> n, n-1, n-2, ... 3, 2, 1
occurrences += i//2 # add whole number of 2's in this value of i
return occurrences
print(count(10)) # 25
print(count(9)) # 20
Если то, что это делает, правильно, его можно оптимизировать и сократить просто:
def count(n):
return sum(i//2 for i in range(n, 0, -1))
Который применяет встроенный sum()
функция к generator expression
,
range(n, 0, -1)
итератор, который производит все числа из n
в 1
задом наперед - что я и использовал, так как ты описал то, что хотел. Поскольку делать это в таком порядке на самом деле не имеет значения, вероятно, было бы лучше (проще) просто использовать range(1, n+1)
который производит последовательность в порядке возрастания (1, 2, 3, ... n-2, n-1, n
).