我目前正在编写一个使用' for'循环和范围函数处理从999到零的所有整数。我必须在由空格分隔的一行上以40的循环倍数编码,但在一行上只有六个。我遇到的问题是实现一个计数器来确定何时打印了六个倍数。
输出应如下所示:
必需的输出
960 920 880 840 800 760
720 680 640 600 560 520
480 440 400 360 320 280
240 200 160 120 80 40
目前我有这个:
def main():
count = 0
for num in range(960, 0, -40):
print(num, end=' ')
main()
我知道这应该很简单,但是我很难将范围格式化为6列。任何帮助,将不胜感激。
答案 0 :(得分:2)
您可以使用Python的enumerate
作为计数器,并使用条件表达式使代码更紧凑:
for i, number in enumerate(range(960, 0, -40), 1):
print(number, end=' ' if i%6 else '\n')
这是Python 3代码。对于Python 2,将此行添加到文件的顶部:
from __future__ import print_function
答案 1 :(得分:0)
您可以使用Python的模运算符%来确定count是否可以被6整除。这可能不是最漂亮的答案,但是如何:
def main():
count = 0
for num in range(960, 0, -40):
count += 1
print(num, end=' ')
if count % 6 == 0:
print('')
main()
答案 2 :(得分:0)
这应该有效:
def main():
count = 0
for num in range(960, 0, -40):
count += 1
if count % 6 == 0:
print(num, end='\n')
else:
print(num, end=' ')
main()
基本上是相同的功能,除了我们检查计数是否可被6整除,如果是,则为下一行打印一个新行。
答案 3 :(得分:0)
在每个循环中递增计数器,并在达到6时将其重置为零。
def main():
counter = 0
for number in range(960, 0, -40):
counter += 1
print(number, end=' ')
if counter == 6:
counter = 0
print('')
main()
答案 4 :(得分:0)
这可能是不合理的,但我讨厌循环中的计数器。虽然在这个特殊情况下有些过分,您是否想过将发电机嵌入混合?对于更复杂的情况,这是一个方便的模式:
def print_newline_after_x_iterations(my_range, x):
i = my_range.__iter__()
while True:
try:
for _ in range(x):
yield next(i)
print()
except StopIteration:
break
def main2():
for num in print_newline_after_x_iterations(range(960, 0, -40), x=6):
print(num, end=' ')
输出:
>>> main2()
960 920 880 840 800 760
720 680 640 600 560 520
480 440 400 360 320 280
240 200 160 120 80 40
甚至使用基于协同例程的版本:
def coroutine(f):
def wrap(*args, **kwargs):
x = f(*args, **kwargs)
next(x)
return x
return wrap
@coroutine
def printer():
while True:
msg, end = yield
print(str(msg), end=end)
@coroutine
def columnator(columns=6, outputer=printer):
p = printer()
try:
while True:
for _ in range(columns):
p.send(((yield), " "))
p.send(("", "\n"))
except GeneratorExit as err:
p.send(("", "\n"))
def main3():
s = columnator(6, outputer=printer)
for num in range(960, 0, -40):
s.send(num)
s.close()
输出:
>>> main3()
960 920 880 840 800 760
720 680 640 600 560 520
480 440 400 360 320 280
240 200 160 120 80 40
答案 5 :(得分:0)
这是一个两步任务(使用Python 2.7x):
1.获取40的倍数的所有整数到列表中
2.Split上面列出了每6个元素,并格式化输出
int a=3, b=4;
a>4 && b>5 // false
a>1 && b>5 // false
a>4 && b>3 // false
a>1 && b>3 // true
a>1 || b>3 // true
a>1 || b>5 // true
a>4 || b>3 // true
a>4 || b>5 // false