0

正如您可能已经从该主题中发现的那样,我很菜鸟。无论如何,我在从另一个函数内部调用一个函数时遇到问题,因为 Python 似乎只是忽略了这个调用。

这是if我的功能内部的一个y

if clas == "warrior":
    strenght, toughness = warrior()
    print "Your strenght is %d." % strenght
    print "Your toughness is %d." % toughness
    return strenght, toughness
    warrior_journey()

y我在这里使用 return 将这些值分配给我的功能块之外的全局变量:

char_str, char_tough = character()

现在我的y函数调用warrior()没有任何问题,但忽略warrior_journey(),只是打印strenght, toughness然后结束。它可能与return,但我找不到任何有用的东西。

这是整个“y”或“字符”功能代码:

def character():
name = raw_input("Welcome, please give the name of your character:\n> ")
if name.isalpha() == True and len(name) != 0 and len(name) != 1:
    print "Welcome again %s!" % name
else:
    exit("This isn't a proper name")
clas = raw_input("Great, now choose your class (warrior, rogue, thief):\n> ").lower()
if "warrior" in clas or "rogue" in clas or "thief" in clas:
    print "Your class is %s." % clas
else:
    exit("You have only three choices listed above, read them again")
if clas == "warrior":
    strenght, toughness = warrior()
    print "Your strenght is %d." % strenght
    print "Your toughness is %d." % toughness
    warrior_journey()
    return strenght, toughness
elif clas == "rogue":
    strenght, toughness = rogue()
    print "Your strenght is %d, and your toughness is %d." % (strenght, toughness)
    return strenght, toughness
elif clas == "thief":
    strenght, toughness = thief()
    print "Your strenght is %d, and your toughness is %d." % (strenght, toughness)
    return strenght, toughness 

然后,在外面,我有:

char_str, char_though = character()

甚至进一步有问题的功能 Warriors_journey:

def warrior_journey():
    print "You wake hangovered in the woods, sun rays dancing on your face"
    print "as you regain parts of your consciousness you notice that, happily, your weapon is still at your side"
    print "You have an open world before you, in which direction do you stumble (north, south, east, west)?"
    direction = raw_input("> ").lower()
    if direction == "north" or direction == "n":
        warrior_north()
    elif direction == "south" or direction == "s":
        warrior_south()
    elif direction == "east" or direction == "e":
        warrior_east()
    elif direction == "west" or direction == "w":
        warrior_west()
    else:
        print "This is not a valid direction, perhaps you should sleep some more."

它仍然是'wip',所以warrior_journey 不会返回任何东西或发送到另一个函数,但它仍然应该至少由“字符”函数中的调用打印,不是吗?

4

5 回答 5

3

return对. _ _ warrior_journey()一旦一个函数returns,它会停止该函数的执行,所以你永远不会调用warrior_journey(). 尝试

warrior_journey()
return strenght, toughness
于 2013-11-07T15:56:05.670 回答
1
  1. 正如其他人提到的那样,您正在致电return之前停止执行。warrior_journey()如果你得到NameError: global name "warrior_journey" is not defined你需要查看你的warrior_journey函数的定义。

  2. 至于另一个错误。

    char_str, char_tough = character()
    

    这不会给全局变量赋值,而是给同名的局部变量赋值。要从函数内部设置全局变量,您需要使用global关键字。

    global char_str, char_tough
    char_str, char_tough = character()
    
于 2013-11-07T16:23:42.650 回答
1

你在return语句之后写了一个语句。所以这意味着它将被忽略,因为 Python 会立即返回到您的全局变量。同一函数中的 return 语句之后的语句总是不可访问的。将函数调用 Warriors_journey() 移动到比您的全局变量低一个语句,因此该变量在调用 Warriors_journey() 之前获取返回值。

于 2013-11-07T16:00:47.080 回答
1

如前所述,'return' 返回给调用者,停止函数的执行。

我补充说,您可以通过调试方法检查此问题和其他问题。

最简单(也是最难)的方法是在代码中添加“打印”语句以突出显示其流程:

print 1
if clas == "warrior":
    print 2
    strenght, toughness = warrior()
    print 3
    print "Your strenght is %d." % strenght
    print 4
    print "Your toughness is %d." % toughness
    print 5
    return strenght, toughness
    print 6
    warrior_journey()
    print 7

如果你运行这段代码,你会看到编号将在 5 处停止,就在返回之前......

1
2
3
4
5

下一个调试步骤可能是pdb,然后是嵌入到您的 IDE 中的东西(例如 Eclipse 上的 PyDev)

于 2013-11-07T16:14:36.087 回答
1

return从函数返回,意味着它的执行已停止。您必须将return语句放在函数的末尾。

于 2013-11-07T15:55:40.200 回答