python 由 10 个元素换行
python line break by 10 elements
所以我必须写入标准输出 100 个数字,但在一行中只输入 10 个数字,我写的代码几乎是完美的,但输出如下:
23456789101
5378566145
8353464573
7596745634
4352362356
2342345346
2553463221
9873422358
8223552233
578942378
还有代码:
import sys
import random as r
UPTO = 100
def main():
for i in xrange(UPTO):
if i % 10 == 0 and i != 0:
sys.stdout.write(str(r.randint(0, 9)) + '\n')
else:
sys.stdout.write(str(r.randint(0, 9)))
print
我怎样才能完美地做到这一点?
更改循环:
for i in xrange(1, UPTO + 1):
代码:
import sys
import random as r
UPTO = 100
def main():
for i in xrange(1, UPTO + 1):
if i % 10 == 0 and i != 0:
sys.stdout.write(str(r.randint(0, 9)) + '\n')
else:
sys.stdout.write(str(r.randint(0, 9)))
print
main()
输出:
5324707535
0662651201
6774603548
2062356640
2371234722
0295841132
5498111577
0871557117
3062255375
2219008944
您需要从 1 开始到 UPTO + 1
:
for i in xrange(1, UPTO + 1):
一旦你改变你的代码工作:
In [18]: main()
3989867912
0729456107
3457245171
4564003409
3400380373
1638374598
5290288898
6348789359
4628854868
4172212396
您还可以将 print 用作函数并从 __future__
导入以简化您的代码:
from __future__ import print_function
import random as r
UPTO = 100
def main():
# use a step of 10
for i in range(0, UPTO, 10):
# sep="" will leave no spaces between, end="" removes newline
print(*(r.randint(0, 9) for _ in range(10)), end="", sep="")
print()
正如其他人指出的那样,修复现有代码只是从 1 而不是 0 开始(或者在测试余数时将 1 添加到 i
)。
但你根本不需要重新发明轮子。使用 textwrap.wrap
可以大大简化自动换行。只需一次生成所有输出数据,例如:
digits = 100
# Make a 100 long string of digits
alltext = ''.join(str(random.randrange(10)) for _ in range(digits))
# Or to achieve the same effect more efficiently:
alltext = str(random.randrange(10**(digits-1), 10**digits))
然后使用 textwrap.wrap
和一个循环到 print
它:
import textwrap
for line in textwrap.wrap(alltext, width=10):
print line
其中得到(例如):
4961561591
3969872520
1896401684
8608153539
0210068022
3975577783
8321168859
8214023841
8138934528
7739266079
听起来 itertools
grouper
配方很好用。
import itertools
def grouper(iterable, n, fillvalue=""):
args = [iter(iterable)] * n
return itertools.izip_longest(*args, fillvalue=fillvalue)
UPTO = 100
digits = [str(random.randint(0, 9)) for _ in range(UPTO)]
sys.stdout.write("\n".join(map("".join, grouper(digits, 10)))
我将从 python3 导入 print
并使用它:
from __future__ import print_function
import random
UPTO = 100
for i in xrange(100):
for j in xrange(10):
print(random.randint(0,9), end='')
print()
对于python2
from random import randint
import sys
for i in range(100):
sys.stdout.write(str(randint(0,9))+("\n" if i%10==9 else ""))
或者如果您允许 "print" 函数而不是 print 语句
from __future__ import print_function
from random import randint
for i in range(100):
print(randint(0,9), end="\n" if i%10==9 else "")
所以我必须写入标准输出 100 个数字,但在一行中只输入 10 个数字,我写的代码几乎是完美的,但输出如下:
23456789101
5378566145
8353464573
7596745634
4352362356
2342345346
2553463221
9873422358
8223552233
578942378
还有代码:
import sys
import random as r
UPTO = 100
def main():
for i in xrange(UPTO):
if i % 10 == 0 and i != 0:
sys.stdout.write(str(r.randint(0, 9)) + '\n')
else:
sys.stdout.write(str(r.randint(0, 9)))
print
我怎样才能完美地做到这一点?
更改循环:
for i in xrange(1, UPTO + 1):
代码:
import sys
import random as r
UPTO = 100
def main():
for i in xrange(1, UPTO + 1):
if i % 10 == 0 and i != 0:
sys.stdout.write(str(r.randint(0, 9)) + '\n')
else:
sys.stdout.write(str(r.randint(0, 9)))
print
main()
输出:
5324707535
0662651201
6774603548
2062356640
2371234722
0295841132
5498111577
0871557117
3062255375
2219008944
您需要从 1 开始到 UPTO + 1
:
for i in xrange(1, UPTO + 1):
一旦你改变你的代码工作:
In [18]: main()
3989867912
0729456107
3457245171
4564003409
3400380373
1638374598
5290288898
6348789359
4628854868
4172212396
您还可以将 print 用作函数并从 __future__
导入以简化您的代码:
from __future__ import print_function
import random as r
UPTO = 100
def main():
# use a step of 10
for i in range(0, UPTO, 10):
# sep="" will leave no spaces between, end="" removes newline
print(*(r.randint(0, 9) for _ in range(10)), end="", sep="")
print()
正如其他人指出的那样,修复现有代码只是从 1 而不是 0 开始(或者在测试余数时将 1 添加到 i
)。
但你根本不需要重新发明轮子。使用 textwrap.wrap
可以大大简化自动换行。只需一次生成所有输出数据,例如:
digits = 100
# Make a 100 long string of digits
alltext = ''.join(str(random.randrange(10)) for _ in range(digits))
# Or to achieve the same effect more efficiently:
alltext = str(random.randrange(10**(digits-1), 10**digits))
然后使用 textwrap.wrap
和一个循环到 print
它:
import textwrap
for line in textwrap.wrap(alltext, width=10):
print line
其中得到(例如):
4961561591
3969872520
1896401684
8608153539
0210068022
3975577783
8321168859
8214023841
8138934528
7739266079
听起来 itertools
grouper
配方很好用。
import itertools
def grouper(iterable, n, fillvalue=""):
args = [iter(iterable)] * n
return itertools.izip_longest(*args, fillvalue=fillvalue)
UPTO = 100
digits = [str(random.randint(0, 9)) for _ in range(UPTO)]
sys.stdout.write("\n".join(map("".join, grouper(digits, 10)))
我将从 python3 导入 print
并使用它:
from __future__ import print_function
import random
UPTO = 100
for i in xrange(100):
for j in xrange(10):
print(random.randint(0,9), end='')
print()
对于python2
from random import randint
import sys
for i in range(100):
sys.stdout.write(str(randint(0,9))+("\n" if i%10==9 else ""))
或者如果您允许 "print" 函数而不是 print 语句
from __future__ import print_function
from random import randint
for i in range(100):
print(randint(0,9), end="\n" if i%10==9 else "")