Python中是否有类似于bash脚本中的反引号?
我不太喜欢用很多IF语句。现在我在尝试一种方法,尽量减少使用IF语句来完成我的任务:
首先,定义一些变量...
pick_level = 1
lockpicking_level1_maxxp = 40
lockpicking_level2_maxxp = 70
lockpicking_level3_maxxp = 100
接下来是开锁的部分。成功开锁的条件是随机选择一个数字,这个数字在1到当前开锁技能等级的最大经验值的一半之间。例如,等级1的范围是1到20,等级2是1到35,等级3是1到50。用IF语句来表示大概是这样的:
x = random.randint(1, 100)
if pick_level == 1:
if x not in range(1, (lockpicking_level1_maxxp / 2)):
print 'You failed to pick the lock'
...
elif pick_level == 2:
if x not in range(1, (lockpicking_level2_maxxp / 2)):
etcetc
我想做的是根据pick_level的值来确定经验值,而不是重复写很多IF语句。可以这样写(用反引号,就像在bash中一样):
if x not in range(1, (lockpicking_level`pick_level`_maxxp / 2)):
这样,我就可以避免所有的IF语句,代码会根据pick_level的值自动变成'lockpicking_level1_maxxp'、'lockpicking_level2_maxxp'或'lockpicking_level3_maxxp'。
不过我已经有一段时间没写bash脚本了,所以对它的记忆可能有点模糊。而且我知道在Python 3之前,``的用法和使用repr()基本相同,所以那样不太对。有没有什么方法可以实现这个,还是我只能到处写丑陋的IF语句呢?
我想我可以用字典来实现,比如:
lockpicking_maxxp = {1:20, 2:35, 3:50}
...
if x in range(1, lockpicking_maxxp[pick_level]):
...但我不确定这是否就是我设置技能数据库的方式(虽然它最终可能会是一个JSON文件。我喜欢JSON。)
非常感谢你的时间。我期待着更多地了解这个想法。
3 个回答
2
每当你想要给变量加数字的时候,其实可以考虑用一个列表来处理:
pick_level = 1
lockpicking_levels = [0,40, 70, 100]
test = random.randint(1, 100)
if test < lockpicking_levels[pick_level] / 2:
print "you failed"
else:
...
4
不要重复自己。尽量使用数据结构,而不是单独的对象。
lockpicking_maxxp = {
1: 40,
2: 70,
3: 100
}
x = random.randint(1, 100)
if x > lockpicking_maxxp[pick_level] / 2:
print 'You failed to pick the lock'
...
当然,你在这个游戏中可能还有其他技能,所以你可能想要一些更像这样的东西:
maxxp = {
'lockpicking': {
1: 40,
2: 70,
3: 100
}, 'trap_searching': {
1: 50,
...
}, ...
}
skill = 'lockpicking'
x = random.randint(1, 100)
if x > maxxp[skill][level[skill]] / 2:
print 'You failed to pick the lock'
...
2
你可以使用 locals() 这个函数来获取当前作用域内的所有变量和它们的值,返回的结果是一个字典(就像一个键值对的列表)。这样你就可以通过这个字典来获取某个变量的值。比如:
>>> pick_level = 1
>>> lockpicking_level1_maxxp = 40
>>> lockpicking_level2_maxxp = 70
>>> lockpicking_level3_maxxp = 100
>>> locals()["lockpicking_level%d_maxxp" % pick_level]
40