如何从Python 3中的for循环中获得正确的结果?

时间:2018-06-19 08:22:43

标签: python python-3.x loops for-loop iteration

我正在创建一个简单的程序,其中有一个简单的for循环。我的程序中有两个输入, n k k 用于在迭代次数上跳过数字, n 是要打印的数字的数量。

这是我的代码:

nk = input().split()
n = int(nk[0])
k = int(nk[1])
store_1 = []
for x in range(1,n+n,k):
    store_1.append(x)
print(store_1)

似乎有效的唯一对是当k设置为2并且范围的开始保持为1.但是当k被设置为任何其他数字并且范围的开始高于1时,它不会出现。提供正确的输出。例如:

#6 and 3, starting range 1
[1,4,7,10]
#Correct output: [1,4,7,10,13,16]

#4 and 2, starting range 2
[2,4,6]
#Correct output: [2,4,6,8]

#4 and 2, starting range 1
[1,3,5,7]
Only this sort of pair and starting range provides the correct output.

如何修复我的代码并获得正确的输出。注意:我可以将范围的起点设置为任意数字,例如:2,3,4等。

编辑: 更多样本:

#5 and 3, starting range 3
Correct output: [3,6,9,12,15]
#7 and 7, starting range 1
Correct output: [1, 8, 15, 22, 29, 36, 43]
#6 and 8, starting range 5
Correct output: [5,13,21,29,37,45]

3 个答案:

答案 0 :(得分:2)

从迭代k次的循环中的起始值开始,按n递增值:

n, k = list(map(int, input().split()))
store_1, x = [], 1  # x is the starting range.
for _ in range(n):
    store_1.append(x)
    x += k
print(store_1)

请注意x是起始值。您可以在代码中设置它或从用户读取。

答案 1 :(得分:2)

聪明的方法是:

n, k, s = list(map(int, input().split())) # s is the start_range
store_1 = list(range(s,s+(n*k),k))
print(store_1)

示例输入:

5 3 3

输出:

[3,6,9,12,15]

答案 2 :(得分:1)

使用while循环从您那里获得的另一个解决方案:

nk = input().split() #Example of entry 2 6
n = int(nk[0])
k = int(nk[1])
store1=[]
stored_num = 1
count_of_printed_nums = 0
while(count_of_printed_nums<n):
    store1.append(stored_num)
    stored_num+=k
    count_of_printed_nums+=1
print(store1)