Python:有没有办法打印未知范围内的偶数而没有if语句?

时间:2019-04-05 12:13:57

标签: python loops for-loop if-statement conditional

我要在Python类中做作业,并被给了这个问题:

  

制作一个程序,从用户那里获得2个数字,并打印所有偶数   在这2个数字范围内的数字,您只能为   语句,但不能使用其他循环或if语句。

我了解我需要使用以下代码:

for num in range (x,y+1,2):
    print (num)

但没有任何if语句,我无法检查插入的值x是偶数还是奇数,以及用户是否将数字5插入为x ,所有印刷品将为奇数。

我也尝试将每个数字输入一个元组或数组,但是我仍然无法检查第一个数字是否甚至是开始打印。

def printEvenFor(x,y):
    evenNumbers =[]
    for i in range (x,y+1):
        evenNumbers.append(i)
    print (evenNumbers[::2])

def printEvenFor(x,y):
    for i in range (x,y+1,2):
        print(i,",")

我希望printEvenFor(5,12)的输出是6,8,10,12,但它是5,7,9,11

8 个答案:

答案 0 :(得分:1)

您可以使用下限除法然后乘以x,使之均匀:

x = (x // 2) * 2
然后,

x将四舍五入为前一个偶数整数,如果之前为偶数,则保持不变。

如果要将其舍入为以下偶数整数,则需要执行以下操作:

x = ((x + 1) // 2) * 2

这可以通过使用移位运算符来进一步改善:

x = (x >> 1) << 1         #Alternative 1
x = ((x + 1) >> 1) << 1   #Alternative 2

示例:

#Alternative 1
x = 9
x = (x >> 1) << 1
#x is now 8

#Alternative 2
x = 9
x = ((x + 1) >> 1) << 1
#x is now 10

第二个可能更适合您

答案 1 :(得分:1)

您可以使用提醒来获取正确的范围:

@Route("workaround")
public class Workaround extends FlexLayout implements AttachNotifier, HasUrlParameter<String> {
    private Location currentLocation = null;

    /* ... */

    @Override
    public void setParameter(BeforeEvent event, @OptionalParameter String parameter) {
        // called before onAttach
        currentLocation = event.getLocation();
    }

    @Override
    protected void onAttach(AttachEvent attachEvent) {
        super.onAttach(attachEvent);

        QueryParameters qm = currentLocation.getQueryParameters();
        /* ... */
    }
}

输出:

// This calculates the triangle points in a rectangular triangle strip.
// Used for 3D Webgl texture mapping.
// Copyright Joshua Langley 2019.
var rows=2;
var cols=3;
var grid = rows*cols;
var offset;
var pos = [];
var index = 0;
var mpOffset = 1;
var offsetX, offsetY;
for (var row = 0; row <= rows; ++row)
{
  offsetY = row * (mpOffset / rows);
  for (var col = 0; col <= cols; ++col)
  {
    offsetX = col * (mpOffset / cols);

    pos[index+0] = (offsetX);
    pos[index+1] = (offsetY);
    index+=2;
  }
}
log.info("pos="+JSON.stringify(pos));
log.info("pos.length="+pos.length);

var rows=rows+1,cols=cols+1; // Important this counting Points not Squares.
var grid = rows*cols;
var offset;
var indices = [];
var indice = 0;
var offset;
var doublePoints = false;
var tPoint, bPoint;
for (var row = 0; row < rows; ++row)
{ 
  for (var col = 0; col < (cols-1); ++col)
  {
      offset = row * rows + col;
      tPoint = offset+1;
      bPoint = offset+cols+1;

      if (bPoint > grid)
          continue;

      indices.push(tPoint);           
      indices.push(bPoint);
      if (offset > 0 && (bPoint+1) < grid && (offset+1) % cols == 0)
      {
          indices.push(bPoint);
          indices.push(tPoint+1);
      }                   
  }
}
log.info("indices="+JSON.stringify(indices)); // Expected Result
log.info("indices.length="+indices.length);

var actualStrip = [];
for (var i = 0 ; i < indices.length; ++i)
{
    actualStrip.push(pos[(indices[i]-1)*2+0]);
    actualStrip.push(pos[(indices[i]-1)*2+1]);
}
log.info("actualStrip="+JSON.stringify(actualStrip));
log.info("actualStrip.length="+actualStrip.length);

答案 2 :(得分:1)

一种方法是使用while,将开始和结束范围输入

for each in range(int(input()),int(input())):
    while each%2 == 0:
       print (each)
       break; 

答案 3 :(得分:0)

尝试一下:

x = x+x%2
for num in range (x,y+1,2):
    print (num)

答案 4 :(得分:0)

您可以这样做:

>>> for n in range((x + 1) // 2 * 2, y+1, 2):
        print(n)

range的第一个参数如果为奇数,则将其强制为下一个偶数。最后一个参数为二。

答案 5 :(得分:0)

def printEvenfor(x,y):
    return list(range(((x+1) // 2) * 2,y+1, 2))

printEvenfor(9,16)

答案 6 :(得分:0)

以下功能将满足您的需求。我使用round来强制边界为偶数,以便以偶数开始该范围。

def print_even_between(x, y):
    x = round(x / 2) * 2
    y = round(y / 2) * 2

    for i in range(x, y, 2):
        print(i)  
    print(y)

答案 7 :(得分:0)

有趣但有趣:将字符串与零相乘。

>>> low, high = int(input()), int(input())
5
13
>>> for n in range(low, high + 1):
...     print('{}\n'.format(n)*(not n%2), end='')
... 
6
8
10
12

由于字符串与False(用作零)​​相乘,所以不会打印奇数编号。