我遇到了允许函数调用另一个函数设置的变量的问题。我相信我知道如何用单个变量做到这一点,但是我的代码要求用多个变量来完成,这是我几个小时都在努力的挑战。我已经阅读了很多关于其他人似乎已经做到这一点的方法,但我无法在实施方面取得成功。
#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
当我尝试运行它时会返回。
topbot
函数中定义body
和draw
并管理我的论据是否正确? ask
然后将它们用作参数的方式从draw
返回四个变量?答案 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()
。输出看起来很有趣,我不确定这是否是你要找的,但至少它正确地得到了变量。