ビンゴの結果を整形表示
Posted feedbacks - Python
bingo(100)でも動作するようにしたつもり。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import random
import itertools
division = 10
def bingo(count):
a = [i + 1 for i in xrange(count)]
random.shuffle(a)
width = len(str(count)) + 1
it = ((i + 1, n) for (i, n) in enumerate(a))
while 1:
b = list(itertools.islice(it, division))
if not b:
break
for i in xrange(2):
print "".join(str(c[i]).rjust(width) for c in b)
print
def main():
bingo(30)
bingo(35)
if __name__ == '__main__':
main()
|
bingo関数自体は#2255からいただきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from random import shuffle
def bingo(n):
l = range(1, n+1)
shuffle(l)
return l
def bingo_print(l):
fmt = '%%%sd' % len(str(len(l)))
a = range(1, len(l)+1)
for i in range(0, len(l), 10):
print ' '.join([fmt % j for j in a[i:i+10]])
print ' '.join([fmt % j for j in l[i:i+10]]) + '\n'
bingo_print(bingo(30))
bingo_print(bingo(35))
|
出力データをまとめてprintしてみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from random import shuffle
def bingo(n):
l = range(1, n+1)
shuffle(l)
return l
def bingo_print(l):
fmt = '%%%sd' % len(str(len(l)))
a = [fmt % i for i in range(1, len(l)+1)]
b = [fmt % i for i in l]
print '\n'.join(['%s\n%s\n' % (' '.join(a[i:i+10]), ' '.join(b[i:i+10])) for i in range(0, len(l), 10)])
bingo_print(bingo(30))
bingo_print(bingo(35))
|
僕が出題前に書いたコードはこんな感じですが、 確かに#2324みたいにrangeのstepを使った方がいいですね。 スライシングで添え字の範囲が超えてもエラーにならないので僕のコードの18行目以降みたいな 「1行に満たない残りがあれば表示」というコードがいらなくなるわけですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | def bingo(n):
from random import shuffle
result = range(1, n + 1)
shuffle(result)
w = len(str(n))
format = " %%%dd" % w
nbuf = []
rbuf = []
for i in range(n):
nbuf.append(format % (i + 1))
rbuf.append(format % result[i])
if i % 10 == 9:
print "".join(nbuf)
print "".join(rbuf)
print
nbuf = []
rbuf = []
if nbuf:
print "".join(nbuf)
print "".join(rbuf)
|




raynstard
#3403()
Rating1/1=1.00
「重複無し乱数」で作ったbingo関数の結果を下のように「何番目の乱数か」とセットにして10個ずつ折り返して表示するコードを書いてください。
[ reply ]