参考书籍
一、PYTHON编程从入门到实践
二、PYTHON数据科学技术详解与商业实践
三、CSDN博客
学习内容
利用编写一个简单的三明治点单程序,实现报菜单,用户交互点单以及计算费用
笔记
1.关于全局变量,在本程序中需要使得变量money与moneys分别代表用户点单总金额与加单金额为全局变量,在这里最开始参考C语言在程序开头的位置设置为全局变量但是调试后发现没有效果,随后把全局变量global定义语句放入函数中即可以实现保存函数中修改的变量。
2.在本次实例中使用了大量的int与str函数用作强制转换,因为有些变量既要参与计算又需要被打印出来。
3.注意在字符串列表中只能保存字符串类型变量,空列表不能指定位置赋值而需要使用append函数设置。
4.相比C语言,for循环在Python中更加偏向于遍历的意思,在遍历字典时应该注意有如下几种方式遍历:
①同时遍历字典的所有键值对:对于一般的键值对字典(即键—值均为单变量字符串或者数字)在如下所示程序中对字典使用了items函数可以将键保存在Key变量中,将值保存在了value变量中。但是程序运行后的输出结果的顺序与存储顺序是不同的,因为字典只关心键值对的关系而不关心存储顺序,如果需要按照一定顺序打印结果可以使用sorted()函数进行临时排序(ref:page 88 python从入门到实践)
for key, value in user.items():
print(key+value+'\n')
②只在字典中遍历键或者值,假如只需要访问字典里的所有键或者所有值可以使用keys()函数与values()函数完成
③对于特殊类型的字典,即字典里面包含列表或者字典里面又包含字典的在遍历的时候(嵌套)则需要特别注意
1.对于字典列表,即列表里面包含字典的,可以直接使用for循环变量列表,并打印输出结果即可以直接将列表中的所有字典打印出来
2.对于在字典中存储列表,因为列表中包含许多项因此在遍历的时候,只能指定遍历字典中的某一列表
3.对于在字典中存储字典的,比如字典中的值全为字典,则遍历时每一次获取到字典的值都是一个字典,在该字典中又可以使用值访问该字典中的值
程序展示
import random #引入随机数生成模块
word_1='Are you ready to order?\n input Y to start \n '
word_11='Whenever you want to exit the process, please input exit: '
word_2='So, what you want?\na re beef\nb re chicken\nc re fish\nd re fruit\ne re vegetable '
word_3='How many do you want? '
word_4='Anything else?y re yes, n re no'
number=[]#注意空列表不能指定位置赋值,要借住append函数帮助
for j in range(1,6):
number.append(str(random.randint(1,10)))
beef=[number[0],'beef','10']#列表存储牛肉三明治的相关信息
chicken=[number[1],'chicken','5']
fish=[number[2],'fish','3']
fruit=[number[3],'fruit','2']
vegetable=[str(number[4]),'vegetable','1']
menu={'beef':beef,#用字典存储菜单相关信息
'chicken':chicken,
'fish':fish,
'fruit':fruit,
'vegetable':vegetable}
dec=input(word_1+word_11)
#------------------------------------函数一:用于统计菜单并打印-----------------------------------
def menu_sand(sand_type):#用于报菜单函数
i=1
for sans in menu[sand_type]:
if i==1:
s=sans
if i==2:
print('\t'+s+' '+sans+' sandwiches ')
if i==3:
print('The price is '+sans)
i+=i
#------------------------------------函数二:计算用户消费金额-------------------------------------
#函数中修改列表会被保存但是在函数中修改变量不会被保存,这里在函数内部定义全局变量
def costumer_fee(dish,num,fee):
global money,moneys
if dish=='a':
money=10*int(num)
beef[0]=str(int(beef[0])-int(num))
print('total is '+str(money)+' pounds')
elif dish=='b':
money=5*int(num)
chicken[0]=str(int(chicken[0])-int(num))
print('total is '+str(money)+' pounds')
elif dish=='c':
money=3*int(num)
fish[0]=str(int(fish[0])-int(num))
print('total is '+str(money)+' pounds')
elif dish=='d':
money=2*int(num)
fruit[0]=str(int(fruit[0])-int(num))
print('total is '+str(money)+' pounds')
elif dish=='e':
money=1*int(num)
fruit[0]=str(int(fruit[0])-int(num))
print('total is '+str(money)+' pounds')
else:
active=False
if fee!=0:
fee+=money
print('Ok, the final sum of money is '+str(fee)+' pounds')
return active
#-----------------------------------------主程序------------------------------------------------
if dec.upper()=='E':
active=False
else:
active=True #布尔型变量必须要有值才能进行后续判断
while active:
money=0#原单总价格
moneys=0#加单的总价格,即最终消费
print("\n*****************Welcom to Jack's sandwich shop*****************\n")
if dec.upper() == 'Y':
print('Now, we have: ')#截止到此处运行正常
for sandss in menu.keys():
menu_sand(sandss)
dish=input(word_2)
num=input(word_3)
active=costumer_fee(dish,num,money)
if active:
anys=input(word_4)
if anys=='y':
dish=input(word_2)
num=input(word_3)
active=costumer_fee(dish,num,money)
总结
第一次实践编写python程序,虽然之前已经简单地看过一些书,但是很多细节还是需要注意,程序的很多地方参考了《python从入门到实践》这一本书,这本书主要是教授基础的知识比我想象中更适合新手学习。因为有了一点点C语言和java的基础(非CS专业)所以只学了两天“浏览“了前七章就挑选了PIZA店这个习题动手练习。因为对C语言了解一些,一开始还很不适应Python的方便,比如不需要;结尾,不需要}而使用tab缩进体现代码嵌套,不需要预先定义变量,for循环更像是遍历,以及for和if后面要冒号等等,一度让我 感到非常不便,但是总体感觉还是比C语言设计程序的过程中能利用到的功能更多一些如字典的便利性等等,期待后续学习过程中有更多收获吧。