【问题标题】:Python dice simulationPython骰子模拟
【发布时间】:2012-09-28 03:03:29
【问题描述】:

我在模拟掷骰子的家庭作业问题上有点卡住了。问题要求创建一个函数,返回一个从 1 到 6 的随机整数值,并创建一个主程序,询问用户要掷多少个骰子(必须限制为 5 个骰子),并调用该函数打印生成的价值观。到目前为止,我有这个:

import random

def dice(number_of_dice):
    for i in range(0,number_of_dice):
        return random.randint(1,6)


number_of_dice = input("How many dice would you like to roll? ")
while number_of_dice >5:
    number_of_dice = input("You may only have a limit of 5 dice, enter a number under 5. " )
print dice(number_of_dice) 

运行程序时,无论“number_of_dice”输入是什么,它都只返回一个随机整数值。这里到底出了什么问题?

感谢任何帮助,谢谢。

【问题讨论】:

  • 第一次进入循环后return语句会立即返回。

标签: python random dice


【解决方案1】:

一旦您的dice 函数执行并第一次遇到return 语句,它就会返回而不继续for 循环的其余部分。

要解决此问题,您可以在 dice 内声明一个局部变量,该变量包含您要返回的多个结果。使用像

这样的语句
retval = []

retval.append(...)

return retval

(留给你填空。)

更高级的 Python 使用涉及使用 yield 语句从一种称为 generator 的特殊函数返回单个值,该函数会记住它的位置并可以在以后重新启动。但是,在使用 yield 等功能之前,值得牢牢掌握基础知识。

【讨论】:

  • 感谢您的提示,通过将所有数字添加到一个变量中,并按照您所说的返回该变量,它自己就可以工作了。
【解决方案2】:
def dice(number_of_dice):
    for i in range(0,number_of_dice):
        yield random.randint(1,6)  #yield will successivly return as opposed to just return

现在您可以像列表一样访问骰子了...

【讨论】:

  • 真不该写作业题的代码~
  • 我所做的只是为他改了一个词
【解决方案3】:

你使用这样的while循环

import random

from random import randint

while True:

  dice = input("how many dice would you like to roll?")

    prefix, middle, suffix = dice.partition("d")

对于 2d6 中的 d 等

    for _ in range (int(prefix)):

      print (random.randint(1, int(suffix)))

【讨论】:

  • 您还必须将打印语句放在最后一行的缩进中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
相关资源
最近更新 更多