文档章节

老男孩 - python基础day1

以谁为师
 以谁为师
发布于 2018/12/10 11:08
字数 2345
阅读 24
收藏 0

基础知识

%s 字符串格式输出,%d 数字格式化输出

可变类型(mutable):列表,字典,集合 不可变类型(unmutable):数字,字符串,元组

有序数据 : 列表,元组 无序数据 : 结合

s为字符串判断

s.isalnum() 所有字符都是数字或者字母
s.isalpha() 所有字符都是字母
s.isdigit() 所有字符都是数字
s.islower() 所有字符都是小写
s.isupper() 所有字符都是大写
s.istitle() 所有单词都是首字母大写,像标题
s.isspace() 所有字符都是空白字符、\t、\n、\r
# True or False

列表

1、有序的集合 2、通过偏移来索引,从而读取数据 3、支持嵌套 4、可变的类型

基础

l = []
l =[‘张三‘,‘李四’,'alex']
# 创建

l.append("eva")
# 追加

# 删除
l.remove('eva')
l.pop() # 删除最后一个


索引

l = ['egon','alex','seven','yuan']
l[0]

切片

切片后是新的列表

l = ['egon','alex','seven','yuan']
l[0:3]
# 1-3 之间的元素
l[2:]
# 第3个开始的元素
l[:]
# 切片
l[::2]
l[::-1]

枚举打印索引

for x,y  in enumerate (lists):
    print(x,y)

列表推导式

a=[ i for i  in lists]

常用数据处理(索引、查找、分割、连接、替换、统计、大写)

find搜索

s = 'hello'
print (s.find('e'))
# 搜索到 值为1
print (s.find('i'))
# 未搜索到 值 -1

index索引

s = 'hello'
print(s[1])
# 第二位
print (s[-1])
# 最后一位
print(s.index('e'))
# 字符串索引序号
print(type(s))

len长度

len(lists)
# 字符、列表...长度

replace替换

s = 'hello,world'
s = s.replace('h','H')
print (s)

split字符串切割成列表

s = 'hello,world'
print (s.split(","))

strip清除

s = '  hello,world!  '
s.strip()   # 清除头尾两边空白
s.lstrip()  # 清理左空白
s.rstrip()  # 清理右空白
s2 = '***hello,world!***'
s2.strip('*') #清除指定内容

collections模块

namedtuple: 生成可以使用名字来访问元素内容的tuple子类 tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:

p = (1, 2)
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
p.x
# 1
p.y
# 2

deque: 双端队列,可以快速的从另外一侧追加和推出对象

from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')
# 追加元素
q.appendleft('y')
# 左边添加元素

deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。

defaultdict: 默认字典,当引用key不存在,返回一个默认值

from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
dd['key1']

dd['key2']

OrderedDict:保持Key的顺序

od = OrderedDict()
od['z'] = 1
od['y'] = 2
od['x'] = 3
od.keys()

hash

可变的数据类型是不可以被hash 一个值可以hash那么说明这是一个不可变得数据类型

copy

深浅拷贝的作用: 1,减少内存的使用; 2,以后在做数据的清洗、修改或者入库的时候,对原数据进行复制一份,以防数据修改之后,找不到原数据。

对于不可变对象的深浅拷贝: 不可变对象类型,没有被拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是新创建一个对象,替换掉旧的而已; 一句话就是,不可变类型,不管是深拷贝还是浅拷贝,地址值和拷贝后的值都是一样的。

浅copy

alist=[1,2,3,["a","b"]]
b=alist
alist.append(5)
print (b)
#直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变
alist=[1,2,3,["a","b"]]
import copy
c=copy.copy(alist)
alist.append(5)

print (alist,c)
[1, 2, 3, ['a', 'b'], 5],[1, 2, 3, ['a', 'b']]
# copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变


alist[3]
alist[3].append('cccc')
print (alist,c)
# 里面的子对象被改变了

深copy

import copy
alist=[1,2,3,["a","b"]]
d=copy.deepcopy(alist)
alist[3].append("ccccc")

print (alist,d)
#  始终没有改变

字典

基础

# dic = {}
dictionary["lj"] = "18069" #或者用下面
dictionary1= {"lj":"18099"}
# 赋值

