1、指定解释器
#!/usr/bin/env python
#_*_coding:utf-8_*_
2、用户输入
name
=
input
(
"What is your name?"
)
print
(
"Hello "
+
name )
输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import getpass
# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass("请输入密码:")
# 打印输入的内容
print(pwd)
3、sys、os模块
import sys
import readline
import rlcompleter
if sys.platform == 'darwin' and sys.version_info[0] == 2:
readline.parse_and_bind("bind ^I rl_complete")
else:
readline.parse_and_bind("tab: complete") # linux and python3 on mac
for mac
你会发现,上面自己写的tab.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里啦,基本一般都放在一个叫 Python/2.7/site-packages 目录下,这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python环境变量列表。
4、小记——列表的增(insert)、删(pop)、改(a[1]=xxxxx)、查(append)
** 次幂
type 查看类型
List 定义列表 a=[]
append
a[1] 取数组值 a[-1] 取最后一个数组成员
取数组成员数 a.index("你好")
a[2:4] 取切片 掐头去尾 也就是取2,3两位的数据
cound
insert
pop
替换 a[i]=x
reverse
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle
name=["xiaoming","xiao_a","xiao_b","xiao_b","xiao_c"]
#————————查
#print(name)
#print (name[0],name[2])#取列表第1个成员 ,从0开始pr
#print(name[1:3])#切片取 顾头不顾尾
#print(name[0:4])#0可以省略
#print(name[:4])
#print(name[-1])#取最后一个成员
#print(name[-2:])#取最后两个值
#————————增
name.append("我是新来的xiao_d")
name.insert(2,"插到xiao_b的前面")
name.insert(4,"查到xiao_b的后面")#不可批量插入
name.insert(-1,"我是最后一个")
#————————改
name[1]="改了xiao_a"
#________删 3种方法
#name.remove("xiaoming")
#del name[0] #指定位置
name.pop()#括号里面写第几个位置就删除第几个,同上。但是默认最后一个
print(name)
print( name[name.index("xiao_b")] )#.index 查看位置
print(name.count("xiao_b"))#统计多少重复
name.reverse()#反转
name2=[1,2,3]
name.extend(name2)#合并
del name2#删除整列
print(name,name2)
4+补充列表copy——————浅copy,深copy
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle_guo
import copy
person=['name',['money',100]]
#——————————3种浅copy
'''
p1=copy.copy(person)#浅copy
p2=person[:]#完全切片
p3=list(person)
'''
p1=person[:]
p2=person[:]
p1[0]='xiao'
p2[0]='da'
p1[1][1]=50
print(p1)
print(p2)
5、sys、os模块使用以及编码——decode、解码——encode
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle
'''
import sys
print(sys.path)#打印环境变量
print(sys.argv)
import os
#os.system("ls")
cmd_name=os.popen("ls").read()
print("cmd_name:\n",cmd_name)
'''
#解码decode编码encode——————————bytes and string
'''
msg="我爱北京天安门"
print(msg)
print(msg.encode(encoding="utf-8"))#编码
print(msg.encode(encoding="utf-8").decode(encoding="utf-8"))#解码
'''
#可以简写
msg="我爱北京天安门"
print(msg.encode('utf-8'))
print(msg.encode('utf-8').decode('utf-8'))
6、简单登录——字符串打印.format
_usename="uncle" #拟定账号
_password="666" #拟定密码
usename=input("username:") #用户输入账号
passwore=input("password:") #用户输入密码
if _usename==usename and _password==passwore:#判断账号、密码都相等
print("welecome {name} back~".format(name=usename)) #利用{}调入输入的账号
else:
print("error")
7、循环 while 、for i in a:
猜数字游戏:
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle
age=56
i=0
while i<3:
guess_age = int(input("you guesee age:"))
if age==guess_age:
print("you got it")
break
elif age<guess_age:
print("think small")
else:
print("think bigger")
i+=1
if i==3:
again=input("do you want again?")
if again != "n":
i=0
8、元组:
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle_guo
'''
元组 tuple 又叫只读列表
只有2个方法:count---统计多少重复 ,index----取元组成员数
什么情况用元组:
数据库配置链接
提示其他人不要改的信息
'''
name=('a','b','a')
print(name.count('a'))
print(name.index('b'))
9 练习:购物车
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle_guo
'''
程序:购物车程序
需求:
启动程序后,让用户输入工资,然后打印商品列表
允许用户根据商品编号购买商品
用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
可随时退出,退出时,打印已购买商品和余额
提示:
your salay 5000
1、iphone 5800
2、Mac Pro 12000
3、Starbuck Latte 31
4、book for python 81
5、bike 800
#>>>:1
added [iphone] to your shopping
1、iphone 5800
2、Mac Pro 12000
3、Starbuck Latte 31
4、book for python 81
5、bike 800
#>>>:2
you last salay bugou
1、iphone 5800
2、Mac Pro 12000
3、Starbuck Latte 31
4、book for python 81
5、bike 800
#>>>:q
have bougth below:***
[[iphone,699],[book for python,81]]
your balance:399
'''
commodity=[
("iphone",5800),
("Mac Pro",12000),
("Starbuck Latte",31),
("book for python",81),
("bike",800),
]
shopping=[]#定义购买到的信息
salary=input("input your salary:")#salary:用户工资
if salary.isdigit():#判断是不是数字
salary=int(salary) #如果是转换成整数型
while True:#循环输出列表(两种方法)
#for i,j in enumerate(commodity):
# print(i, j)
for i in commodity:
print(commodity.index(i),i)
user_choice=input("选择要买啥?>>>:")
if user_choice.isdigit():#判断输入是否为整数
user_choice=int(user_choice)#转换成整数,因为input默认str
if user_choice<len(commodity)and user_choice>=0:#如果用户输入的数字小于列表总数且大于等于0
p=commodity[user_choice]#提取用户输入数字列表对应的价钱
if p[1]<=salary:#买的起
salary-=p[1]#减钱
shopping.append(p)#在空的列表里添加购买的东西
print("Added {} into shopping cart,your current balace is \033[31;1m{}\033[0m".format(p,salary))
else:
print("\033[41;1m你的余额只剩[{}]啦!\033[0m".format(salary))
else:
print("商品{}不存在!!!".format(user_choice))
elif user_choice=='q':
print('————————————shopping list————————————')
for x in shopping:
print(x)
print("余额:",salary)
exit()#退出
else:
print("invalid option")#无效的选项
10、优化购物车
要求:1、用户入口:
商品信息存在文件里
已购商品,余额记录
2、商家入口:
可添加商品,修改商品价格
11、字符串:
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle_guo
name='uncle_guo{name},and{age}'
name.capitalize() #首字母大写
name.count('u')#统计'u'的数量
name.center(50,"_")#一共打印50个字符,不够的用——补充
name.encode()#字符转二进制
name.endswith('ex')#判断一串字符串是不是以**结尾
name.expandtabs(tabsize=30)#把tab键替换空格
name.find('guo')#查找,找到字符索引
name[name.find("and"):] #字符串也可以切片
#print(name.format('gg','hh'))#格式化
name.format_map({'name':'guo','age':'22'})
name.isdigit()#判断是不是整数
'1a'.isidentifier()#是不是合法的变量名
'a 1a'.isspace()#判断是不是空格
a='&&&'.join(['1','2','3'])#重点,把元祖变成字符转,前面可以加标记符
#name.ljust(50,'*')#共50个字符,不够用*补在右面
#name.replace(50,'*')#共50个字符,不够用*补在左面
name.lower()#把大写变小写
name.upper()#把小写变大写
name.lstrip()# 去掉左面的空格和回车
name.rstrip()# 去掉右面的空格和回车
name.strip()# 去掉两边的空格和回车
#'abc def'.replace('a',1)#把字符串里面的字符串字母替换
b='a& b& c& d'.split(' ')#按照空格把字符串分割,挺好用 ,还可以跟字母或者特殊符合分割
print(b)
12、字典的增、删、改、查
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle_guo
'''
字典:key:value 键:值,
特性:字典无序的,没有下标
'''
info={
'No.1':'AAAA',
'No.2':'BBBB',
'No.3':'CCCC',
'No.4':'DDDD',
}
print(info)
#查
print(info['No.2'])#不存在报错
print(info.get('No.9'))#有就返回,没有就None
print('No.9' in info)#判断是否在字典里,返回Ture,False
#改
info['No.1']='我是第一个'
print(info)
#添加
info['No.5']='我是新来的'
#删
#del info['No.1']#del想删谁就删谁
info.pop('No.1')#指定删除
print(info)
info.values()#打印所有值,不包括key
info.keys()#打印所有key,不包括values
#info.setdefault()#***重点*****先在字典里取,如果能取到,输出原值,如果找不到,创建新的
info.setdefault("第五个",{"1","属性"})
b={
'No.1':"FFFF",
1:2,
2:5
}
info.update(b)#有交叉的更新,无交叉创建
print(info.items())#把字典转换成列表
c=info.fromkeys([1,2,3],"test")#初始化一个新的字典,key定义好里
print(c)
13、字典嵌套:
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle_guo
'''
字典嵌套
'''
date={
"key1":{
"www.aaa":["描述1","描述2"],
"www.bbb":["描述1","描述2"],
"www.ccc":["描述1","描述2"],
},
"key2":{
"www.111":["描述1","描述2"],
"www.222":["描述1","描述2"],
"www.333":["描述1","描述2"]
},
"key3":{
"www.xxx":["描述1","描述2"],
"www.yyy":["描述1","描述2"],
"www.zzz":["描述1","描述2"]
}
}
date["key3"]["www.yyy"][0]="miaosu1"
print(date)
'''
字典的循环:
for k,v in info.items():
print(k,v)
把字典转成列表⬆️
'''
for i in date:
print(i,date)
14、程序练习
程序: 三级菜单
要求:
- 打印省、市、县三级菜单
- 可返回上一级
- 可随时退出程序
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle_guo
data = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}
exit_flag=False
while not exit_flag:
for i in data:
print(i)
choice=input("选择进入>>>:")
if choice in data:
while not exit_flag:
for i2 in data[choice]:
print("\t",i2)
choice2 = input("选择进入>>>:")
if choice2 in data[choice]:
while not exit_flag:
for i3 in data[choice][choice2]:
print("\t", i3)
choice3 = input("选择进入>>>:")
if choice3 in data[choice][choice2]:
for i4 in data[choice][choice2][choice3]:
print("\t\t",i4)
choice4 = input("最后一层,按b返回")
if choice4=="b":
pass
elif choice4=="q":
exit_flag=True
if choice3 == "b":
break
elif choice3 == "q":
exit_flag = True
if choice2 == "b":
break
elif choice2 == "q":
exit_flag = True
15、集合 交集、并集、差集、子集
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle_guo
'''
集合:
无序
'''
list_1=[1,4,5,7,3,6,7,9]
list_1=set(list_1)#把列表转换成集合
print(list_1)
list_2=set([2,6,0,66,22,8,4])
print(list_2)
#取交集_____________运算符:&
list_1.intersection(list_2)
a=list_1 & list_2
print("运算符",a)
#并集,合并起来,去重_____________运算符:|
a=list_1.union(list_2)
list_2 | list_1
print(a)
#差集,我有你没有_____________运算符:-
a=list_1.difference(list_2)#list_1里面有的,二里面没有的
list_2 - list_1
print(a)
#子集 返回True False
list_3=set([1,3,7])
a=list_3.issubset(list_1)
print(a)
#对称差集 互相里面都没有的取出来_____________运算符:^
a=list_1.symmetric_difference(list_2)
list_2 ^ list_1
list_4=set([5,6,7,8])
a=list_3.isdisjoint(list_4)#3于4有没有交集
print(a)
#添加:
list_1.add(999)
print(list_1)
#添加多项:
list_1.update([888,777,666])
print(list_1)
#删除
list_1.remove(666)
print(list_1)
#print(list_1.pop)
list_1.discard(888)
#长度
len(list_1)
#列表、集合、字典、字符串,测试X是否是S的成员
#x in s
#x ont in s
16、文件操作
#!/usr/bin/env python3
# -*-coding:utf-8 -*-
# Author:Uncle_guo
'''
文件操作
先打开
操作
关闭
'''
'''
#打开(读)
#data=open("nnn",encoding="utf-8").read()
f=open("nnn2","r",encoding="utf-8")#文件句柄(文件内存对象)r.读,w.写
data=f.read()
print(data)
#写
f=open("nnn","a",encoding="utf-8")#文件句柄(文件内存对象)r.读,w.写,a.追加 append
f.write("巴拉巴拉小魔仙\n")
'''
#只打印前5行
'''
f=open("nnn","r",encoding="utf-8")
for i in range(5):
print(f.readline())
'''
#low loop
'''
f=open("nnn","r",encoding="utf-8")
for index,line in enumerate(f.readlines()):
if index==3:
print("______________")
continue
print(line.strip())#strip() 空格、换行都去掉
'''
#高效的循环文件方法
'''
f=open("nnn","r",encoding="utf-8")
count=0
for line in f:
if count == 3:
print("______________")
count += 1
continue
print(line.strip())
count += 1
f.close()
'''
f=open("nnn","r",encoding="utf-8")
f.tell()
with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open('log','r') as f:
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
with
open
(
'log1'
) as obj1,
open
(
'log2'
) as obj2:
pass
Day_1完结。