1.基本需求
编写一个购物小程序,要求实现如下功能:
(1)让用户输入工资;
(2)输出购物菜单及产品价格;
(3)计算用户是否可支付;
(4)输出用户剩余的钱,问用户是否继续购物,如果选择继续,则继续进行,否则退出程序;
(5)若钱不够,输出用户还需要工作多久才能买得起(这里暂不实现此功能)。
2.实现基本思路
基本思路可如下所示:
在编写程序的时候即以该思路为主线,具体细节下面再提及。
3.实现细节
基于友好用户界面的原则,实现的细节可总结如下:
(1)用户输入工资时,如果输入的是非数字或没有输入,会有提示再次输入,而不会异常退出;
(2)用户输入购买物品时,如果输入的是非商品索引或非quit退出时,会有提示再次输入,而不会异常退出;
(3)每添加商品到购物列表后,会提示用户当前所剩余的money;
(4)用户选择退出时,会打印用户的购物清单,同时输出用户剩余的money;
(5)总的原则是,程序在执行过程中不会有异常情况出现,即使用户输入非法字符。
4.实现代码与注释
基于上述需求的实现代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#!/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.测试
·对输入过程中可能出现的各种情况和说明如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
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!
|
相对来说,用户界面还是比较友好的,因为不会有太大的异常情况出现,同时也实现了基本的需求。
本文转自 xpleaf 51CTO博客,原文链接:http://blog.51cto.com/xpleaf/1693767,如需转载请自行联系原作者