del dictionary["gd"]
# 删除key
dictionary.clear()
# 清空所有条目
dictionary = {"lj":"18099","gd":"hehehe","gg":"1199","aaa":"11"}
for key in sorted(dictionary.keys()):
    print (key,dictionary[key])
# sorted返回新副本排序keys,原数据不变

循环迭代

for k in dic.keys()
for k,v in dic.items()

for k in dic:
    print (k,dic(k))

合集

1.确定性(集合中的元素必须是确定的) 2.互异性(集合中的元素互不相同。例如:集合A={1,a},则a不能等于1) 3.无序性(集合中的元素没有先后之分),如集合{3,4,5}和{3,5,4}算作同一个集合。

基础

list_1 = set{2,4,6,8,9}
# set 语法

list_2 = [1,3,4,6,3,5,7]
#列表
list_2 = set(list_1)
#转集合类型

print ('交集',list_1 & list_2)
#list1与list2都有的 (交集)

print ('差集',list_1 - list_2)
##list1 有 list2没的

print ('对称差集',list_1 ^ list_2)
#取两边不重复的 (对称差集)

print ('并集',list_1 | list_2)
#list1和list2合集

常用方法

s.add(x)
增加元素

s.remove(x)
# 删除元素,如果不存在则引发 KeyError

s.s.discard(x)
# "s"中存在元素 x, 则删除

s.pop()
# 删除第一个

s.clear()
# 清空元素

数据处理:

join拼接方法

lists=['alex', 'steven', 'egon']
"_".join(lists)

'alex_steven_egon

切割列表

s = 'hello,world'
s.split(',')

['hello', 'world']

大小写

str.upper()
str.lower()
#字符串转大写;字符串转小写

流程控制

循环从大到小输出1 - 100

count = 101
for i in range (count):
    print(i)
print("for done")

count = 0
while count <100:
    count +=1
    print(count)

print("while done")

循环从小到大输出100 - 1

count = 101
for i in range(count,0,-1):
    print(i)
print("for done")

while count >1:
    count -=1
    print(count)
print("while done")

最大最小

li=[1, 3, 2, 7, 6, 23, 41, 243, 33, 85, 56]
max(li),min(li),sum(li)
# 最大,最小,求和

乘法表

number=1
print ("显示乘法表:")
for i in range(1,11):
    print  (number, "*",i,"=",number * i)

利用for循环和range输出9 * 9乘法表

