我试图多次运行随机变量

时间:2019-08-04 00:40:43

标签: python

我对python很陌生,遇到了一个我不完全了解的问题。我试图让一个随机变量运行多次,但是由于某种原因,它只会返回相同的随机值x次。

除了已经完成的代码外,我还不确定要尝试什么。

lowTreasureList = "50 gold", "Healing Potion", "10x Magic Arrows", "+1 Magic Weapon"

def ranLowLoot(lowLootGiven):
    # This function returns a random string from the passed list of strings.
    lootIndex = random.randint(0, len(lowLootGiven) - 1)
    return lowLootGiven[lootIndex]

lowLoot = ranLowLoot(lowTreasureList)

treasureSelection = int(input())

if treasureSelection == 1:
    numLowTreasure = int(input('How many treasures? '))
    for i in range(numLowTreasure):
        ranLowLoot(lowTreasureList)
        print(lowLoot)

当我这样做时,我得到相同的随机宝物(numLowTreasure)次,但是我试图每次选择一个新的随机宝物来获得它。

2 个答案:

答案 0 :(得分:1)

问题在于,在主循环中,您正在丢弃调用ranLowLoot()的结果。作为最小修复,在主循环中分配该函数调用的结果。使用:

lowLoot = ranLowLoot(lowTreasureList)

而不是简单地:

ranLowLoot(lowTreasureList)

作为更好的解决方案,请完全抛弃函数,而仅使用random.choice()(这样做是您想做的,而不必大惊小怪):

import random

lowTreasureList = ["50 gold", "Healing Potion", "10x Magic Arrows", "+1 Magic Weapon"]

treasureSelection = int(input())

if treasureSelection == 1:
    numLowTreasure = int(input('How many treasures? '))
    for i in range(numLowTreasure):
        lowLoot = random.choice(lowTreasureList)
        print(lowLoot)

答案 1 :(得分:1)

如果还没有的话,这将有助于阅读the random module上的文档。

random.randint有三种更适合您目的的替代方法:

  • random.randrange(start, stop, [step]):步骤是可选的,默认为1。这将为您节省用于获取lootIndex的len(...) - 1,因为stop是互斥的。
  • random.randrange(stop):使用默认的起始零和默认的步长1,这将节省您传递0作为起始索引的作用。
  • random.choice(seq):您可以将函数的参数lowLootGiven作为seq传递给它,这样可以避免使用索引和完全编写自己的函数。

关于为什么您会得到重复的宝藏,这是因为您没有在for循环中更新变量lowLoot。您应该写:

for i in range(numLowTreasure):
    lowLoot = ranLowLoot(lowTreasureList)
    print(lowLoot)

最后我想说的是python非常适合快速编写简单的东西。即使您在其中编写此代码的环境更大,我也可能是这样写的:

lowTreasureList = ("50 gold", "Healing Potion", "10x Magic Arrows", "+1 Magic Weapon")

if int(input()) == 1:
    for i in range(int(input('How many treasures? '))):
        print(random.choice(lowTreasureList))

在这种情况下,不必像以前那样在元组声明周围使用圆括号,但是我喜欢使用它,因为如果要使元组声明跨越多行,没有它们就无法使用。 / p>

阅读关于标准库的文档几乎总是对我有所帮助。我认为Python的文档很棒,并且如果它太早需要消化,我发现tutorialspoint是一个不错的起点。

与您的问题无关-但出于好奇,您是否首先学习另一种语言?