【问题标题】:Why isn't my if/else statment working in my range? (python)为什么我的 if/else 语句在我的范围内不起作用? (Python)
【发布时间】:2021-04-27 02:57:37
【问题描述】:
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)

而不是输出“Nothing to show here!”正如它应该的那样,它只是输出最终值。否则它工作得很好,但我想知道为什么它不输出我的报价。

【问题讨论】:

  • start 永远不会大于 end
  • startend 的值是多少?如果start 不大于end,则条件为假。
  • 这不是真的@blorgon。 Python 会很高兴地用否定的 inc 向后迭代。
  • 它们是变量,我只是添加了那部分代码。很抱歉造成混乱。
  • @Mark not if start < end lol.

标签: python python-3.x if-statement range


【解决方案1】:

如果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)

【讨论】:

  • 我喜欢答案的第二部分。
  • @DYZ:是的,当range 会告诉您它是否为空时,最好让它为您完成工作,而不是重新实现测试并冒着出错的风险。同样的原因,您只需在其上调用 int() 并处理异常,而不是使用 str.isdigit 和会错过极端情况的公司(例如领先 -、领先或尾随空格等)。
  • 答案的上半部分对我有帮助,谢谢!
  • @CosmicSaturn - 如果第一部分适合您,您可能还需要验证 inc。也许if start > end or inc <= 0: 也会阻止负增长。
【解决方案2】:

这是因为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 相同的值

【讨论】:

  • 如果inc 为负数,则不正确。
  • 你是对的,但这意味着start 永远不会等于end
猜你喜欢
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
相关资源
最近更新 更多