【问题标题】:I am getting an error in taking remainder of range ?why is this happening [closed]我在获取剩余范围时遇到错误?为什么会发生这种情况[关闭]
【发布时间】:2021-09-01 06:05:21
【问题描述】:
n = int(input())

for x in (range(1,n))%2!=0:

    if x % 3 == 0 and x % 5 == 0:
        print("SoloLearn")
    elif x % 3 == 0:
        print("Solo")
    elif x % 5 == 0:
        print("Learn")

它给出了这个错误---TypeError: unsupported operand type(s) for %: 'range' and 'int' 为什么我不能将 2 除以数字范围?

【问题讨论】:

  • for x in (range(1,n))%2!=0?
  • 如果你想要奇数,for x in (range(1, n, 2) 可以。
  • 欢迎来到 Stack Overflow。用您自己的话来说,您认为这段代码是什么意思?为什么您认为您应该能够“将 2 除以一系列数字”(看起来您实际上的意思是“将一系列数字除以 2”)?当你这样做时,你认为应该是什么结果?为什么?
  • 应该也可以用其他东西做这种数学吗?为什么?有哪些种类的东西?按照什么逻辑?
  • @user1740577 - 因为(1)我在您发布时写了它,并且(2)它并不是对“为什么我不能将 2 除以数字范围?”这个问题的真正答案?但猜测 for 循环的意图。

标签: python python-3.x range fizzbuzz


【解决方案1】:

你想要奇数试试这个:

for x in (range(1,n,2)):

代替:

for x in (range(1,n))%2!=0:

【讨论】:

  • 只提供代码并不是告诉 OP 出错的好方法。请详细说明
  • 为什么for x in (range(1,n))%2!=0: 错了?顺便说一句,我没有投反对票。
  • @Sujay 我写了你想要奇数的OP可以试试这个答案
  • 但是你需要解释什么是错误的(如果可能的话),仅仅给出正确的答案是不够的。 SO 不是代码编写服务。您需要指出他们错在哪里(并提供更好的替代方案),以便他们学习。
【解决方案2】:

Python 对象通过实现魔术方法自行决定操作的含义 - 请参阅 Emulating Numeric Typesrange(1,n) % 2 转换为调用 range(1,n).__mod__。但该方法并未针对range 对象实现,因为作者认为对整数生成器取模没有意义。请记住,这是对生成器对象的操作,而不是生成器迭代的整数。

如果你真的想将一个数字范围除以 2,你可以在生成数字时这样做

>>> for x in (y % 2 for y in range(10)):
...     print(x)

【讨论】:

    【解决方案3】:

    您是否要创建一个奇数列表? 你可以试试:

    for x in [num for num in range(1,n) if num x%2]:
        #do_stuff
    

    请注意,您可能会丢失检查的 !=0 部分,因为非零整数等于 True

    正如 Sujay 所指出的,有一种更快的方法可以隐藏底层机制。 我给你的例子可以修改为使用更复杂的检查。

    还有! 请注意,您并不是真的想这样做。您正在解决 fizzbuzz,您需要遍历所有数字。 30 号是偶数,当你到达它时,你想打印 'sololearn' ('fizzbuzz')。

    【讨论】:

    • range(1,n,2) 可以做的时候,为什么要创建一个新列表?
    • 只是为了说明底层机制。当然,将步骤添加到范围是一种更流畅的方法
    猜你喜欢
    • 1970-01-01
    • 2020-11-02
    • 2023-01-11
    • 2021-01-24
    • 1970-01-01
    • 2013-08-02
    • 2018-12-19
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多