【Python之旅】第二篇(三):基于列表处理的购物清单程序

1.基本需求

    编写一个购物小程序,要求实现如下功能:

(1)让用户输入工资;

(2)输出购物菜单及产品价格;

(3)计算用户是否可支付;

(4)输出用户剩余的钱,问用户是否继续购物,如果选择继续,则继续进行,否则退出程序;

(5)若钱不够,输出用户还需要工作多久才能买得起(这里暂不实现此功能)。




2.实现基本思路

    基本思路可如下所示:

wKioL1XyQXaQFd6HAAHEHjynTRI164.jpg

    在编写程序的时候即以该思路为主线,具体细节下面再提及。




3.实现细节

    基于友好用户界面的原则,实现的细节可总结如下:

(1)用户输入工资时,如果输入的是非数字或没有输入,会有提示再次输入,而不会异常退出;

(2)用户输入购买物品时,如果输入的是非商品索引或非quit退出时,会有提示再次输入,而不会异常退出;

(3)每添加商品到购物列表后,会提示用户当前所剩余的money;

(4)用户选择退出时,会打印用户的购物清单,同时输出用户剩余的money;

(5)总的原则是,程序在执行过程中不会有异常情况出现,即使用户输入非法字符。




4.实现代码与注释

    基于上述需求的实现代码如下:

#!/usr/bin/env python

import sys

market = [
	['Xiaomi Phone', 2400],
	['Iphone', 6000],
	['Computer', 3800],
	['Ipad', 1800],
	['Core Python', 69],
	['Router', 109]
]

shop_list = []	#The shopping list of the buyer.

while True:
  salary = raw_input('Please input your salary per month:').strip()
  if not salary.isdigit():
    print 'Please enter your salary.'
    continue
  salary = int(salary)
  print "Welcome to our market!You can buy something cool here, or you can enter 'quit' to left.\n"
  break

#Upon:input the salary per month.输入工资同时避免异常情况。

while True:
  print 'The goods we serve are as follow:'
  for goods in market:
    print market.index(goods),goods[0],goods[1]
  
  #Upon:print the goods list.
  choice = raw_input('What do you want to buy?')
  
  if choice == 'quit':		#'quit' system
    print '\nYour shopping list are as follow:'
    for goods in shop_list:
	  print goods[0],goods[1]
    print 'Now you have %d left.' % (salary)
    sys.exit('Goodbye!')
  elif len(choice) == 0:	#'enter' system
    continue
#实际上'luanma' system和'enter' system可以只用前者进行替代,这里只是想输出不同提示而已。
(即输入乱码时会提示,输入enter时不进行提示。)	
  if not choice.isdigit():	#'luanma' system,即如果用户输入非数字时,会有提示
    print 'Please input the right choice.(Number to buy things and quit to quit.)\n'
    continue
	
  #Upon: 'quit' system , 'enter' system and 'luanma' handle system.
  
  choice = int(choice)
  if choice >= len(market):
    print 'Could not find the item, try again!\n'
    continue	
  pri = market[choice]
  #Upon:To check if the number is legal.确认输入的数字是否在合法范围内
  
  pri = market[choice]
  
  if pri[1] <= salary:
    salary = salary - pri[1]  #The remaining money.
    shop_list.append(pri)     #Adding the goods to the list.
    print 'You have added %s to your shopping list, and you have %d left.\n' % (pri[0], salary)
  else:
    print '''You have %d left.
You can not afford to buy %s, but you can try to buy other things.\n''' % (salary, pri[0])

    因为灵活用了列表作处理,所以相对来说代码不会太复杂。




4.测试


·对输入过程中可能出现的各种情况和说明如下:

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day2$ python myshop.py 
Please input your salary per month:
Please enter your salary.    ===>直接输入'Enter'时会有提示
Please input your salary per month:klkdf
Please enter your salary.    ===>输入乱码时也会有提示
Please input your salary per month:10000
Welcome to our market!You can buy something cool here, or you can enter 'quit' to left.

The goods we serve are as follow:    ===>先打印了一个商品菜单
0 Xiaomi Phone 2400
1 Iphone 6000
2 Computer 3800
3 Ipad 1800
4 Core Python 69
5 Router 109
What do you want to buy?0    ===>正确输入商品索引号,会提示当前用户购物信息
You have added Xiaomi Phone to your shopping list, and you have 7600 left.

The goods we serve are as follow:
0 Xiaomi Phone 2400
1 Iphone 6000
2 Computer 3800
3 Ipad 1800
4 Core Python 69
5 Router 109
What do you want to buy?    ===>只输入'Enter'时,不会有提示输出,但会再次打印商品菜单
The goods we serve are as follow:
0 Xiaomi Phone 2400
1 Iphone 6000
2 Computer 3800
3 Ipad 1800
4 Core Python 69
5 Router 109
What do you want to buy?3
You have added Ipad to your shopping list, and you have 5800 left.

The goods we serve are as follow:
0 Xiaomi Phone 2400
1 Iphone 6000
2 Computer 3800
3 Ipad 1800
4 Core Python 69
5 Router 109
What do you want to buy?eqwer    ===>输入乱码时,会有提示,并接受再次输入
Please input the right choice.(Number to buy things and quit to quit.)

The goods we serve are as follow:
0 Xiaomi Phone 2400
1 Iphone 6000
2 Computer 3800
3 Ipad 1800
4 Core Python 69
5 Router 109
What do you want to buy?9    ===>输入不在合法范围内的数字时,也会有提示
Could not find the item, try again!

The goods we serve are as follow:
0 Xiaomi Phone 2400
1 Iphone 6000
2 Computer 3800
3 Ipad 1800
4 Core Python 69
5 Router 109
What do you want to buy?quit    ===>正常退出,会打印用户总的购物清单信息    
Your shopping list are as follow:
Xiaomi Phone 2400
Ipad 1800
Now you have 5800 left.
Goodbye!

    相对来说,用户界面还是比较友好的,因为不会有太大的异常情况出现,同时也实现了基本的需求。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值