我要在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
答案 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
(用作零)相乘,所以不会打印奇数编号。