嵌套语句,我做错了什么?

3
如果我将“5”输入限制并将“3”输入副本,则希望输出为:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5

这是我的代码:

limit = int(input("Limit: ")
copies = int(input("Copies: ")
count = 1

for i in range(copies):
     for j in range(limit):
          print(count, end= " ")
          count += 1
     if count == limit: count = 0
print()

但是这段代码的输出结果是:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15

为什么我的 "if count == limit: count = 0" 看起来没有任何作用?

为什么你需要在那里检查 count 的值?只需在内部循环之外将其重置为1(即与if语句相同的位置)即可实现你想要的效果。 - Ben
1
打印 i + 1 怎么样? - falsetru
我的编程思路是,当计数器count等于限制limit时,我希望将count重置为0,以便它可以从1到5重新计数,重复3次。 - oneman
@LiamEmery 但是如果内部的for循环已经完成,那么该行已经完成打印。你不需要检查任何东西,只需将其重置为起始值即可。 - Ben
@Ben 谢谢你的帮助。 - oneman
4个回答

6
让我们手动看一下迭代过程:你从 count = 1 开始。
因此,在第一个 copies 迭代中,内部循环运行了 limit=5 次。在每次内部迭代之后,count 增加了一。因此,经过 5 次迭代之后,count 将增加一次五次。因此,内部循环后的值将为 6
此时,您检查 count 是否等于 limit 的值。所以您检查 6 是否等于 5,显然不是真的。因此,变量不会重置,下一个外部迭代将运行。
由于您从不减少 count 的值,因此检查永远无法变为 true,因此 count 将不断增加而永远不会被重置。
要修复这个问题,只需删除检查并重置 count,而不管它的值如何。由于您始终运行内部循环 limit 次,因此您始终知道您将增加 count 的次数,因此没有理由进行检查:
for i in range(copies):
     for i in range(limit):
          print(count, end= " ")
          count += 1
     count = 1

您还需要将该值重置为1,以匹配初始情况,并使行中的第一个值为1


0
因为当你执行range(limit)时,它只会到limit-1
例如:range(3)将给出[0, 1, 2],所以最后一个计数总是limit + 1
你可以有一种替代方案,在外部循环中重置count = 1,或者你可以检查count - 1 == limit

请注意,循环值从未被使用,因此 range(limit) 使您循环遍历的值范围并不重要。 - poke
是的,我知道,只是想指出为什么条件语句不起作用。 - Sagar Waghmode

0

你不需要那个 if 语句。 只需在内部的 for 后面放置重置语句即可。


0

只需在外部的for循环中初始化count变量,您就不必在之后重置它:

limit = int(input("Limit: ")
copies = int(input("Copies: ")

for i in range(copies):
    count = 1
    for j in range(limit):
        print(count, end= " ")
        count += 1
print()

但是你可以更有效地做到这一点:

limit = int(input("Limit: ")
copies = int(input("Copies: ")

sequence = range(1, limit+1)
for i in range(copies):
    print(" ".join(sequence))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接