【问题标题】:Random number grid 4 x 6 Python 3随机数网格 4 x 6 Python 3
【发布时间】:2015-04-08 08:43:36
【问题描述】:

我对 Python 3 非常陌生,想生成一个随机网格 4x6 数字。 我尝试了各种方法,但最终还是在新行上打印,或者在每一行上打印 4x6 相同的数字等。

一些代码示例(我尝试了很多不同的方法,但我必须重新输入它们,因为我使用的是带有 linux 的 virtualbox 来运行 Python:

import random

def grid_maker(h,v):
 for y in range(1, 5):
  x = random.randint(1, 100)
  grid = [[str(x) for _ in range(v)] for _ in range (h)]
  grid[0][0] = "o"
  return grid
print ('\n'.join(''.join(row) for row in grid_maker(6,5)))

输出

o85858585
8585858585
8585858585
8585858585
8585858585
8585858585

想要的输出

82 2 30 9 
45 65 54 14
23 4 32 42 
8 84 40 80
43 23 5 62 
23 43 3 5

另一个例子

for t in range(1, 5)
 i = random.randint(1, 100)
 grid = [[i], [i], [i], [i]]
 from pprint import pprint
 pprint(grid)

输出

[[100], [100], [100], [100]]
[[1], [1], [1], [1]]
[[80], [80], [80], [80]]
[[12], [12], [12], [12]]

想要的输出

[[34], [12], [2], [15]]
[[64], [34], [53], [4]]
[[35], [34], [61], [33]]
[[34], [55], [64], [23]]

另一个例子

ar = []
    for t in range(1, 5):
     i = random.randint(1, 100)
     ar.append(i)
    for t in range(1, 7):
     for i in range(1, 5):
      print(ar[t-1], end='')

但这会打印出585858585555555559595959343434342222222288888888root@root:/home/user#

谢谢

【问题讨论】:

    标签: python python-3.x random numbers


    【解决方案1】:

    你在循环中每次只调用一次 random 所以保持使用相同的值,在列表 comp 中调用它:

    def grid_maker(h,v):
       for y in range(1, 5):
          # add call to list comp to get a new number each iteration
          grid = [[str(random.randint(1,100)) for _ in range(v)] for _ in range (h)]
       grid[0][0] = "o"
       return grid
    print ('\n'.join(' '.join(row) for row in grid_maker(6,4))
    
    o 23 47 30 
    25 21 32 28
    26 76 71 14
    54 15 94 77
    50 50 29 62
    59 92 60 57
    

    如果您不想要"o",则不要添加它,只需删除grid[0][0] = "o"

    第一个循环也是多余的,你不断创建新列表但只返回一个:

    def grid_maker(h, v):
        return [[str(random.randint(1, 100)) for _ in range(v)] for _ in range(h)]
    

    我们也可以在函数中完成所有操作:

    def grid_maker(h, v):
        return '\n'.join(' '.join(row) for row in  [[str(random.randint(1, 100)) for _ in range(v)] for _ in range(h)])
    
    print(grid_maker(6, 4)) # 6,4 not 6,5
    
    26 96 50 46
    4 57 50 80
    36 24 23 66
    71 33 44 15
    54 15 77 54
    52 99 60 99
    

    要打印列表的列表,应用相同的逻辑,您需要每次调用 randint:

    for t in range(6):
        print([[random.randint(1,100)], [random.randint(1,100)], [random.randint(1,100)], [random.randint(1,100)]])
    
    [[90], [57], [21], [11]]
    [[84], [80], [100], [47]]
    [[25], [37], [87], [97]]
    [[78], [90], [100], [74]]
    [[96], [83], [59], [2]]
    [[83], [19], [90], [4]]
    

    【讨论】:

    • 您好,谢谢,第一部分有效,但克里斯托斯发布了两个部分,[ ] [ ] 中的第二部分在他的回答中更清晰。不需要调用 random randint 4 次,这样,如果我想扩展它,我将不得不放置 random randint 100 次。 + 对于第一部分寿。谢谢
    • @F4LLCON,答案的整个想法是解释你必须每次调用函数显然你会在一个循环中为任意数量的调用执行它
    【解决方案2】:

    在第一个例子中你只生成了一个随机数:

    import random
    def grid_maker(h, v):
        return [
            [str(random.randint(1, 100)) for _ in range(v)]
            for _ in range(h)
        ]
    print ('\n'.join(' '.join(row) for row in grid_maker(6, 5)))
    

    第二个:

    import random
    ar = [
        [[random.randint(1, 100)] for t in range(1, 5)]
        for i in range(1, 5)
    ]
    for row in ar:
        print(row)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多