print('\n'.join([ ' '.join([ "%d*%d=%2s" %(y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))

在不改变列表中数据排列结构的前提下,找出以下列表中最接近最大值和最小值的平均值 的数 li = [-100,1,3,2,7,6,120,121,140,23,411,99,243,33,85,56]

编码

简述 把Unicode和UTF-8关系

1.在计算机内存中统一使用Unicode编码·,当需要保存到硬盘或需要传输时,就转换为UTF-8编码 2.用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件

编码长度

字母: 字节数 : 1;编码:GBK 字节数 : 1;编码:UTF-8

中文汉字 字节数 : 2;编码:GB2312 字节数 : 2;编码:GBK 字节数 : 3;编码:UTF-8

编码转换

unicode >  s.encode("utf-8") > s.decode("utf-8") >  unicode
#  将python3默认的Unicode字符 通过encode编码为utf-8;通过decode 解码为unicode(万国码)

bin(10),oct(10),hex(10)
# 二进制,十进制,十六进制

练习题:

查找列表中元素,移除每个元素的空格,并查找以a或A开头并且以c结尾的所有元素

li = ["alec", " aric", "Alex", "Tony", "rain"]
tu = ("alec", " aric", "Alex", "Tony", "rain")
dic = {'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"}

文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数

apple 10 3
tesla 100000 1
mac 3000 3
lenovo 30000 3
chicken 10 3
with open('a.txt','r') as f:
    info = f.read()
    f.close()

f = info.split('\n')
count = 0
for line in f:
    line = line.split()
    line_count =int( line[1]) * int (line[2])
    count += line_count
print(count)

使用 while/for循环实现输出 2-3+4-5+6...+100的和



sum = 0
count = 1
while count <100:
    count = count + 1
    if count%2 !=0:
        sum -= count
    else:
        sum += count
print("2-3+4-5+6...+100=",sum )


num=0
count = 0
for  i in range (2,101):
    count += 1
    if (count % 2) == 0:
        #print(i)
        num -= i
    else:
        num += i
print("2-3+4-5+6...+100=",num)

求100以内的素数和

N=100
i=2
num=2
s=0
for i in range(2,100):
    for num in range(2,i):
        if (i%num==0):
            break
    else:
        s+=i
        print(i)
print(s)

在不改变列表中数据排列结构的前提下,找出以下列表中最接近最大值和最小值的平均值 的数li = [-100,1,3,2,7,6,120,121,140,23,411,99,243,33,85,56]

解题思路,找到最大值 ,找到最小值 ,求平均值 ,找到列表中离这个平均值 最近的值

li = [-100,1,3,2,7,6,120,121,140,23,411,99,243,33,85,56]
max_n = max(li)
min_n = min(li)
avg_n = (max_n + min_n)/2

print("最大数",max_n,"最小数",min_n)
print("平均数",avg_n)


avg_like = 0
for i in li:
    if abs(i - avg_n) < abs(avg_like - avg_n):
        avg_like = i
print('最接近平均值 的是',avg_like)

作业

登陆

_user = 'lj'
_passwd = '123456'

count = 0
while  count <3:

    count += 1
    username = str(input("Username:")).strip()
    password = str(input("Password:")).strip()

    if username == _user and password == _passwd:
        print("%s,欢迎登陆" % username)
        break
    else:
        pass

三级菜单

menu = {
    '北京':{
        '海淀':{
            '五道口':{
                'soho':{},
                '网易':{},
                'google':{}
            },
            '中关村':{
                '爱奇艺':{},
                '汽车之家':{},
                'youku':{},
            },
            '上地':{
                '百度':{},
            },
        },
        '昌平':{
            '沙河':{
                '老男孩':{},
                '北航':{},
            },
            '天通苑':{},
            '回龙观':{},
        },
        '朝阳':{},
        '东城':{},
    },
    '上海':{},
    '山东':{},
}

current_layer = menu
layers = []

Flag = True
while Flag:

    for line in current_layer:
        print (line)

    choose_input = input('>:').strip()
    if not  choose_input: continue

    if choose_input in current_layer:

        layers.append(current_layer) # 进入下一层,保存当前层
        #print(layers)
        current_layer = current_layer[choose_input] # 当前层


    elif choose_input == "B" or choose_input == "b":
        if  len(layers) == 0:  # pop不能删空列表,会报错
            print("已经是顶层了")
        else:
            current_layer = layers.pop()

    if choose_input == "q" or choose_input == "Q":
        exit("退出")

© 著作权归作者所有

共有 人打赏支持
以谁为师
粉丝 1
博文 54
码字总数 20674
作品 0
杭州
个人站长
私信 提问
分享老男孩自动化开发运维Python12期

本套教程共L33天,完整版!!! 目录: L001-老男孩教育-Python12期VIP视频-18节 0001-开课介绍.mp4 0002-同学互相介绍.mp4 0003-python简史介绍.mp4 0004-python3的新特性.mp4 0005-开发工具...

liming004
2018/06/28
0
0
初学者学习python2还是python3?

如果你是一个初学者,或者你以前接触过其他的编程语言,你可能不知道,在开始学习python的时候都会遇到一个比较让人很头疼的问题:版本问题!!是学习python2 还是学习 python3 ?这是非常让...

yunyingoldboy
2017/11/09
0
0
Python数据类型有哪些?学习python

Python 支持四种不同的数值类型,分别是整型、长整型、浮点型和复数,这些类型的数据有各自的特点,在使用过程中也可以进行类型转换,具体转换方法如下: int(x [,base ]) 将x转换为一个整数...

zhouzhou2018
2018/05/22
0
0
python全栈和python自动化课程的区别在哪?

老男孩算是国内组早的做python培训的机构了,下面小编对于python自动化课程及全栈课程做了一个总结,希望能帮到你们: python全栈开发: 适合人群:应届本科生,专科,及零基础学员 学习基础...

运维自动化
2017/04/25
0
0
2017年必看的免费linux视频及python视频资源合集

2017年必看的linux直播课程与linux在线课程汇总 腾讯课堂: Linux课程: 系列直播课程: 【免费】零基础Linux入门系统课程1(持续更新) https://ke.qq.com/course/202854 【免费】零基础lin...

运维自动化
2017/06/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
1
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部