我在代码nmin
和ns
中使用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:当我将它们从整个代码中删除时,它可以工作。
答案 0 :(得分:0)
变量nmin
和ns
不在主作用域中定义,它们是函数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
每种方法的工作方式:-
nmin
和ns
的值my_list
,nmin
和ns
变量中nmin
和ns
的范围设置为全局范围,以便可以在我们当前程序的整个范围内对其进行访问(通常不建议使用此方法)