#确定 客户的每种每种商品我们的库存够不够
goods={'永生花':20,'磁悬浮球':10,'炫彩水龙头':30,'指尖陀螺':70,'3D发光T恤':0} #库存
buy_list={'永生花':10,'磁悬浮球':30,'星空灯':20,'炫彩水龙头':10,'指尖陀螺':10}
price_list={'永生花':199,'磁悬浮球':79,'炫彩水龙头':39,'指尖陀螺':69,'3D发光T恤':89}
total_price=0
for i in buy_list:
if i not in goods.keys(): #如果库存没有跳过这一项,防止下一项报错
print('%s库存没有了,请去其他店铺采购'%i)
continue
if goods[i]-buy_list[i]>=0:
temp=buy_list[i]*price_list[i]
print('%s商品采购了%d元'%(i,temp))
total_price+=temp
else:
count=buy_list[i]-goods[i]
temp =goods[i] * price_list[i]
print('%s商品,缺货了%d件,只采购了%d元' % (i, count,temp))
total_price += temp
print(total_price)
输出结果:
1、问题:这样编写代码太过于混乱,引入函数概念进行封装
def hello():
'''hahaha'''
print('haha')
hello()
带参使用
def hello(name):
'''hahaha'''
print(name,'haha')
hello('Tom')
2、参数:形式参数,实际参数(位置实参,关键字实参)
(1)默认参数
def hello(name,words='hello'): #words默认参数
print(name,words)
hello('Tom')
(2)任意位置参数
def hello(name,*words): #默认参数 任意位置 任意关键字
print(name,words) #words是一个元祖形式
hello('Tom','你好','haha','hello')
(3)任意关键字参数
def hello(name,**words): #默认参数 任意位置 任意关键字
print(name,words)
hello('Tom',a='你好',b='haha',c='hello')
将关键字参数全部接受下来,并且保存到了words这个字典当中
3、函数返回值(只能有一个,可以被变量接收,可以作为函数的实参)
多对象赋值
def add(x,y):
s=x+y
return s,s,s
print(add(3,5))
输出结果(8,8,8)
def add(x,y):
s=x+y
return s,s,s
a,b,c=add(3,5)
print(a)
print(b)
print(c)
输出结果:
8
8
8
4、函数的递归
#斐波那契数列的生成,输出前n项
#(1,1,2,3,5,8,13,21.....)特点从第三项开始,后一项等于前两项之和
#fib(n)=xxx fib(4)~3
def fib(n):
if n ==1 or n==2:
return 1
return fib(n-1)+fib(n-2)
print(fib(4))
5、变量名解析机制
name = '张三' # 全局张三
def foo():
name='张三-上层函数内'
def hello():
global name
#用全局变量进行赋值(nonlocal name:用上层变量进行赋值)
name=name+'!'
print(name)
hello()
foo()