返还多个贵重物品,然后分别调用这些贵重物品

时间:2016-06-18 06:36:40

标签: python

我遇到了允许函数调用另一个函数设置的变量的问题。我相信我知道如何用单个变量做到这一点,但是我的代码要求用多个变量来完成,这是我几个小时都在努力的挑战。我已经阅读了很多关于其他人似乎已经做到这一点的方法,但我无法在实施方面取得成功。

#gathers the user's requests
def ask():
    userw = int(input('How wide? '))
    userh = int(input('How tall? '))
    userc = input('What string to use? ')
    userc_len = int(len(userc))
    return (userw, userh, userc, userc_len)

#draws the rows of the box. First the top with the topbot function, then the body with body(), then the bottom with topbot again
def draw(w, h, c, c_len):
    def topbot(w_, c_):
        for x in range(w_):
            print (c_, end ='')
            print ('\n')
    def body(w_, h_, c_, c_len_):
        for x in range(h_-2):
            print (c_, end = '')
            for x in range(w_-2):
                print(' ' * c_len_, end = '')
            print (c_)

    topbot(w, c)
    body(w, h, c, c_len)
    topbot(w, c)

#begins draw    
draw(userw, userh, userc, userc_len)   

draw函数尝试以userw, userh, userc, userc_len的参数开头但无法找到它们时,问题就开始了:

NameError: name 'userw' is not defined
当我尝试运行它时会返回

  1. topbot函数中定义bodydraw并管理我的论据是否正确?
  2. 如何以ask然后将它们用作参数的方式从draw返回四个变量?

2 个答案:

答案 0 :(得分:1)

ask()是一个返回4个值的函数。所以,

returnValues = ask()
draw = draw(*returnValues) 
or simply, draw = draw(*ask())

此外,end =''不正确。而不是你可以只使用print(c_,'')。 必要时包括验证。就像我输入“hi”为“多宽?”一样。在这种情况下,程序应该告诉我这是错误的。

答案 1 :(得分:1)

我只需将代码的最后一行更改为:{/ 1>即可让draw()接受来自ask()函数的输入(在Python IDLE中)

draw(*ask())

*将从ask()调用中解压缩变量并将其传递给draw()。输出看起来很有趣,我不确定这是否是你要找的,但至少它正确地得到了变量。