-1

我正在尝试在 python 中创建一个文本冒险游戏。我正在使用 randint 创建一个介于 0 和 2 之间的数字,当我使用 if 语句获取随机数并将生物群落变量分配给生物群落类型时,它会采用变量的原始版本并将其用作生物群落。

#Defines game()
print ('''You are in a %s biome.'''%(biome))
biome='placeholder'
import random
trees=random.randint(0,50)
biomes=random.randint(0,2)
animals=random.randint(0,3)
wolves=random.randint(0,5)
if biomes == "0":
    biome='Forest'

if biomes == "1":
    biome='Taiga'

if biomes == "2":
    biome='Mountain'

print ('''You are in a %s biome.'''%(biome))
4

6 回答 6

4

biomes是 int 值。"0"是字符串值。

两个值永远不可能相等。

>>> 0 == "0"
False

使用 int 字面量。

if biomes == 0:
    biome = 'Forest'
elif biomes == 1:
    biome = 'Taiga'
elif biomes == 2: # else
    biome = 'Mountain'

我建议您按照其他建议使用random.choice 。简单易读。

>>> random.choice(['Forest', 'Taiga', 'Mountain'])
'Mountain'
>>> random.choice(['Forest', 'Taiga', 'Mountain'])
'Mountain'
>>> random.choice(['Forest', 'Taiga', 'Mountain'])
'Taiga'
于 2013-08-02T18:34:22.600 回答
2

random.randint(...)返回一个整数。您正在将值与此处的字符串进行比较。

>>> type(randint(0, 2))
<type 'int'>

您的if陈述应改写为-

if biomes == 0:
    biome='Forest'
elif biomes == 1:
    biome='Taiga'
else:
    biome='Mountain'

PS——你不需要三个if语句,因为如果值是0,它永远不会是1or 2,所以不需要检查条件。您可以改用if-elif-else构造。

于 2013-08-02T18:34:14.280 回答
1

这里有一个更容易理解的方法:

from random import choice
biomes = ['Forest', 'Tiaga', 'Mountain']
biome = choice(biomes)

然后,如果生物群落的数量增加或减少,您不必担心更新随机数的范围,也不必担心您的if陈述是否正确......

于 2013-08-02T18:39:56.223 回答
1

您需要比较0而不是字符串值"0" ,如if biome == 0:

但是,这可以通过random.choice从列表中随机选择一个生物群落来简化。

biome = random.choice(['Forest', 'Taiga', 'Mountain'])

并完全消除你if的 s。

于 2013-08-02T18:40:32.073 回答
0

那是因为您将整数值与字符串(永远不会相等)进行比较。这将起作用:

import random
trees=random.randint(0,50)
biomes=random.randint(0,2)
animals=random.randint(0,3)
wolves=random.randint(0,5)

# Compare biomes (which is an integer) to another integer
if biomes == 0:
    biome='Forest'

# Use elif for multiple comparisons like that
elif biomes == 1:
    biome='Taiga'

# Use an else here because the only other option is 2
else:
    biome='Mountain'

print ('''You are in a %s biome.'''%(biome))

另请注意,我删除了脚本的第一行和第二行。第一个会爆炸,因为biome尚未定义,而第二个什么也不做。

于 2013-08-02T18:37:02.817 回答
0

我认为您应该尝试使用 if 语句 biome == 1 而不是 biome == "1",对于 biome == 2 和 biome == 3 也是如此。

于 2013-08-02T18:36:08.607 回答