连续打印5个数字

时间:2009-11-19 04:30:32

标签: python

我必须编写一个程序来打印数字1到50,但连续有5个数字,如:

1,2,3,4,5
6,7,8,9,10

直到50岁而不使用列表

for i in range(2,51):
   if i%5==0:
      print i

这给了我5,10,15,20

请帮帮我

10 个答案:

答案 0 :(得分:6)

一些提示:

  • range()函数的第一个参数不正确。它必须是1而不是2.包括起始索引,排除结束的索引。这是一个很好的做法,以避免错误。
  • 使用模运算符,您可以找到检测每5个值的方法;当发生这种情况时,您可以使用它来打印一条线。然后,当你输出一个值时,你将不得不找到一种不输出线的方法;查看python documentation以获取print()函数的方法。 (注意,使用Python 3.0在打印领域已经发生了变化,但是你似乎在使用2.x版本给出了你的例子)
  • 另一种方法是使用range()函数的第3个参数来逐步执行序列,增量为5)。这样的范围会依次给你1个,6个,11个,16个等等,你可以使用这个数字作为每行的第一个,并简单地添加以下几个。

答案 1 :(得分:2)

你可以像你一样开始(除了你需要从1开始 - 那2是真的怪异! - ):

for i in range(1,51):
   if i % 5 == 0:
      print i

但是你需要为else加入if条款,因为即使i不是多个,你想要打印一些内容当print i 是5的倍数时,只有 与你已经在做的简单i :< / p>

   else:
      print i, ',',

正如其他答案已经说过的那样,尾随的逗号意味着“还没有换行”! - )((它在Python 3中更为平常且更明智。无论如何,但你明显使用Python 2.something,并且在这些版本中是你需要做的))。

答案 2 :(得分:1)

我从来没有使用过Python,但如果不对的话,这应该很接近。

for i in range(1,51):
      print i;
      print ",";
      if (i%5==0)
         { print "\n";}

答案 3 :(得分:0)

另外,请记住,使用print会导致新行开始。除非如上所述,否则之后会使用逗号。

您可以使用字符串收集值以便稍后打印出来。

答案 4 :(得分:0)

一些提示

  • 要打印1到50,您需要在范围函数中传递n + 1,例如1到51,在C语法中使用(i=1;i<51,i++)语法

  • 如果您想要在每个数字之间打印逗号

  • 每5次打印换行符,您只需使用当前if i%5==0:但打印空行,而不是i

  • 要连接num + string“,”您可以使用`i` or str(i) , you can do like `i` +","

  • 如果你最后不需要逗号,你可以像i%5 print“,”打印“\ n”=&gt;

    (i%5 and "," or "\n")

  • print i将逐行打印i,print i,将在同一行打印

只是我的2美分

答案 5 :(得分:0)

for i in range(1,51):
    if i%5 == 0:
        print i
    else:
        print i, ",",

答案 6 :(得分:0)

(there used to be python code here)
编辑:道歉,没有意识到这是作业。在回答之前我真的需要检查标签。以下是对需要发生的事情的解释。

显然你知道你试图从1到50输出连续数字,所以你需要一个计数器。您已经发现它需要range()来电,但需要从1到51,而不是2到50。

range()调用需要从1到51的原因是:它会在i处启动变量1,然后检查它是否已达到目标( 51)在循环之前。如果达到目标(意味着i == 51),它将退出循环而不执行循环代码。因此,不是从1到50,而是从1到51,这样我们就不会跳过第50次迭代。

接下来,您将要在屏幕上显示这些数字。但是使用python的print命令会在新行上打印每个数字!那显然不是你想要的。因此,您将不得不创建一个缓冲区字符串以附加每个数字,直到您准备好打印该行。你可以称之为“输出”或其他任何东西。

就个人而言,我喜欢在for循环之前清除缓冲区,以确保没有剩余的内存跟踪进入输出。叫我偏执狂。所以我在循环之前的一行上写output = ""

现在你有了一个缓冲区字符串,你需要做的就是遵循逻辑流程:

  1. i添加到缓冲区output
  2. 如果i是5的倍数,则打印缓冲区output并将其重置为空字符串。 (我们这样做,以便我们可以为下一行启动缓冲区。)
  3. 如果i不是5的倍数,请在output缓冲区中添加逗号,以便添加的下一个数字将位于逗号之后。
  4. 继续我们的循环。
  5. 这些步骤应该很容易理解。您之前已经看过的第2步...要检查一个数字是否是另一个数字的倍数,只需使用%即可。如果A % B == 0则A是B的倍数。

    对于如何解决这个问题,这应该是一个非常简单的解释。希望它有所帮助。

    抱歉通过发布答案毁了你的学习经历!现在你就明白为什么答案有效。

答案 7 :(得分:0)

for i in range(1,51):
    if i%5 != 0:
        print str(i)+',' , # trailing comma means no \n
    else:
        print i

答案 8 :(得分:0)

此代码将为您提供所需的输出。

youtube-dl_archive stop

您可以将'#!/bin/sh umask 022 cat /mnt/archive/youtube-dl/youtube-dl_channels | while read line do if [[ $line = "channel"* ]]; then archivedir=$(cut -c34- <<< "$line") channeluid=$(cut -c-32 <<< "$line") elif [[ $line = "user"* ]]; then archivedir=$(cut -c6- <<< "$line") channeluid="$line" fi exec &> /var/log/youtube-dl/$archivedir-[$(date +"%m.%d.%Y_%H-%M-%S")].log youtube-dl\ -civw\ --newline\ --all-subs\ --no-mtime\ --embed-subs\ --add-metadata\ --write-thumbnail\ --prefer-ffmpeg\ --merge-output-format mkv\ --download-archive /mnt/archive/youtube-dl/"$archivedir"/"$archivedir"-archive.txt\ https://www.youtube.com/$channeluid\ -o "/mnt/archive/youtube-dl/$archivedir/'%(uploader)s'-(%(uploader_id)s)_%(upload_date)s_'%(title)s'_ [%(resolution)s]_[%(id)s].%(ext)s" done '放在没有空格的情况下进行打印 用于空间“ #python for i in range(1,51): if i%5 == 0: print (i)#this will give \n at the end else: print (i,end=",")#this will print the numbers with coma at the end

答案 9 :(得分:0)

在一条语句中,您可以使用print解压缩生成器表达式,并利用sep参数。此解决方案的好处是不需要显式的if / else条件逻辑。

k, n = 5, 50

print(*(','.join(map(str, range(i, i+k))) for i in range(1, n+1, k)), sep='\n')

# 1,2,3,4,5
# 6,7,8,9,10
# 11,12,13,14,15
# 16,17,18,19,20
# 21,22,23,24,25
# 26,27,28,29,30
# 31,32,33,34,35
# 36,37,38,39,40
# 41,42,43,44,45
# 46,47,48,49,50