繁体   English   中英

使用迭代在python中找到最小的k

[英]Using iterations to find smallest k in python

我是编程新手,我正在尝试进行迭代。

我正在尝试做的一个例子是:

输入一个正整数: 100

19是最小的 n,使得1+3+5+7+...+n >= 100

因此,从插入的整数开始,从 1 以 2 为步长求和,直到总和等于插入的整数。

我收到一条错误消息

   while r <= q:
TypeError: '<=' not supported between instances of 'range' and '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])

`

这是一个简单的例子。

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

我提出这个解决方案:

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. 在循环中,我检索范围迭代器的下一个元素,将其保存到n并将其添加到总和s 所以我记得在最终 sum s变得更大或等于q之前添加的最后一项

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)

您的代码出现错误,因为无法判断一个整数是等于还是小于某个范围。 例如,我无法确定 5 是小于、等于还是大于 60 到 110 之间的数字。这不是数学的工作原理。 但是,您可以确定该数字是小于、等于还是大于该范围内的最小数字。 我建议您为此更改代码:

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

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)

这会做

一个例子可能更容易理解:假设 q = 5 那么 s = range(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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM