【问题标题】:Trying to calculate even odd without math operators尝试在没有数学运算符的情况下计算奇数
【发布时间】:2020-07-31 19:01:54
【问题描述】:
w= int(input('enter a num:'))
even= []
for x in range (0, 999999999999999999999999999999999999999999999999, 2):
    even.append(x)
    if w in even:
        print ('the num is even')
        break
else:
    print ('the num is odd')

【问题讨论】:

  • 该循环将需要很长时间才能执行并生成一个非常大的列表。你最好只写even = range(0, 999999999999999999999999999999999999999999999999, 2),它会立即生效,你可以立即检查w in even
  • 注意:您可以通过测试最低有效位是否为 1(仅限整数)来测试数字是否为奇数而无需数学运算符。
  • 我很高兴为自己设定挑战。为此,您认为“数学运算符”到底是什么?我想+-*/** 不在讨论范围内。您似乎在尝试不使用 ==。位运算符呢?还有其他人吗?
  • 即使没有位运算符,将数字转换为字符串并测试最后一个字符是否在“13579”中会更简单。

标签: python python-3.x for-loop if-statement


【解决方案1】:

虽然这个想法可行,但该循环需要很长时间才能执行并生成一个非常大的列表。最好直接使用range 对象。

w= int(input('enter a num:'))
even = range(0, 999999999999999999999999999999999999999999999999, 2)
if w in even:
    print("the number is even")
else:
    print("the number is odd")

这将立即起作用(尽管仅适用于零和那个大顶数之间的数字)。 range 对象可以通过自己的内部算术判断它是否包含任何给定的数字,而无需进行任何迭代。

(仅限 Python 3)

【讨论】:

  • 对于不太熟悉 Python 内部工作原理的人来说,这怎么可能立即生效呢?我可以看到 Python 实际上并没有创建每个偶数的列表,但是 Python 是否不必迭代以确定该数字是否实际上在该范围内?也许输入2 很快,但是999999999999999999999999999999999999999999999998 不会花更长的时间吗?
  • @CoreyOgburn 它使用基于端点和步骤的算术智能地确定范围是否包含任何特定数字。检查999999999999999999999999999999999999999999999998 与任何其他号码一样快。
  • 我注意到了。我考虑过使用端点,但使用像500000000000000000000000000000000000000000000000(范围中间的死点)这样的数字进行的测试似乎仍然可以立即执行。我可能会问我自己关于这个的问题。我很感兴趣。
  • @CoreyOgburn 不要打扰:stackoverflow.com/questions/30081275/…
  • @superbrain 是的,我想。以停止时钟的工作方式“工作”。
猜你喜欢
  • 2017-09-24
  • 1970-01-01
  • 2020-12-21
  • 2022-10-13
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 2021-05-08
相关资源
最近更新 更多