我在python中重新分配变量时遇到问题

时间:2013-08-02 18:33:02

标签: python variables if-statement

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

#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))

6 个答案:

答案 0 :(得分:4)

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

这两个值永远不会相等。

>>> 0 == "0"
False

使用int literal。

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'

答案 1 :(得分: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,则它永远不会是1或{{ 1}},所以不需要检查条件。您可以改为使用2结构。

答案 2 :(得分:1)

这是一种更容易理解的方式:

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

然后,如果生物群落的数量增加或减少,您不必担心更新随机数的范围,并且不能完全使您的if语句正确...

答案 3 :(得分:1)

您需要与0进行比较,而不是"0"

中的字符串值if biome == 0:

但是,使用random.choice可以简化此操作,从列表中随机选择生物群系。

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

并完全取消if

答案 4 :(得分:0)

我认为你应该尝试使用if语句biome == 1而不是biome ==&#34; 1&#34;和biome == 2和biome == 3相同。

答案 5 :(得分: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尚未定义,第二个没有做任何事情。