廖雪峰老师系列课程 迅速过一遍 1

Posted ViviranZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了廖雪峰老师系列课程 迅速过一遍 1相关的知识,希望对你有一定的参考价值。

def pfff(x,n=2,*,name,clss):
    s=1
    while n>0:
        s=s*x
        n=n-1
    print(s,",the student is",name,"in class",clss)
    return

https://www.liaoxuefeng.com/wiki/1016959663602400/1017024645952992

2021/7/27 开始尽快

目录

综述:

 关于编码方式:

Python基础:

List&Tuple:

List

tuple

条件判断:

If语句:

 循环语句:

 dict&set:

dict

Set:

可变变量、关键词参数和命名关键词参数**highly important

可变变量

关键词变量:

​ 命名关键词参数:

函数:

递归函数:

高级特性

切片:

迭代:

列表生成:

生成器:

迭代器:


综述:

python的优势在于很完善的基础代码库,劣势在于(相比C)运行慢(但是实际并不影响)

win+R→cmd Enter→python(标志是>>>)

exit()退出

如果用VS code,则是需要切换目录

然后是输入输出:(双引号和单引号都可以用来表示字符串)

用命令行运行时:

 python以“#”开始注释,以缩进表达格式(因此复制粘贴后应当检查缩进),大小写敏感,转义符"\\"

name=input('your name is: ')
print(name,"Say yohoho~ \\\\n"r'\\n\\\\n')
print("Somalian Pirates We!")
print("Somalian",'Pirates',"We!")

 关于编码方式:

ASCII编码(大小写字母+数字)→各国加入本国语言字符(中国:GB2312)→国际上形成了Unicode(通常为两个字节)→为了简化生成UTF-8(字节数不一样,英文字母一个,汉字一般是三个有些四个)

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器,所以你看到很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。

print(ord('哈'))
print(chr(123456))

Python基础:

List&Tuple:

List

是最常用的变量形式,元素可以是字符串、数字、布尔值等

chrters=['Pirates',"We"]
print(chrters)
print(len(chrters))
print(chrters[0])
print(chrters[-1])
chrters.append("!")
print(chrters)
chrters.insert(0,"Somalian")
print(chrters)
chrters.pop(3)
print(chrters)
chrters[2]="You"
print(chrters)

 运行结果为:

tuple

相比list,tuple是不能进行增减修改操作的,也就是说applend、pop、insert这些函数均不能使用,强行使用显示:

 其优势在于可以保证tuple不会在之后被人篡改。仍然可以按照位置输出和得到长度。值得注意的是,如果是一个数字作为元素,小括号可能被认为是数学运算符,因此我们可以通过加一个逗号区分。(a=()是一个空tuple)

chrters=('Pirates',"We",1)
print(chrters)
print(len(chrters))
print(chrters[-1])
chch=(1,)
print(chch)

此外,如果把一个list作为tuple的一个元素,我们仍然可以修改list内部的元素(tuple只保证对应的list是不变的)

L = [
    ['Apple', 'Google', 'Microsoft'],
    ['Java', 'Python', 'Ruby', 'php'],
    ['Adam', 'Bart', 'Lisa']
]
# 打印Apple:
print(L[0][0])
# 打印Ruby:
print(L[1][2])
# 把Java变成C++:
L[1].insert(0,"C++")
print(L[1])

条件判断:

If语句:

注意缩进,每一步要加冒号。"elif"

a=int(input("your age is:"))
if a<=0 or a>=125:
    print("It is nonsense!")
elif a<=12:
    print("you are a child")
elif a<=18:
    print("you are a teenager")
else:
    print("you are an adult")

 循环语句:

a=("Somalian",'Pirates',"We","!")
for aa in a:
    if aa!='!':
        print("Say",aa,"!")
i=1
while i<=4:
    print("say i=",i)
    i=i+1

输出为:

 dict&set:

dict

区别于list建立序数和元素的一一对应,dict(全称dictionary)是利用键-值(key-value)对应来存储元素的。相比list,dict占用内存更大但是调用更快,是“用空间换时间”的目的。key是调用用到的,因此不能是可变的,可以是字符串(string)、数字、tuple但是不能是list。

dict={"Alice":'good','Bob':"Mif","Cindy":96}
print(dict["Alice"])
dict['David']='Howdy'
print(dict)
print(dict.get("Elsa"),"NOTHERE")
dict.pop("Bob")
print(dict)

 输出为:

 试试key:

# key=[1,2]
# dict[key]=1
key=(1,2)
dict[key]=1
print(dict)

注销的(尝试用list作为key)显示:

正常代码显示:

Set:

 

 函数:

https://docs.python.org/3/library/functions.html#abs

做了一个随机数猜猜猜的小游戏嘿嘿嘿

 还是挺好玩的蛤蛤蛤

 再完善下……

def my_guessfor5():
    n=input("in which edge: ")
    if n.isdigit()==0:
        print("Please enter an integer as edge!")
        return
    n=int(n)
    k=random.randint(0,n)
    t=input("How many times?: ")
    if t.isdigit()==0:
        print("Please enter an integer as times!")
        return
    t=int(t)
    tt=0
    pal=0
    while tt<t:
        pp=input("now guess!: ")
        if pp.isdigit()==0:
            print("Please enter an integer to guess!")
            continue
        pp=int(pp)
        if pp<k:
            print("It is too small.")
            tt=tt+1
        if pp>k:
            print("It is too large.")
            tt=tt+1
        if pp==k:
            print("Congratulations! You win after",tt+1,"times!")
            return
    if tt==t:
        print("I am sorry, you lost.")
    return

 输出是~

 来算个小数学欸

