python for mac Day_1
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.append()
a[1] 取数组值 a[-1] 取最后一个数组成员
取数组成员数 a.index("你好")
a[2:4] 取切片 掐头去尾 也就是取2,3两位的数据
cound 统计多少重复
insert 指定位置添加 a.insert(1,'你好')
pop 删除 a.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: passDay_1完结。

浙公网安备 33010602011771号