【发布时间】:2015-03-02 10:08:59
【问题描述】:
我是一名初学者,正在尝试编写基于文本的游戏,例如 Monopoly。因为我了解了函数,所以我认为最好的方法是为每个正方形定义一个函数。然后,我会将这些函数放在一个列表中并随机调用它们。问题是函数可能需要不同数量的参数或不需要参数。
from random import randrange
def foo1(param_of_foo1):
x = param_of_foo1 + 1
print "x is:", x
def foo2(param_of_foo2):
y = param_of_foo2 + 2
print "y is:", y
def foo3(useless_param):
print "I have a parameter but I don't really need it..."
list_of_foo = [foo1, foo2, foo3]
arg = 0
function_index = randrange(0,3)
print "Function index is:", function_index
if function_index == 0:
arg = 4
elif function_index == 1:
arg = 10
list_of_foo [function_index](arg)
如您所见,这似乎可行,但这不是一个优雅的解决方案。我不喜欢我必须用参数定义第三个函数,即使它不需要它,当然。而且我也不喜欢我必须为某些函数指定一个条件来让他们知道他们应该使用什么作为参数。 当然,必须有更好的方法来做到这一点。总是有的。谢谢,对不起,如果这是愚蠢的或者已经被问过了。我找不到答案。
更新代码:
from random import randrange
from functools import partial
def foo1(arg_of_foo1):
x = arg_of_foo1 + 1
print "x is:", x
def foo2(arg1_of_foo2,arg2_of_foo2):
y = arg1_of_foo2 + arg2_of_foo2
print "y is:", y
def foo3():
print "I don't need a parameter so I don't have one."
a = 0
b = 0
while b <= 100:
print'='*20
random_number = randrange(0,3)
a += 1
b += 10
print "a is:", a
print "b is:", b
print "r_n is:", random_number
print '-'*10
raw_input("[Enter] to execute random function")
list_of_foo = [partial(foo1,a), partial(foo2,a,b), partial(foo3)]
list_of_foo[random_number]()
这段代码去掉了条件语句和不必要的参数。 谢谢督察!
【问题讨论】:
-
只是提出一些想法,因为我认为这是没有明确答案的问题。 1)看起来没有任何实际输入会改变参数的值。也许只是摆脱参数并在函数内部有一个常数更有意义? 2)您可能会将使用类视为另一种抽象形式,这可能更适合此特定场景,也可能不适合。同样,在不了解所有细节的情况下很难给出明确的答案,但也许这是一个开始。
-
一个相当雄心勃勃的项目开始。您可以考虑查看Game Elements as Programmatic Objects,了解使用对象而不是为每个方块定义离散函数的完全不同的游戏开发方法。
-
谢谢贾斯汀和乔恩。我会考虑的。
标签: python list function random arguments