【问题标题】:output odd numbers without if [closed]不使用 if [关闭] 输出奇数
【发布时间】:2022-01-21 17:50:00
【问题描述】:

我只需要从这个程序中输出奇数:

m = int(input())
n = int(input())
for i in range(m, n - 1, -1,):
    print(i)

请不要如果

【问题讨论】:

  • 您的问题是什么?预期输出与实际输出?

标签: python python-3.x


【解决方案1】:

使用and 代替if

i&1 and print(i)

(在步骤-2中更好地使用范围,我只是不喜欢这样的限制问题,并且总是尝试以意想不到的方式解决限制)。

【讨论】:

  • 这实际上在 for-range 循环中打印 0 而不是偶数。无论如何,这是一个简短而聪明的解决方案(我不知道这种方式的使用和语法)+1
  • @FLAK-ZOSO 也许如果你在 repl shell 或其他任何调用中执行它。如果作为程序正常运行,就没有这种多余的打印了。
  • 我使用 Python shell 3.10.1 (ibb.co/88LRmFC)
  • @FLAK-ZOSO 是啊是啊,这就是我的意思。所以不要那样做:-)
【解决方案2】:

如果不能保证你的起始值是奇数,它会变得有点棘手,因为你不能简单地按 2 步。你仍然可以使用这样的条件(稍微)摆脱它:

m = int(input())
n = int(input())
for i in range(m, n):
    output_str = (f"{str(i % 2)}" or "") * i
    output_str += (i % 2) * '\n'
    print(output, end="")

我应该在这里声明我严格回答这个问题。我并不完全赞同这种方法。

【讨论】:

  • 感谢您的决定
  • 我同意你的观点,没有办法认可一种方法来代替单行 if 语句......无论如何我从来没有想过这样的解决方案,+1
  • 是的,我知道这很困难,尤其是对我来说,但我对这种解决问题的方法很感兴趣。
  • 您忘记初始化output 变量。
  • @martineau 很好,谢谢。进行编辑时错过了这一点。
【解决方案3】:

你可以使用一个跨步范围,只要你让sur来调整起始数字:

m = int(input())
n = int(input())
for i in range(m+1-m%2,n+1,2): # start at next odd if m is even
    print(i)

如果您希望它们按降序排列:

m = int(input())
n = int(input())
for i in reversed(range(m+1-m%2,n+1,2)):
    print(i)

【讨论】:

  • 但是 op 想要“只输出奇数”。
  • 谢谢这是最容易理解的解决方法,尤其是对于初学者
  • 这可能是最好的解决方案,因为你不关心第一个数字是否是偶数。
  • 我会使用m|1 而不是m+1-m%2
  • @Kelly,非常好。但需要对初学者进行一些解释:将数字的低位设置为 1 使其为奇数(增加 1),如果它是偶数或保持原样,如果它已经是奇数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
相关资源
最近更新 更多