2017-03-05 179 views
0

所以我是初学者,这是我正在上的一堂课。我知道return,但它不是让我做什么我想在这段代码做函数外的访问函数变量?

这是包含该变量的函数:

def disp_cookies(): 
    # This stuff is just for a print display 
    inx = 0 # Displays list vertically 
    while inx < len(flavor_names): 
     print("{}. {}".format(inx + 1, flavor_names[inx])) 
     inx += 1 

    valid_data = False 
    while not valid_data: 
     try: 
      # This is the variable I need 
      flavor = int(input("\nSelect a number for flavor> ")) 

      if 0 < flavor <= len(flavor_names): 
       item_list.append(flavor) 
       print(flavor_names[int(flavor) - 1]) 
       return flavor # This is the return 
       break 

     except Exception: 
      print("\nError. Please try again") 
     else: 
      print("\nPlease enter a valid response") 

这里的地方我想使用变量:

print("\n", flavor) # This is outside of the function in the previous snippet btw 
print("\n{}s, {} box(es), ${} total".format(flavor_names[flavor - 1], qty_list[order_no], item_total)) 

这是我的错误:

Traceback (most recent call last): 
    File "C:\Users\wiche\Documents\School\Python CIS122\L8_orderCost.py", line 95, in <module> 
    print("\n", flavor) 
NameError: name 'flavor' is not defined 

我可以通过在函数外部定义flavor来摆脱错误,但是当我使用它时,变量中的数据是错误的。任何想法我可以做什么来解决它?

请记住我是一个绝对的初学者,你看到的是我基本上都明白蟒到目前为止

谢谢!

回答

1

当函数返回时,函数内部的变量消失(“超出范围”)。

为了得到一个值出来的功能,你需要做两件事情:

  1. 在功能 - return值,或者价值观。

  2. 当您调用函数 - 保存值或值。你可以通过设置一个等于函数结果的变量来做到这一点:flavour = display_cookies()

考虑这个例子:

def answer_to_life(): 
    answer = 42 
    return answer 

ans = answer_to_life() 
print (ans)    # output: 42 

请注意,我用的函数(answer)和外部(ans)内的不同的变量名。你可以使用相同的名字,但是这可能会在你的教育早期混淆你的名字。

+0

谢谢您的回复! 现在我有一个新的问题,但。我有更新的代码如下: 'flavor = disp_cookies()' 'print(“\ n”,flavor)' 'print(“\ n {} s,{} box(es),$ {总”。格式(flavor_names [味],qty_list [order_no],ITEM_TOTAL))' 但现在我得到这个错误: IndexError:列表索引超出范围 难道我莫名其妙地叫可变错了吗? – tonberryking

+0

@tonberryking,请问这是一个单独的问题。很难排除评论中的问题 - 我无法从评论中复制粘贴代码并运行它!将您的程序缩减为[简短,自包含的示例](http://sscce.org/)将有助于您及时做出回应。 –