python从0迭代到任何整数,正数或负数



我必须从0迭代到任何整数(称为x),可以是正数或负数(包括0和x)(无论我是从x迭代到0还是从0迭代到x都无关紧要)我知道我可以使用if-else语句首先检查x是正还是负,然后使用range(x+1)if x>0或range(x, 1)if x<0(两者都将在x=0时工作),如:

if x >= 0:
for i in range(x+1):
pass
else:
for i in range(x, 1):
pass

但是我想要一个更好的方法,特别是因为我实际上是在2个整数上迭代,这段代码很乱(这里我是从y迭代到0还是从0迭代到y并不重要)

if (x >= 0) and (y >= 0):
for i in range(x+1):
for j in range(y+1):
pass
elif (x >= 0) and (y < 0):
for i in range(x+1):
for j in range(y, 1):
pass
elif (x < 0) and (y >= 0):
for i in range(x, 1):
for j in range(y+1):
pass
else:
for i in range(x, 1):
for j in range(y, 1):
pass

不需要函数的简单解决方案

for i in range(min(x, 0), max(x, 0) + 1):
for j in range(min(y, 0), max(y, 0) + 1):
pass

你可以通过定义一个函数来简化它。

get_range_args = lambda x: (0, x+1) if x > 0 else (x, 1)
for i in range(*get_range_args(x)):
for j in range(*get_range_args(y)):
pass
方法一:
x = -9
y = 1
def getPosNeg(num):
if num >= 0:
return f"0, {num+1}"
return f"{num}, 1"
x_eval = eval(getPosNeg(x)) # use eval
y_eval = eval(getPosNeg(y)) # use eval
for i in range(*x_eval):
for j in range(*y_eval):
print(i, j) 

方法2:

x = -9
y = 1
def getPosNeg(num):
if num >= 0:
return (0, num+1)
return (num, 1)
x_eval = getPosNeg(x)
y_eval = getPosNeg(y)
for i in range(*x_eval):
for j in range(*y_eval):
print(i, j) 

如果你只想要范围内的正整数,使用abs():

x = -9
y = 1
for i in range(abs(x+1)):
for j in range(abs(y+1)):
print(i, j)

文档:
eval ()

相关内容

最新更新