簡體   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