import math
def solvvve(a,b,c):
    if not (isinstance(a,(int,float))*isinstance(b,(int,float))*isinstance(c,(int,float))):
        print("Please enter numbers!")
        return
    a=float(a)
    b=float(b)
    c=float(c)
    dd=math.sqrt(b*b-4*a*c)
    x1=(-b+dd)/(2*a)
    x2=(-b-dd)/(2*a)
    return x1,x2

换一个小数学欸

def poww(x,n=2,b=0):
    s=1
    while n>0:
        s=s*x
        n=n-1
    s=s+b
    return s

输出来玩玩

注意,此时里面的n=2和b=0都是默认参数(如果用不着可以不修改)。默认参数必须设置为不变对象(否则用例如list的东西,如果在某一次用到了,之后可能会一直记住被改的样子)。

可变变量、关键词参数和命名关键词参数**highly important

可变变量

正常来说,我们输入的变量都是一定的(比如数字就是数字,字符串就是字符串)【必须参数和默认参数】。

然而,针对下面程序,如果我们只用number(而不是*number),

def calu(*number,**pw):
    s=0
    for num in number:
        s=s+num
    print("answer is",s,"the stu:",pw)

我们就需要以 cal([1,2])或者cal((1,2))输入tuple、list的形式调用函数。(否则会显示TypeError: calu() takes 1 positional argument but 2 were given)因此,我们想到用 *number来代替number,这样程序会默认把输入的一坨变成一个tuple输进去。(可以用cal(*(1,2))继续用tuple或者list为输入)

关键词变量:

**pw,输入一个dict,可以不输入,调用形式如:

命名关键词参数:

def pfff(x,n=2,*,name,clss):
    s=1
    while n>0:
        s=s*x
        n=n-1
    print(s,",the student is",name,"in class",clss)
    return

 输出check好几遍:

 如果把必须参数、默认参数、可变参数、命名关键词参数、关键词参数都写上(必须按照这个顺序),可以是:

def pfff(x,n=2,*numm,name,clss,**what):
    s=1
    while n>0:
        s=s*x
        n=n-1
    for num in numm:
        s=s+num
    print(s,",the student is",name,"in class",clss,"others:",what)
    return

输出一下试试:

 廖老师温馨提示:

函数:

递归函数:

def mutli(n,m):
    if m==1:
        return n
    else:
        return n+multi(n,m-1)
def move(n,a,b,c):
    if n == 1:
        print(a, '-->', c)
    if n>1:
        move(n-1,a,c,b)
        print(a, '-->', c)
        move(n-1,b,a,c)

高级特性

切片:

L=list(range(100))
LL=L[::10]
LLL=L[:10:2]
LLLL=L[-10::5]
print("L=",L,"LL=",LL,"LLL=",LLL,"LLLL=",LLLL)

迭代:

L=("Who","lives","in","a","pinapple","under","the","sea")
for i in L:
    print(i)

列表生成:

import sympy
l=[y for y in range(100) if sympy.isprime(y)]
print(l)

import os
l=[d for d in os.listdir(".")]
print(l)

这个for循环以短短一行代码生成列表的功能真的绝了。试了一个很经典的例子:

import numpy as np
L=np.random.randn(15)
l=[d for d in L if d>0]
ll=[d if d>0 else 0 for d in L]
print("L=",L,"\\n l=",l,"\\n ll=",ll)

 其中L是一个随机生成的有15个元素的列表,其分布符合以0为中心的正态分布。l提取出了其中所有大于0的项,ll是把L中小于零的项都划归到0.

 

生成器:

#生成斐波那契数列-循环版
nn=int(input("input:")) #需要用int()转化为数字
def fibb(N):
    i,a,b=1,1,1
    while i<N:
        a,b=b,a+b
        i=i+1
        yield a #需要在循环中yielda
    return 'success!yohoho~'#''表示输出的字符串
n=fibb(nn)
while True:
    try:
        t=next(n)
        print("new:",t)
    except StopIteration as e: #StopIteration捕捉错误用于输出
        print("output:",e.value)
        break #必须要加否则一直输出output

输出:

 杨辉三角:

#杨辉三角:输出每一行的参数
nn=int(input("input:"))
def yhsj(N):
    yield [1]
    n=2
    a=[1,1]
    while n<=N:
        b=[1]
        t=0
        while t<n-2:
            t=t+1#共进行n-2次
            b.append(a[t-1]+a[t])
        b.append(1)
        a=b
        n=n+1
        yield a
    return "END"
n=yhsj(nn)
while True:
    try:
        print("new:",next(n))
    except StopIteration as e:
        print("Output:",e.value)
        break

廖老师课堂作业:

    yield [1]
    L=[1,1]
    while True:
        yield L
        L=[L[i]+L[i+1] for i in range(len(L)-1)]#len([1,1])=2 range(2):0,1
        L.append(1)
        L.insert(0,1)

迭代器:

首先考虑iterable、iteration:

生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator

listdictstrIterable变成Iterator可以使用iter()函数:

from collections.abc import Iterable, Iterator
#L=123 #False F TypeError: 'int' object is not iterable
#L=[123] #True F T
#L=(123,) #True F T\\
L=(x*x for x in range(12)) #T T T
L=iter(L)
#print(isinstance(L,Iterable))
print(isinstance(L,Iterator))

 

以上是关于廖雪峰老师系列课程 迅速过一遍 1的主要内容,如果未能解决你的问题,请参考以下文章

廖雪峰python课程

git常用命令,参照廖雪峰老师的git教程

廖雪峰老师Python教程读后笔记

廖雪峰老师——Python入门( 函数 )

javaScript——廖雪峰老师学习笔记

廖雪峰老师——Python进阶( 函数式编程 )