Python - 用于循环和计数器

时间:2017-09-20 16:43:30

标签: python loops count range

我目前正在编写一个使用' 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列。任何帮助,将不胜感激。

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