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

1.基本需求

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

(1)让用户输入工资;

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

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

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

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



2.实现基本思路

基本思路可如下所示:

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



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.测试

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

[email protected]:/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!

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

时间: 2024-08-06 20:04:37

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

Objective-C学习之旅 第二篇

Objective-C学习之旅 第二篇 Objective-C 字符串处理 //苹果从iOS5开始,就引入了ARC这种内存管理技术,目的就是消除繁琐而容易出错的手工内存管理行为. //如果项目是ARC的,那么就不能调用原来的retain, release, autorelease,而且dealloc也不再需要内存维护相关的代码. //也就是说下面的例子中,如果在ARC模式下,就不用[astring release]; /**************************************

我的Python之旅第二天

一 .字符串操作 1单引号('').双引号("").三引号(""" """)的区别. 如果字符串中不包含单引号.双引号,则三个引号没有区别. msg1="Today is a nice day,everyday is a new day" print(msg1) Today is a nice day,everyday is a new day 如果字符串中包含单引号,则应使用双引号或者三引号. msg2=

由浅入深,走进Python装饰器-----第二篇:进阶--函数装饰函数

上一篇:由浅入深,走进Python装饰器-----第一篇:基础 装饰器的使用种类: # 第一种 @函数 被装饰函数 # 第二种 @函数 被装饰类 # 第三种 @类 被装饰类 # 第四种 @函数 被装饰函数 本篇介绍第一种 @函数 被装饰函数 1.1 对带参数的原函数进行修饰 # 默认将old函数的参数传给outer里面的第一层函数 def outer(f): def inner(var): print("1 我是outer函数,接收外部传进来的old :",f) print("

【C语言探索之旅】 第三课:你的第一个程序

内容简介 1.课程大纲 2.第一部分第三课:你的第一个程序 3.第一部分第四课预告:变量的世界 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算符 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文件读写

Python自动化 【第二篇】:Python基础-列表、元组、字典

本节内容 模块初识 .pyc简介 数据类型初识 数据运算 列表.元组操作 字符串操作 字典操作 集合操作 字符编码与转码 一.模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,让我们先来象征性的学2个简单的. sys 1 #!/usr/bin/env python 2 3 # -*- coding: utf-8 -*- 4 5 6 7 import sys 8 9 10 11 print(sys.argv) 12 13

【Python之旅】第三篇(二):Pickle序列化

说明:关于Pickle的说明 作如下说明: 序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?嗯, 这取决于你想要怎么保存,怎么重用,发送给谁.很多游戏允许你在退出的时候保存进度,然后你再次启动的时候回到上次退出的地方.(实际上, 很多非游戏程序也会这么干.) 在这个情况下, 一个捕获了当前进度的数据结构需要在你退出的时候保存到磁盘上,接着在你重新启动的时候从磁盘上加载进来. 什么东西能用pickle模块存储? –所有Python支持的 原生类型

【Python之旅】第三篇(一):Python函数

说明: 使用函数可以使程序实现功能模块化,大大简洁我们的程序,这里主要讨论Python中函数的下列内容: 1.函数定义与函数参数 2.局部变量和全局变量 3.函数默认参数和关键参数 4.*Args和**Kargs 因为函数部分内容跟C语言中的很多内容都十分相似,所以会结合C语言来进行对比学习. 1.函数定义与函数参数 --基本格式1:不参参数 ·定义: def sayHi():     print "Hello!" ·调用: >>> sayHi() Hello --基

【Python之旅】第三篇(四):Pythoh模块

说明: 函数可以将代码的实现细节隐藏起来,而模块则可以在一个py文件中放置多个函数,通过模块的导入,即可调用这多个函数,当然也可以将一个函数作为一个py文件,无论是哪一种方式,这个py文件,都可以称为一个模块.更普遍来说,py文件都可以作为一个模块,通过import导入来进行使用. 这里说的模块应该是类似于sys或者os之类的模块,而不是普通的py文件.可以将多个python包放在一个目录中,通过__init__的初始化方法制作一个python包,import导入之后即可以使用. 因此,这里需要

Python 语言学习 第二篇:数据类型(字符串)

字符串是一个有序的字符的不可变序列,用于存储基于文本的信息.字符串所包含的字符存在从左至右的位置顺序,不可以在原处(in-place)修改.Python没有C语言的字符和字符串之分,只有字符串.从严格意义上说,字符串是单个字符的序列,支持元素基于位置的操作,能够通过位置索引字符:由于字符串具有不可变性,不能对原始的字符串进行修改,也就是说,不能通过对其某一位置进行赋值而修改字符串. 一,字符串常量 字符串常量使用成对的单引号或双引号来表示,两者表示的效果是一样的. 1,在字符串常量中表示引号 如