Использование итераций для поиска наименьшего k в python

#python #loops #for-loop #while-loop #iteration

#python #циклы #for-цикл #while-цикл #итерация

Вопрос:

Я новичок в программировании и пытаюсь работать над своими итерациями.

Пример того, что я пытаюсь сделать, это:

Введите положительное целое число: 100

19 является ли наименьшее n таким, что 1 3 5 7 ... n >= 100

Итак, из вставленного целого числа суммируйте с шагом 2 от 1, пока сумма не составит вставленное целое число.

Я получаю сообщение об ошибке

    while r <= q:
TypeError: '<=' not supported between instances of 'range' and 'int'
  

Я не совсем уверен, как это сделать, не используя range и int.
Есть ли лучший способ?

То, что я пробовал до сих пор, находится в приведенном ниже коде, но по сути: я попытался создать переменные и s в диапазоне от 0 до q с шагом 2, затем, пока s меньше или равно q, оно продолжает суммироваться через n . Я ввел r, чтобы попытаться обойти ошибку, которую я получаю, но она по-прежнему выдает ту же ошибку.

Возможно, я думаю об этом неправильно, любая помощь будет с благодарностью. Если я поместил достаточно информации, извиняюсь. Дайте мне знать, и я обновлю вопрос.

     n = 0
    q = int(input("enter a number"))
    s = range(1,q,2)
    r = s
    while r <= q:
    n= n 1
    s= s n
    print("smallest N is",n)
  

Ответ

     q = int(input("enter a number "))
    s=[1]   #start from 1
    while sum(s) < q: #check if sum of s is less than input
    s.append(s[-1] 2) #s[-1] will get the last element of list and  2 will ensure odd numbers are inserted in list
    print("smallest N is",s[-1]) #get the last element in the list
  

Работает отлично
Спасибо всем за все ответы, действительно ценю это.
Мне просто любопытно. Если бы у меня было

 Enter a positive integer: 25
8 is the largest k such that 0 2 4 6 ... k < 25
  

должно быть 8, но получается 10
`

 q = int(input("enter a number "))
s=[0]   #start from 0
while sum(s) < q: 
s.append(s[-1] 2) 
print("smallest N is",s[-1])
  

`

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

1. Что представляют переменные s , r , n и почему они не n объявлены? Настоятельно рекомендуется называть переменные в соответствии с тем, что они делают

2. это были просто случайные буквы, которые я использовал для представления суммы, r использовался, чтобы попытаться обойти s, являющийся диапазоном, поэтому s может быть меньше q. предполагалось, что n было объявлено, извините, я забыл добавить его обратно.

Ответ №1:

вот простой пример.

 q = int(input("enter a number "))
s=[1]   #start from 1
while sum(s) < q: #check if sum of s is less than input
    s.append(s[-1] 2) #s[-1] will get the last element of list and  2 will ensure odd numbers are inserted in list
print("smallest N is",s[-1]) #get the last element in the list
  

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

1. отличная идея, хотя вычисление суммы массива на каждой итерации немного затратно

2. Временная сложность для sum O(n) такова, что я не думаю, что это будет дорого. Поправьте меня, если я ошибаюсь

3. да, но по сравнению с увеличением переменной это может быть

4. Большое вам спасибо, это работает отлично. Я приму в качестве ответа, когда переполнение стека позволит мне. Из любопытства, когда я попытаюсь получить наибольшее n, введите положительное целое число: 25 8 — наибольшее k, такое, что 0 2 4 6 … k < 25 «»«q = int(ввод («введите число»)) s=[0] #начинайте с 0, пока sum(s) < q: #проверьте, меньше ли сумма s, чем входные s.добавьте (s[-1] 2) #s[-1] print(«наименьшее N равно», s[-1]), это дает 10 вместо 8

5. вам нужно начать с 2 инициализировать s = [2]

Ответ №2:

Я предлагаю это решение:

 q = int(input("enter a number"))
s = 0
r = iter(range(1,q,2))
while not s >= q:
    n = next(r)
    s  = n
print("smallest N is",n)
  

Он изменяет вашу версию в следующих пунктах:

  1. Я использую s для накопленной суммы и инициализирую ее с помощью 0
  2. Я создаю r итератор, который даст мне следующее значение при запуске next() на нем
  3. Я изменил условие while цикла для выполнения до тех пор, пока сумма s , если она, наконец, больше или равна числу q , заданному из пользовательского ввода
  4. С помощью in the loop я извлекаю следующий элемент итератора диапазона, сохраняю его n и добавляю к сумме s . Итак, я помню последний элемент, добавленный до того, как в конечном итоге сумма s станет больше или равна q

Ответ №3:

range Функция довольно мощная, но вы используете ее неправильно (и это действительно не обязательно здесь).

 positive_integer = int(input('Enter a positive integer: '))
assert positive_integer >= 1
n = 1
sum = 1
while sum < positive_integer:
    n  = 2
    sum  = n
print('Smallest n is ', n)
  

Ответ №4:

Ваш код выдает ошибку, потому что невозможно сказать, равно ли целое число или меньше диапазона. Например, я не могу определить, меньше ли 5, равно или больше чисел от 60 до 110. Математика работает не так. Однако вы можете определить, является ли число меньше, равно или меньше, чем наименьшее число в диапазоне. Я бы посоветовал вам изменить свой код для этого:

 while r <= min(1, q, 2):
    n  = 1
    s  = n
print("Smallest N is "   n)
    

  

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

1. Я думаю, что возникнет некоторая проблема, потому что r — это диапазон. и диапазон [1,2,3]<4

Ответ №5:

 q = int(input("enter a number"))
sum = 0;
n=0;
for i in range(1,q,2):
    sum = sum i
    if(sum >= q):
        n=i
        break

print("smallest N is",n)
  

Это будет сделано

Ответ №6:

Пример может облегчить понимание: допустим, q = 5, тогда s = диапазон (1,5,2) (цикл по s создаст 1,3) Следовательно, s — это не 1 конкретное число, а скорее «множественные» числа. Установка r = s означает, что r — это несколько чисел. Проверка, если r <= q проверяет, является ли значение q больше или равно r, что является кратным числом. Поэтому сравнение невозможно.

Это должно сделать это. Я попытался закодировать его немного понятным для интерпретации, не сильно изменяя код.

 q = int(input("enter a number"))
r = range(1,q,2)
s = 0
n = 0
for i in r:
    n = n   1
    s = s   i
    if s >= q:
        break
print("smallest N is",i)