python 学习之数据类型

1.常量:全部都是大写字母,不会改变的变量

2..pyc文件:是由py文件经过编译后二进制文件,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python 的虚 拟机来执行的。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。pyc文件也是可以反编译的,不同版本编译后的pyc文件是不同。

3.字符串

字符串长度获取:len(str)
字母处理:
全部大写:str.upper()
全部小写:str.lower()
大小写互换:str.swapcase()
首字母大写,其余小写:str.capitalize()
首字母大写:str.title()
字符串去空格及去指定字符:
去两边空格:str.strip()
去左空格:str.lstrip()
去右空格:str.rstrip()
去两边指定的字符:str.strip('指定字符'),相应的也有lstrip,rstrip
字符串判断相关:
是否以start开头:str.startswith('start')
是否以end结尾:str.endswith('end')
是否全为字母或数字:str.isalnum()
是否全字母:str.isalpha()
是否全数字:str.isdigit()
是否全小写:str.islower()
是否全大写:str.isupper()
字符串替换相关:
替换old为new:str.replace('old','new') #默认全替换
替换指定次数的old为new:str.replace('old','new',替换次数)
字符串搜索相关:
搜索指定字符串,没有返回-1:str.find('t')
指定起始位置搜索:str.find('t',start)
指定起始及结束位置搜索:str.find('t',start,end)
从右边开始查找:str.rfind('t')
搜索到多少个指定字符串:str.count('t')
上面所有方法都可用index代替,不同的是使用index查找不到会抛异常,而find返回-1
str.center(width[, fillchar]):
width -- 这是字符串的总宽度。
fillchar -- 这是填充符,不填默认是空格。
str.capitalize():
capitalize()方法返回字符串的一个副本,只有它的第一个字母大写。
join方法:
join 方法用于连接字符串数组
例:
s = ['a', 'b', 'c', 'd']
print ''.join(s)
print '-'.join(s)

4.

创建列表
sample_list = ['a',1,('a','b')]

Python 列表操作
sample_list = ['a','b',0,1,3]

得到列表中的某一个值
value_start = sample_list[0]
end_value = sample_list[-1]

删除列表的第一个值
del sample_list[0]

在列表中插入一个值
sample_list[0:0] = ['sample value']

得到列表的长度
list_length = len(sample_list)

列表遍历
for element in sample_list:
    print(element)
   
Python 列表高级操作/技巧

产生一个数值递增列表
num_inc_list = range(30)
#will return a list [0,1,2,...,29]

用某个固定值初始化列表
initial_value = 0
list_length = 5
sample_list = [ initial_value for i in range(10)]
sample_list = [initial_value]*list_length
# sample_list ==[0,0,0,0,0]


附:python内置类型
1、list:列表(即动态数组,C++标准库的vector,但可含不同类型的元素于一个list中)
a = ["I","you","he","she"]      #元素可为任何类型。

下标:按下标读写,就当作数组处理
以0开始,有负下标的使用
0第一个元素,-1最后一个元素,
-len第一个元 素,len-1最后一个元素
取list的元素数量               
len(list)   #list的长度。实际该方法是调用了此对象的__len__(self)方法。 

创建连续的list
L = range(1,5)      #即 L=[1,2,3,4],不含最后一个元素
L = range(1, 10, 2) #即 L=[1, 3, 5, 7, 9]

list的方法
L.append(var)   #追加元素
L.insert(index,var)
L.pop(var)      #返回最后一个元素,并从list中删除之
L.remove(var)   #删除第一次出现的该元素
L.count(var)    #该元素在列表中出现的个数
L.index(var)    #该元素的位置,无则抛异常
L.extend(list)  #追加list,即合并list到L上
L.sort()        #排序
L.reverse()     #倒序
list 操作符:,+,*,关键字del
a[1:]       #片段操作符,用于子list的提取
[1,2]+[3,4] #为[1,2,3,4]。同extend()
[2]*4       #为[2,2,2,2]
del L[1]    #删除指定下标的元素
del L[1:3]  #删除指定下标范围的元素
list的复制
L1 = L      #L1为L的别名,用C来说就是指针地址相同,对L1操作即对L操作。函数参数就是这样传递的
L1 = L[:]   #L1为L的克隆,即另一个拷贝。
       
list comprehension
   [ <expr1> for k in L if <expr2> ]

5.字典操作


radiansdict.clear():删除字典内所有元素
radiansdict.copy():返回一个字典的浅复制
radiansdict.fromkeys():创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
radiansdict.get(key, default=None):返回指定键的值,如果值不在字典中返回default值
radiansdict.has_key(key):如果键在字典dict里返回true,否则返回false
radiansdict.items():以列表返回可遍历的(键, 值) 元组数组
radiansdict.keys():以列表返回一个字典所有的键
radiansdict.setdefault(key, default=None):和get()类似, 但如果键不已经存在于字典中,将会添加键并将值设为default
radiansdict.update(dict2):把字典dict2的键/值对更新到dict里
radiansdict.values():以列表返回字典中的所有值

 

作业:实现购物的小程序,支持多用户登录,可以充值和多次购买

#/usr/bin/env python3
#coding:utf-8

import os,json
import time

 


