我有一个在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
您可以通过使用楼层划分然后乘法来使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
第二个可能更适合你
您可以使用提醒来获取正确的范围:
def print_event_for(min_, max_):
reminder = min_ % 2
for i in range(min_+reminder, max_+reminder, 2):
print(i)
print_event_for(5, 12)
输出:
6
8
10
12
一种方法是使用while,它采用开始和结束范围
for each in range(int(input()),int(input())):
while each%2 == 0:
print (each)
break;
试试这个:
x = x+x%2
for num in range (x,y+1,2):
print (num)
你可以这样做:
>>> for n in range((x + 1) // 2 * 2, y+1, 2):
print(n)
range
的第一个参数强制它成为下一个偶数,如果它是奇数。最后一个论点上升了两个。
以下功能可以满足您的需求。我使用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)
Hacky但很有趣:将字符串乘以零。
>>> 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
不打印奇数,因为字符串乘以qazxsw poi(作为零)。
False