繁体   English   中英

为什么我的 if/else 语句在我的范围内不起作用? (Python)

[英]Why isn't my if/else statment working in my range? (python)

start = int(input("Enter your starting value "))
end = int(input("Enter your ending value "))
inc = int(input("Enter your increment value "))

inc = int(input("Enter your increment value "))
for j in range (start,end,inc):
    if start > end:
        print("Nothing to show here!")
    else:
        print(j)

而不是输出“这里没有什么可以显示的”,因为它应该。 它只是输出最终值,否则它工作得很好。 但我想知道为什么它没有 output 我的报价。

如果start大于end (并且inc为正),则range本身为空; 循环永远不会运行,因此永远不会执行测试并且不会发生print 如果你想要这样的测试,它需要在循环之外,例如:

if start > end:
    print("Nothing to show here!")
else:
    for j in range(start,end,inc):
        print(j)

从技术上讲,当inc为负数时这是错误的(当start > end时会显示一些东西); 如果你需要处理这个(在某些情况下你可能知道inc总是>= 1 ),我可能只是简化为:

rng = range(start,end,inc)
if not rng:  # Test if the range is empty
    print("Nothing to show here!")
else:
    for j in rng:  # Iterate non-empty range
        print(j)

发生这种情况是因为start永远不会大于end ,即使增量超过end的值。

例如:

for i in range(1, 10, 100):
    print(i)

这个代码块只会运行一次并打印数字 1。这是因为 for 循环做了 3 件事。

首先,它将当前索引分配给给定的变量。 所以它执行i = 1第二,它检查是否i < 10 在第一次迭代中,这是真的。 所以它打印1第三,它增加i 这意味着在该迭代之后它执行i = 1 + 100

下一次迭代中的第三步盖过了第一步。 这意味着分配不会发生并且会执行递增。

这不起作用的另一个原因是rangeend参数是独占的。 这意味着 for 循环在第二步中进行的检查不是<=而是< 所以即使增量为 1, start也永远不会有相同的end

暂无
暂无

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

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