【问题标题】:Python Loop: 4 random numbers x 6Python 循环:4 个随机数 x 6
【发布时间】:2017-04-09 22:57:51
【问题描述】:

我想要 6 次 4 个 6 面 (6 x 4d6) 的骰子,我尝试得到一个循环,例如:

import random

print random.randint(1, 6), random.randint(1, 6), random.randint(1, 6), random.randint(1, 6)
print random.randint(1, 6), random.randint(1, 6), random.randint(1, 6), random.randint(1, 6)
print random.randint(1, 6), random.randint(1, 6), random.randint(1, 6), random.randint(1, 6)
print random.randint(1, 6), random.randint(1, 6), random.randint(1, 6), random.randint(1, 6)
print random.randint(1, 6), random.randint(1, 6), random.randint(1, 6), random.randint(1, 6)
print random.randint(1, 6), random.randint(1, 6), random.randint(1, 6), random.randint(1, 6) code here

我试着这样做:

import random
import tempfile
roll = 0
rzuty = [] #dicethrows
wynik = [] #result


for x in range(6):
    for y in range(4):
        roll = random.randint(1,6)
        rzuty.append(roll)
    rzuty.sort()
    rzuty.pop(0)

    for z in xrange(len(rzuty)):
        tempfile = rzuty

    wynik.append(tempfile)

    print (roll)

我只知道这个:

1
3
3
4
6
4

Process finished with exit code 0

我尝试了很多东西,但我无法找出问题所在。我只是一个初学者。

【问题讨论】:

  • 您想达到什么目标?打印结果如[[5, 2, 2, 3], [6, 2, 6, 6], [6, 1, 6, 1], [4, 2, 6, 2], [2, 6, 3, 6], [5, 6, 4, 1]]?
  • 您需要在for 内再次循环。每次投掷一个循环,然后每个骰子另一个循环。有一些方法可以只使用 1 个(或 0 个)for 循环,但出于您的目的,我会专注于学习循环。
  • 这段代码有很多错误。无论您使用什么教程,您都应该查看有关列表和循环的部分。

标签: python python-2.7 loops for-loop random


【解决方案1】:

作为一个基本的学习练习,让我们来看看你的代码:

for y in range(4):
    roll = random.randint(1,6)  # Lets say we generated 2,5,3,4
    rzuty.append(roll)
rzuty.sort()

这是一个好的开始,rzuty 现在包含 4 个随机数(已排序):

rzuty = [2,3,4,5]

现在你弹出最后一个数字:

rzuty.pop(0)  # Returns 5

现在rzuty 包含[2,3,4]。这是不对的,你不希望在那里调用pop,它会删除你的一个结果。

现在我们循环 rzuty 并将 tempfile 设置为它:

for z in xrange(len(rzuty)):
    tempfile = rzuty

这似乎是多余的,可以用tempfile = rzuty 替换,而不需要for 循环。

wynik.append(tempfile)
print (roll)

现在wynik == [[2,3,4]] 打印roll 的内容,从这个答案的顶部可以看出是4(请注意,这是您在问题中强调的问题)

最后一个大问题是你没有在每次循环之后清除rzuty。这意味着您将继续追加滚动,只需更改代码以便 print(roll) 行更改为 print(rzuty) 我的最后一行输出是:

[2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6]

总而言之,这是一组工作代码(Python 2.7):

# removed redundant `import tempfile`
import random

roll = 0
rzuty = [] #dicethrows
wynik = [] #result

for x in range(6):
    # clear rzuty so it doesn't get filled with results over time
    rzuty = []
    for y in range(4):
        roll = random.randint(1, 6)
        rzuty.append(roll)
    rzuty.sort()
    # removed pop discarding results and redundant for loop

    # replaced tempfile with rzuty in append
    wynik.append(rzuty)

    # print rzuty instead of last roll
    print rzuty

还有一个示例输出:

[1, 1, 3, 4]
[1, 3, 3, 5]
[1, 2, 5, 6]
[1, 4, 4, 5]
[2, 4, 4, 6]
[1, 1, 5, 6]

【讨论】:

    【解决方案2】:

    你只有 2 个循环,一个嵌套在另一个循环中,它只打印出 4*6 = 24 个随机滚动结果。

    我假设这只会生成 4 个 6 面的骰子 1 次。

    要产生 6 次结果,只需将您的代码放入另一个循环 6 次的嵌套循环中。

    【讨论】:

    • “只打印出 4*6 = 24 个随机滚动结果” - 不仔细查看代码是一回事,但甚至不看结果则是另一回事。 OP 的代码不会产生 24 个数字。
    猜你喜欢
    • 2015-04-08
    • 2021-12-29
    • 2016-12-29
    • 2019-02-22
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2012-09-21
    • 2015-09-03
    相关资源
    最近更新 更多