1、python作用域
对于变量的作用域,只要在内存中存在,就可以使用,如name变量在下面的代码中就可以使用。
>>> if 1 == 1:
... name = "QQ"
...
>>> print name
QQ
2、三元运算
>>> name = "QQ" if 1==1 else ‘haha‘
>>> print name
QQ
>>> name = "QQ" if 1!=1 else ‘haha‘
>>> print name
haha
3、python的进制
4、pycharm断点设置
创建project -->配置解释器-->创建文件-->执行:run debug(断点)
5、python对象
a、对于python,一切事物都是对象,对象基于类创建。
类有:字符串类、数字类、列表类
dir(list)查看list的方法
如何查看python的源码:在pycharm中,ctrl+list 查看
b、type查看对象的类型
c、dir(类型名)查看类中提供所有功能;
help(类型名)
help(类型名.方法)
6、数据类型的内置方法
类中的方法:
__方法__:内置方法,可能有多种执行,至少一种
方法:只有一种执行方法,类.方法
n1=1,n2=1,n1+n2
>>> n1.__add__(n2)
创建数字的两种方法: i=10,i=int(10)
求绝对值得两种方法:
>>> abs(n1)
1
>>> n1.__abs__()
1
求商和余数:
>>> a = 99
>>> a.__divmod__(10)
(9, 9)
7、编码与解码
编码:
Unicode------>UTF-8
Unicode------>GBK
解码:
UTF-8------->Unicode
GBK ------->Unicode
8、字符串的内置方法
>>> a.startswith(‘w‘) #以哪个字符串开头
True
>>> name=‘Char\tles‘
>>> name.expandtabs() #将tab替换为空格,默认为8个空格
‘Char les‘
>>> name.expandtabs(1)
‘Char les‘
>>> name.expandtabs(0)
‘Charles‘
>>> name = ‘Charles‘
>>> name.find(‘a‘) #找到字符串中第一个子字符串的下标
字符串格式化的四种方法:
方法2:
>>> name = ‘i am {ss} age {dd}‘
>>> name.format(ss=‘Charles‘,dd=18)
‘i am Charles age 18‘
方法3:
>>> name = ‘i am {0} age {1}‘
>>> Li=[222,333]
>>> name.format(*Li)
‘i am 222 age 333‘
方法4:
>>> name = ‘i am {0} age {1}‘
>>> Li=[222,333]
>>> name.format(*Li)
‘i am 222 age 333‘
>>> a
‘wahaha‘
>>> a.islower() #都是小写
True
>>> a = ‘a am charles‘
>>> a.title() #字符首字母大写
‘A Am Charles‘
>>> a
‘a am charles‘
>>> a.ljust(30,"=") #邮编填充30个字符
‘a am charles==================‘
>>> a.lower() #全部变小写
‘a am charles‘
>>> a.upper() #全部变大写
‘A AM CHARLES‘
>>> a.swapcase() #大小写转换
‘a aM cHARLES‘
>>> name
‘Charles‘
>>> name.partition(‘a‘) #将字符串以...截断
(‘Ch‘, ‘a‘, ‘rles‘)
index和find的区别:
>>>name = ‘Charles‘
>>> name.index(‘a‘)
2
>>> name.find(‘a‘)
2
>>> name.index(‘j‘)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> name.find(‘j‘)
-1
>>> name.endswith(‘s‘) #以...结束
True
>>> name.__contains__(‘le‘) #是否包含子序列,返回布尔值
True
9、列表基础
>>> li = [11,22,33,44]
>>> del li[2] #删除列表的第三个元素
>>> del li #删除整个列表
>>> li.count(22) #计算列表中元素个数
2
>>> li.extend(‘wahaha‘) #扩展,可以是字符串或者列表
>>> li
[11, 22, 22, 33, 44, ‘w‘, ‘a‘, ‘h‘, ‘a‘, ‘h‘, ‘a‘]
>>> a_list = [1,2,3]
>>> li.extend(a_list)
>>> li
[11, 22, 22, 33, 44, ‘w‘, ‘a‘, ‘h‘, ‘a‘, ‘h‘, ‘a‘, 1, 2, 3]
>>> li.pop(2) #删除,下标
22
>>> li.remove(‘h‘) #删除,对象为元素
>>> li.reverse() #将列表的元素顺序反转
>>> li.sort() #将列表的元素排序,中文按照unicode比较,排序
10、列表与元组常用的方法
11、字典的常用方法
.get方法
>>> dic = {‘a‘:123} >>> >>> >>> dic.get(‘a‘) #返回value的值 123 >>> dic.get(‘b‘,‘OK‘) #如果不存在key,返回OK ‘OK‘
字典的key不可以重复,value可以重复
.clear() #字典内容清空
>>> dic.clear() >>> dic {}
.has_key() #判断key是否在字典中
>>> dic.has_key(‘a‘) True
遍历字典的两种方法:
方法1:在数据量小的时候,这样用 >>> for k,v in dic.items():print k,v ... a 123 方法2:在大数据量的时候,这样用 >>> for k in dic:print k,dic[k] ... a 123
删除
>>> dic.pop(‘a‘) #删除元素 123 >>> del dic #全局性删除 >>> dic Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name ‘dic‘ is not defined
update
>>> a = {‘a‘:123} >>> b = {‘b‘:456} >>> >>> a.update(b) #将b整合到a中 >>> a {‘a‘: 123, ‘b‘: 456}
.values()
>>> a.values() #value放置到列表中 [123, 456]
深浅拷贝:
>>> a {‘a‘: 123, ‘b‘: 456} >>> b = a >>> a[‘c‘]=789 >>> a {‘a‘: 123, ‘c‘: 789, ‘b‘: 456} #字典为了节省内存,将b和a的引用都指向相同的地址,使得a变化,b也变化 >>> b {‘a‘: 123, ‘c‘: 789, ‘b‘: 456} >>> c = a.copy()
>>> c
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456}
>>> a[‘d‘]=111
>>> a
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456, ‘d‘: 111}
>>> c #使用浅拷贝,可以使得a和c相互分离,但是这样还有问题,看下面
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456}
>>> a[‘e‘]={‘name‘:[‘QQ‘]}
>>> a
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456, ‘e‘: {‘name‘: [‘QQ‘]}, ‘d‘: 111}
>>> d = a.copy()
>>> d
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456, ‘e‘: {‘name‘: [‘QQ‘]}, ‘d‘: 111}
>>>
>>> a[‘e‘][‘name‘].append(‘Charles‘) #如果字典/列表不只有一层,那么依旧没有分离,会原样拷贝,如何彻底分离呢,看下面
>>> a
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456, ‘e‘: {‘name‘: [‘QQ‘, ‘Charles‘]}, ‘d‘: 111}
>>> d
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456, ‘e‘: {‘name‘: [‘QQ‘, ‘Charles‘]}, ‘d‘: 111}
>>> import copy
>>> e = copy.deepcopy(a) #使用深拷贝,使得a和e完全分离
>>> e
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456, ‘e‘: {‘name‘: [‘QQ‘, ‘Charles‘]}, ‘d‘: 111}
>>> a
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456, ‘e‘: {‘name‘: [‘QQ‘, ‘Charles‘]}, ‘d‘: 111}
>>> a[‘e‘][‘name‘].append(‘Calen‘)
>>> a
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456, ‘e‘: {‘name‘: [‘QQ‘, ‘Charles‘, ‘Calen‘]}, ‘d‘: 111}
>>> e
{‘a‘: 123, ‘c‘: 789, ‘b‘: 456, ‘e‘: {‘name‘: [‘QQ‘, ‘Charles‘]}, ‘d‘: 111}
购物车程序:
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import sys sales_dict = { #商品的名目 1:[‘Iphone6S‘,6088], 2:[‘MAC‘,8888], 3:[‘bike‘,500], 4:[‘car‘,30000] } buy_sales_list = {‘Iphone6S‘:0, #购买商品和数量 ‘MAC‘:0, ‘bike‘:0, ‘car‘:0 } while True: total_money = int(raw_input(‘\033[1;31m请输入你总共有多少钱:\033[0m‘)) for k,v in sales_dict.items(): #打印商品列表 print "%s %s %s" %(k,v[0],v[1]) while True: print "\033[1;32m按q键退出\033[0m\n" identifier_of_sales = raw_input(‘\033[1;34m请输入你想要购买的商品的编号:\033[0m‘).strip() if identifier_of_sales == ‘q‘: #如果输入q键,就打印购买商品列表,并退出 print "\033[1;33m你购买的商品和数量为\033[0m\n" for k,v in buy_sales_list.items(): print k,v sys.exit() elif not sales_dict.has_key(int(identifier_of_sales)): #如果输入的商品的编号不存在,重新输入 print "\033[1;31m你输入的商品编号不存在,请重新输入\033[0m\n" continue cost_money = int(sales_dict[int(identifier_of_sales)][1]) cost_name = sales_dict[int(identifier_of_sales)][0] left_money = total_money - cost_money total_money = left_money if left_money > 0: print "\033[1;34m你已经购买了%s,剩余%s元\033[0m" %(cost_name,left_money) buy_sales_list[cost_name] +=1 #购买商品的数量 else: print "\033[1;35m你不能购买%s\033[0m" %(cost_name) sales_list = [] #商品的价格列表 for k,v in sales_dict.items(): sales_list.append(v[1]) if left_money < min(sales_list): # 如果剩余的钱比商品的最低价格还少 print "\033[1;31m你剩余的钱已经不足以购买任何商品了\033[0m" print "\033[1;36m你购买的商品和数量为:\033[0m" for k,v in buy_sales_list.items(): print k,v sys.exit() else: print "\033[1;33m如果想继续购买,请输入商品编号,您可以购买的商品如下\033[0m\n" for k,v in sales_dict.items(): if left_money >= v[1]: print "\033[1;37m%s %s %s\033[0m" %(k,v[0],v[1])