【问题标题】:print all the numbers in a range that are divisible by 4 or 5, but not both打印范围内可被 4 或 5 整除的所有数字,但不能同时被 4 或 5 整除
【发布时间】:2021-01-09 18:31:37
【问题描述】:

我正在尝试打印从 100 到 200 的所有数字,每行 10 个,可以被 4 或 5 整除,但不能同时被整除。打印行中的数字正好用一个空格隔开。 我想要实现的示例是:

104 105 108 110 112 115 116 124 125 128 
130 132 135 136 144 145 148 150 152 155 
156 164 165 168 170 172 175 176 184 185 
188 190 192 195 196

我试过这个:

i=100
a=100
while i<=200:
    if ((a%3 and a%5)==0) :
        a=a+1
    elif a/3 ==0 and a/5 != 0:
        print(a)
        a=a+1
    else:
        print(a," ")
        a=a+1
    i=i+1

我可以让它打印 100-200 的所有数字,而不是能被 4 和 5 整除的数字,但我不能让它打印能被 4 或 5 整除但不能被 4 和 5 整除的数字。也让它们打印每行 10 个很棘手

感谢任何帮助或被放在正确的方向

【问题讨论】:

  • 您的问题陈述在几个地方指出您需要被 4 整除;您的代码检查可被 3 整除。请解决冲突。
  • 您需要独立处理至少三个项目:迭代 100 到 200;选择要打印的项目;每行打印 10 个。一次做这些。到目前为止,你没有一个工作。备份和增量工作。

标签: python loops if-statement while-loop


【解决方案1】:

“能被 4 或 5 整除,但不能被 4 和 5 整除”是一个 xor 操作,所以这里有一个 python 的 operator.xor 方法示例:

import operator

nums = [i for i in range(100,201) if operator.xor(not i % 4, not i % 5)]

for i in range(0, len(nums), 10):
    print(" ".join(str(x) for x in nums[i:i+10]))

【讨论】:

    【解决方案2】:
    for i in range(100, 201):
        if i % 4 == 0 and i % 5 == 0:
            continue
        if i % 4 != 0 and i % 5 != 0:
            continue
        print(i)
    

    要每行打印 10 个,您可以执行以下操作:

    printed = 0
    for i in range(100, 201):
        if i % 4 == 0 and i % 5 == 0:
            continue
        if i % 4 != 0 and i % 5 != 0:
            continue
        print(i, end=" ")
        if (printed := printed+1) == 10:
            printed = 0
            print()
    

    【讨论】:

      【解决方案3】:
      lines = ""
      count_nums_in_one_line = 0
      
      for i in range(100, 201):
          if count_nums_in_one_line == 10:
              lines += "\n"
              count_nums_in_one_line = 0
      
          if i % 4 == 0 and i % 5 == 0:
              pass
      
          elif i % 4 == 0 or i % 5 == 0:
              lines += str(i)
              lines += " "
              count_nums_in_one_line += 1
      
      print(lines)
      

      这样就可以了:)

      【讨论】:

        【解决方案4】:
        My 2 cents:
        
        l=[i for i in range(100,201) if (i%4==0)!=(i%5==0)]
        for i in range(len(l)//10):
            print(*l[i*10:i*10+10])
        print(*l[len(l)//10*10:])
        

        【讨论】:

        • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 此代码回答问题的附加上下文可提高其长期价值.
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 2018-04-10
        • 1970-01-01
        • 1970-01-01
        • 2019-04-16
        相关资源
        最近更新 更多