python变量传递问题

时间:2011-11-20 23:26:29

标签: python

不久前,我决定参加文字冒险游戏。我一直想这样做。但它第一次出现了史诗般的失败。这次我越来越近但不在那里。我想我看到了错误:问题是变量没有被带到下一个def。所以我想知道的是如何解决它?

这是描述问题的代码段:

def start():
    print "Hello there Knight... Knight? Sir Knight, what's your name?"
    name = raw_input("> ")
    print "Well sir %s of simpleton. We have a message from the queen, do you want to read it?" % name
    rm = raw_input("> ")
    rm(rm)

def rm(rm):
    if rm ==  "yes":
        print "It says: \n Dear %s, \n Our kingdom is in great danger. Dragon Redpole has captured the beatiful princess. Who ever saves her    rom his dangerous castle may marry her." % name
        print "What will you do? Go undercover to The Far Lands or in full weaponry"
        UorW = raw_input("type u or fw \n > ")
    elif rm ==  "no":
        print "I am sorry sir, but the queen's word is la.. SHUT UP YOU USELESS PIECE OF TRASH OUT OF THIS ROOM NOW!! You say highly irritated. Will you tell the torturer to torture  the butler in the dungeons?"
        torture_butler = raw_input(">  ")    
        torture_butler()
    else: 
        print "That's not possible"

这是我得到的报告:

Traceback (most recent call last):
  File "story.py", line 59, in <module>
    start()
  File "story.py", line 6, in start
    rm(rm)
TypeError: 'str' object is not callable

2 个答案:

答案 0 :(得分:6)

您使用返回值rm()覆盖名为raw_input("> ")的函数。在此行之后,名称rm将指向一个字符串对象,并且尝试调用此字符串对象失败,因为字符串对象不可调用。重命名变量,使其不影响函数名称。

答案 1 :(得分:1)

从编写代码的方式来看,名称rm not 的名称在start函数中引用该名称的函数,而不是{{1}功能。在这两种情况下,rm都是隐藏函数定义的局部变量。

正如其他答案中已经建议的那样,您需要避免使用多个含义重载相同的名称。