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、程序练习

程序: 三级菜单

要求: 

  1. 打印省、市、县三级菜单
  2. 可返回上一级
  3. 可随时退出程序
#!/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完结。

 

 

 

 

 

 

 

 

 
posted @ 2017-09-19 19:50  uncle_guo  阅读(252)  评论(0编辑  收藏  举报