def login(): #用户登陆函数
shop = [ #商品店
("bike",1000),
("coffe",30),
("alineware",16000),
("thinkpad",8000),
("iphone",7000),
]
storage_user_file = "./user.py" #存放用户名,密码以及余额的字典,用json格式去存 {"wyx": ["jerry", "100000"]}
user_login_num = 0
exit_flag = True #退出程序标志位
while exit_flag:
existing_users_dict = json.load(open(storage_user_file,'r')) #读取用户资料,以字典形式存储
get_user = input("please your username ")
get_pass = input("please your password ")
if get_user in existing_users_dict and get_pass == existing_users_dict[get_user][0]: #如果用户名密码正确
print ("Welcome to login..")
shop_car = {} #存储购买商品的名称以及商品的价格及和个数 "bike":[100,8]
salary = existing_users_dict[get_user][1] #获取当前用户的工资
salary=int(salary)
while exit_flag:
for item in enumerate(shop): #在shop列表里的每个元组前加上序号,变为 (1,("bike",100))
s_index = item[0] #每个元组的的序号
s_name = item[1][0] #商品
s_price = item[1][1] #商品的价格
print(s_index,s_name,s_price) #输出商店里面 商品的标号,商品的名字以及商品的价格
produc = input("请选择你要购买的商品q=quit,c=check ")
if produc.isdigit(): #如果商品的标号以及购买的个数为整形
producnum = input("请输入购买的个数 ")
producnum = int(producnum)
produc = int(produc)
if produc*producnum < salary: #如果购买的商品个数小于工资
p_product = shop[produc] #商品以及对应的价格,为元组 ('thinkpad', 8000)
p_product_name = p_product[0] #商品的名称
p_product_price = p_product[1] #商品的价格
salary = salary-p_product_price*producnum #工资等于工资减去购买的商品价格乘商品个数
if str(salary).isdigit():
existing_users_dict[get_user][1] = salary #在字典做出相应的更改,写入剩余的工资
shop_car[p_product_name] = [p_product_price,producnum] #把购买的物品和价格以及购买数量放到购物车
buying_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
listnum = len(existing_users_dict[get_user]) #查看这个用户是否第一次购买
if listnum == 2:
existing_users_dict[get_user].append({}) #改变初始字典结构为 {'wyx': ['jerry', 99910, {}]}
existing_users_dict[get_user][2][p_product_name]=[buying_time,producnum] #把购买时间写入到文件为 {'用户': ['密码', 余额, {'购买的物品': ['购买时间',数量]}]}
print(existing_users_dict)
json.dump(existing_users_dict,open(storage_user_file,"w")) #把剩余的钱存入到文件
print ("你购买了%s 个数为%s,余额为%s" % (p_product,producnum,salary))
else:
existing_users_dict[get_user][2][p_product_name]=[buying_time,producnum] #把购买时间写入到文件为 {'用户': ['密码', 余额, {'购买的物品': ['购买时间',数量]}]}
json.dump(existing_users_dict,open(storage_user_file,"w")) #把剩余的钱存入到文件
print ("你购买了%s 个数为%s,余额为%s" % (p_product,producnum,salary))
else:
recharge = input("余额不足,是否充值 y or n ")
if recharge == 'y' or 'yes':
recharge_num = input("请输入充值数字 ")
recharge_num = int(recharge_num)
salary = salary+recharge_num #最新的余额为之前的余额加上充值的余额
existing_users_dict[get_user][1] = salary #把最新的余额存入字典
print("充值后的余额为%s" % salary)
elif recharge == 'n':
print ('余额不足')
else:
print ("输入有误,请重新输入")
else:
recharge = input("余额不足,是否充值 y or n ")
if recharge == 'y':
recharge_num = input("请输入充值数字 ")
recharge_num = int(recharge_num)
salary = salary+recharge_num #工资等于余额加上充值的钱
existing_users_dict[get_user][1] = salary #改变字典里面的钱
json.dump(existing_users_dict,open(storage_user_file,"w")) #把剩余的钱存入到文件
print ("充值后的余额为%s" % salary)
elif recharge == 'n':
print("余额不足")
else:
print ("输入有误,请重新输入")
elif produc =='q': #如果用户输入退出键
print ("你购买的物品".center(40,'-'))
for i in shop_car:
produc_price = shop_car[i][0] #本次购物车里的商品价格
produc_num = shop_car[i][1] #本次购物车里面的购物次数
print("你本次购买的物品为:%s 价格为:%s 数量为%s " % (i,produc_price,produc_num))
print("END".center(40,"-"))
print("你剩余的工资为%s \n"% salary)
exit_flag = False
elif produc == 'c':
buy_produc_num = len(existing_users_dict[get_user]) #查看是否第一次购物
if buy_produc_num == 2:
print("还没有购买商品,请继续购买")
else:
print ("你购买的物品".center(40,'*'))
buy_produc = existing_users_dict[get_user][2] #用户购买的物品包括购买时间和数量
for producname in buy_produc:
buy_produc_name = producname #物品价格
buy_produc_time = buy_produc[producname][0] #购买时间
buy_producnum = buy_produc[producname][1] #购买数量
print("你购买的物品为:%s 时间:%s 数量:%s " % (buy_produc_name,buy_produc_time,buy_producnum))
print("END".center(40,"*"))
print("你剩余的工资为%s \n"% salary)
else:
print("输入有误,请重新输入")
else:
if user_login_num>3:
print ("You are locked")
exit_flag = False
else:
user_login_num+=1
print("请继续尝试")

if __name__ == '__main__':
login()

posted on 2016-05-21 09:40  big_jerry  阅读(253)  评论(0编辑  收藏  举报