无法在模块中定义变量

时间:2019-05-17 23:12:57

标签: python

我在代码nminns中使用2个变量遇到麻烦,我想这是一个模块化问题。

def le():
    ns=0
    nmin=0
    my_list=[]
    while True:    
        s=input('enter the salary ')
        if s=='': break
        s=float(s)
        ns=ns+1  #couting the numbers of salaries (s) typed (says undefined)
        bonus=s*0.2
        if bonus < 100:
            bonus=100
            nmin=nmin+1  #couting the numbers minimal bonuses (says undefined)
        my_list.append(s)
        my_list.append(bonus)
        return my_list, nmin, ns


def calculos(my_list):
    vmax=my_list[1]
    total=0
    for i in  my_list[1::2]:
        total=total + i
    for i in my_list[1::2]:
        if i > vmax:
            vmax=i
    return vmax, total

def printing(my_list, vmax, total, nmin, ns ):
        print('The total amount spent on bonus is R${:5.2f}'.format(total))
        print('The number of salaries if {2d}'. format(ns))
        print('The highest bonus amount paid is R${:5.2f}'.format(vmax))
        print('The number of minimal bonuses is {2d}'.format(nmin))
        return 



my_list= le()
vmax, total= calculos(my_list)
write= printing(my_list, vmax, total, nmin, ns)*

我在第一个模块中将它们返回,用作def printing上的参数,并在主模块中调用了这些模块。尽管如此,它仍undefined停留在最后一行。

PS:当我将它们从整个代码中删除时,它可以工作。

2 个答案:

答案 0 :(得分:0)

变量nminns不在主作用域中定义,它们是函数le范围内的局部变量,它返回值,而不是变量。因此,一种替代方法是使其成为全局变量,这样所有函数和作用域都可以访问变量。另一个是正确地归因于函数的返回。

my_list, nmin, ns = le()

答案 1 :(得分:0)

错误是因为您的函数def le()返回了一个元组值,这些值又存储在my_list类型的变量tuple中。

由于值存储在tuple中,因此只能由元组变量访问它们。您想要做的是从一个函数返回一个值池/元组,并将每个返回的值视为一个单独的变量。仅当您将返回值存储在诸如x, y, z = le()之类的单独变量中,而事实并非如此。

纠正:-

方法1:-

write = printing(my_list, vmax, total, my_list[1], my_list[2])

方法2:-

my_list, nmin, ns = le()

方法3:-

def le():
    global ns
    global nmin
    ns = nmin = 0

每种方法的工作方式:-

  1. 第一种方法是通过从存储其值的元组中建立索引来获取nminns的值
  2. 第二种方法,将返回的元组的值存储到单独的三个单独的变量my_listnminns变量中
  3. 第三种方法将变量nminns的范围设置为全局范围,以便可以在我们当前程序的整个范围内对其进行访问(通常不建议使用此方法)