重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一。单例模式
乌拉特前网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。成都创新互联从2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联。
一般情况下,类可以生成任意个实例,而单例模式只生成一个实例
我们先用单例模式设计一个Rectangle类
然后用__new__方法设计单例模式,代码如下
然后我们来验证下,单例模式下是否只能生成一个实例
单例模式在程序设计中比较典型的应用场景:多个用户同时调用某个模块时,会生成一些日志,我们希望这些日志存在同一个文件内,而不是多个文件。
在生成日志模块我们就可以采用单例模式进行设计。
二。反射
概念:简单来说就是可以利用字符串来映射模块中的相应方法然后可以操作模块中相应的方法
我们以一个饭店点菜的实际场景来理解Python的反射机制
hasatter(对象,属性或方法名)
判断对象中是否有某个属性或某个方法,返回值是布尔型
getattr(对象,属性或方法名,缺省值) 判断对象中是否有某个属性或某个方法,如果有返回方法本身,没有则返回缺省值
setattr(对象,属性,新值)
将实例的属性改为新的值,如果属性不存在则新建
我们给实例guke1加个价格属性
# -*- coding: cp936 -*-
import re
re0=re.compile(r'=')
re1=re.compile(r'[a-zA-Z]')
re2=re.compile(r'([^a-zA-Z]+)([a-zA-Z ]+)(.*)')
tmp=''
dict0={}
with open('menu_items.txt','r') as file0:
for i,j in enumerate(file0.readlines()):
if j=='' or re0.match(j):
pass
elif re1.match(j):
tmp=j.strip()
dict0[tmp]=[]
elif re2.match(j):
dict0[tmp].append(tuple(map(lambda x:x.strip(),re2.match(j).groups())))
print dict0
凑活用,不严谨
问题比较简单。
主要是你diancai递归调用该函数,当第二次来的时候,又将下面这些数初始化一次:
int k,j=0,i=0,d[10],m ;
解决方案:
int k,j=0,i=0,d[10],m ;
void diancai()
{
j++;
cout" 菜单"endl;
for(k=0;k10;k++)
coutc1[k].cd" 价格:"c1[k].jgendl;
coutendl;
cout"请问需要点什么菜:"endl;
cind[i];
i++;
coutendl"是否还需要点菜:1.是 2.否"endl;
//////////////////
//加入这里的目的主要是当点菜超过10次后,将自动退出,不然又是数组越界问题。
if( i 10 )
{
cink;
}
else
{
i = 9;
k = 2;
}
//////////////////
switch(k)
{
case 1:system("cls");diancai();break;
case 2:
for(m=0;m=i;m++)
coutendl"确认需要点的菜:"c1[d[m]].cd;
system("pause");
break;
}
}
这是在你代码的基础上更改,当然还有其他的方法实现,应该会比这更加简单。
# coding: utf-8
menu = {
'1': dict(name='草莓冰淇淋', price=20),
'2': dict(name='香草冰淇淋', price=10),
'3': dict(name='香蕉冰淇淋', price=15),
'5': dict(name='巧克力冰淇淋', price=30),
}
def showmenu(menu):
for k, item in sorted(menu.items()):
print "%(key)s: %(name)s 价格%(price).2f" % dict(key=k, **item)
def menuchoice(menu):
while True:
showmenu(menu)
c = raw_input("Your Choice('.' for end): ")
if c == '.':
break
else:
yield menu.get(c)
customerchoice = filter(None, menuchoice(menu))
print "Total: %.2f" % sum(map(lambda x: x["price"], customerchoice))