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:
pass
Day_1完结。