C基础_Python_基本常用语法快速学习

文章目录

  • 变量
  • 整数int
  • 浮点数
  • 字符串
  • 字节串
  • 输入
  • 输出
  • 格式化输出
  • 变量 比较运算符 is ==
  • string处理函数
  • 常用函数
  • 序列
    • list
    • 元组
    • 字典
    • 集合
  • 不可变类型 可变类型
  • 复杂数据类型
  • 控制流
  • 函数
  • 基本扩展模块
    • datetime
    • calendar
    • time
    • math,cmath,random
    • 对象持久化
    • 文件
  • Class
    • sort
    • 继承
  • 异常
  • 推导式、生成器、生成器函数
  • PIL 库

Python 是弱类型的语言_
读懂手册所需的知识:
https://blog.csdn.net/Dontla/article/details/101722486

变量

>>> num = 10
>>> type(num)
<class 'int'>

n1,n2="ds",[1,2]


>>> num = 15.8
>>> type(num)
<class 'float'>

>>> num = 20 + 15j
>>> type(num)
<class 'complex'>

>>> type(3*15.6)
<class 'float'>

整数int

1.自动大整数
2.2/8/16进制 0b/0o/0x
3.数字分隔符_(只起分割作用)

浮点数

E/e ——10为底

f1 = 12.5
print("f1Value: ", f1)
print("f1Type: ", type(f1))
f2 = 0.34557808421257003
print("f2Value: ", f2)
print("f2Type: ", type(f2))
f3 = 0.0000000000000000000000000847
print("f3Value: ", f3)
print("f3Type: ", type(f3))
f4 = 345679745132456787324523453.45006
print("f4Value: ", f4)
print("f4Type: ", type(f4))
f5 = 12e4
print("f5Value: ", f5)
print("f5Type: ", type(f5))
f6 = 12.3 * 0.1
print("f6Value: ", f6)
print("f6Type: ", type(f6))

字符串

1.“字符串” ‘字符串’ 转义字符
2.字符串的换行 /
3.’’’ 原样输出 包括空格 换行 ‘’’——换行注释写法,单行注释写法#
4.原始字符串

str=“string1”    “string2”  
str=r"原始字符串" #转义字符串无需转义,有坑对于\'
print(str) #两个字符串写同一行会自动拼接,中间空格不会在字符串内容里。

字节串

string ——》bytes
bytes——》 string

bool

输入

a=input("提示信息") 返回值str 所以input().某个函数() 其实是str.function()
int(string) 将字符串转换成 int 类型;
float(string) 将字符串转换成 float 类型;
bool(string) 将字符串转换成 bool 类型。

input().split() 返回列表
#读入 1 2 3 4
alist=list(map(int,input().split())) # int是个函数
# map(lambda x:int(x),input("请输入两个数:").split())


输出

print(value,…,sep=’’,end=’\n’,file=sys.stdout,flush=False)

#同时输出多个变量和字符串,指定分隔符
print("读者名:" ,user_name,"年龄:",user_age,sep='|')

#设置end 参数,指定输出之后不再换行
print(40,'\t',end="")
print(5O,'\t',end="")

#字符串
str1=str(8.0)
print"sds"+str1)

#文件
f = open("demo.txt","w")#打开文件以便写入
print('沧海月明珠有泪',file=f)
print('蓝回日暖玉生烟',file=f)
f.close()

格式化输出

age = 8
print("C语言中文网已经%d岁了!" % age)

#多个占位符
name = "C"
age = 8
url = "http://c.biancheng.net/"
print("%s%d%s" % (name, age, url))

#指定宽度 不足补   0/空格
#指定 小数位数 %.xf
#指定 正数带+号

转义字符
\0dd
\xhh——此能够完全标志128个ASCII

#可视字符可以由string表示,重点在
str1 = "Oct: \061\062\063" #123
str2 = "Hex: \x31\x32\x33\x78\x79\x7A"#123xyz
print(str1)
print(str2)

运算
/ 除法 //整除 %余 **幂
位运算

变量 比较运算符 is ==

import time  #引入time模块
#体会标签语言含义
t1 = time.gmtime() # gmtime()用来获取当前时间
t2 =  time.gmtime()
t3=t2
print(t1 == t2)  #输出True
print(t1 is t2)  #输出False
print(t3 is t2)  #输出False
t1=9
t2=9
print(t1 == t2) #输出True
print(t1 is t2) #输出False
#给内存命名

逻辑运算
and or not 规则与c一样,and左边false,就不做右边

三目运算符

if a>b:
    max = a;
else:
    max = b;
# Python 提供了一种更加简洁的写法,如下所示:
max = a if a>b else b

string处理函数

https://www.w3school.com.cn/python/python_strings.asp
http://c.biancheng.net/python/str_method/

常用函数

str.split(" ") #z
print(round(a,4))

import math
a=4
math.sqrt(a)

序列

str="C语言中文网"
print(str[0],"==",str[-6])
print(str[5],"==",str[-1])

#切片 左闭右开
str="C语言中文网"
#取索引区间为[0,2]之间(不包括索引2处的字符)的字符串
print(str[:2])
#隔 1 个字符取一个字符,区间是整个字符串
print(str[::2])
#取整个字符串,此时 [] 中只需一个冒号即可
print(str[:])

#加法 乘法
str="c.biancheng.net"
print("C语言"+"中文网:"+str)

str="C语言中文网"
print(str*3)

list = [None]*5#乘法 用于 初始化
print(list)

#关键字in 
str="c.biancheng.net"
print('c'in str)

序列内置函数

list

使用索引访问列表元素:
listname[i]
增删查改
使用+会生成一个新的列表,原有的列表不会被改变

# 创建一空list
alist=[]
alist=list()
# 从命令行 读入一个序列

#增
alist + blist #返回新的new出来
listname.append(obj) #把list、元组视为一个整体,改变原列表
listname.extend(obj) #会把list、元组元素加到后面,,改变原列表
listname.insert(index , obj)  #index 从index处替换,其他往后移
nums = [40, 36, 89, 2, 36, 100, 7]#在4插入元素
nums[4: 4] = [-77, -52.5, 999]#见 改
#删
del intlist #删除list ,一般不用做。自动回收

del listname[index]#删除index处元素
listname.pop(index)#删除index处元素 对应相反.append(obj)
listname.remove(obj)#删除第一个和指定值相同的元素,否则会引发 ValueError

listname.clear() # 删除列表所有元素


del listname[start : end] #删除一段连续的元素
#改
listname[index]=obj #改一个

#把某段 替换成 obj
nums = [40, 36, 89, 2, 36, 100, 7]
nums[1: 4] = [45.25, -77, -52.5]#修改第 1~4 个元素的值(不包括第4个元素)
s = list("Hello")
s[2:4] = "XYZ"# 替换字符串

nums = [40, 36, 89, 2, 36, 100, 7]
#步长为2,为第1、3、5个元素赋值
nums[1: 6: 2] = [0.025, -99, 20.5]
print(nums)
#查
listname.index(obj, start, end) #在[start, end)查找obj返回index,找不到ValueERROT信息
listname.count(obj) # 统计出现个数, count() 返回 0,就表示列表中不存在该元素,所以 count() 也可以用来判断列表中的某个元素是否存在。
obj in obj 
#排序——改变自身
list.reverse() #list本身逆序(下标)
list.reversed()#返回一个新的list
list.sort()#从小打大
list.sort(reverse=True)#从大到小

元组

不可变类型 :不能改,可 del 整个 ,+ 合并生成新的元组

字典

映射,list的索引是自然数,字典是key
key——元组(场景:坐标)、字符串、浮点数整数
value——随意

集合

快速删除字典、元组重复项
判断元素是否在里面,

不可变类型 可变类型

不可变类型:字符串(返回都是新的串),元组(不能增删改),数值、逻辑、复数

可变类型:列表、字典、集合

列表嵌套,改变一个元素 注意。

复杂数据类型

列表嵌套:alist[][]

控制流

顺序结构、条件分支、循环(for\while)
ctrl+c 强制中断
if :
pass

while :

else:

for a in range(5):
    print(a)

alist=[1,2,3,4]
for a in alist:
    print(a)

adict={
     "w":1,"k":2}
for a in adict:
    print(a,adict[a])

for a,b in adict.items():
    print(a,b)
    list(range(10))

del删除的是变量,而不是数据。

函数

global n ——在函数内申明这个就是函数外的那个变量
功能类似引用(指针)

package-module-code(def)

返回值 多个

#空函数 函数体还未写,但是不写是会报错的
def sample(n_samples):
    pass
 '''
该处的 pass 便是占据一个位置,因为如果定义一个空函数程序会报错,当你没有想好函数的内容是可以用 pass 填充,使程序可以正常运行。
'''
def num():
    a=1
    b=2
    return a,b
gl_a,gl_b=num() # 返回的是元组
print(gl_a)
print(gl_b)

#map() 函数_把列表每一项处理 不用写循环了
num=[1,2,3,4]
alist=[2,3,4,5]
def mul3(a):
    return a*2
print(list(map(mul3,num)))

def atob(a,b):
    return a+1.0/b
print(list(map(atob,num,alist)))

#map()结合匿名函数 函数只有一条处理语句 用lambda
print(list(map(lambda  a:a*3,num)))
print(list(map(lambda  a,b:a+1.0/b,num,alist)))

基本扩展模块

datetime

https://www.cnblogs.com/huzhe123/p/9308057.html

import datetime
print(datetime.date.today()) #日期
print(datetime.date.today().strftime("%Y-%m-%d %H:%M:%S"))#格式化
print(datetime.datetime.now()) #当前时间
print(datetime.datetime.now().isoformat()) #国际标准 有固定宽度,打印出来自动对齐

#时间戳——数字记录秒数,解决00(为了节省内存)是1900 or 2000,但是32位机器有限 到2038年溢出
print(datetime.date.today().timetuple()) #元组

a=time.mktime(datetime.date.today().timetuple())
datetime.date.fromtimestamp(a) #把时间戳转化为日期

#时间加减法 无加法
today=datetime.datetime.now()
yesterday=today-datetime.timedelta(days=1)# hours=1

calendar

import calendar
#打印 月日历
print(calendar.month(2020,4))
calendar.prmonth(2020,4) #直接打印
#打印 年历
print(calendar.calendar(2020))
calendar.prcal(2020) #直接打印

#日历有关计算
calendar.monthcalendar(2020,4) #返回嵌套列表 ,打印观察

calendar.isleap(2020) #判断润年

calendar.monthrange(2020,4)#返回二元组,从周几开始(0-周一),共有多少天

calendar.weekday(2020,4,20)#返回周几

time

import time
#时间戳的用处——中间代码运行多少秒 模板
t1=time.time()
a=0
n=10
for i in range(n):
    a+=i
print(a)
t2=time.time()
print(t2-t1)
# end

#获取当前时间
print(time.asctime())
print(time.ctime())

t=(2020,4,20,9,15,10,0,0,0)# 元组
print(time.asctime(t))

t=time.localtime()#利用时间索引获取时间信息 C语言
print(t)
year=t[0]

#让程序停一会
for x in range(3):
    print(x)
    t1=time.time()
    time.sleep(1)
    t2=time.time()
    print(t2-t1)

math,cmath,random

math,cmath
https://www.runoob.com/python/python-numbers.html

import random

a=random.random() #[0,1) 实数
b=random.uniform(1.0,2,0) #指定范围随机浮点数
c=random.randint(1,2)# [1,2]内整数
# 从 1-100 中选取一个奇数
print ("randrange(1,100, 2) : ", random.randrange(1, 100, 2))

#序列
colors=['red','yellow','blue']
random.choice(colors) #指定序列随机选择
random.sample(colors,2) #随机采样,个数
random.shuffle(colors)#可变序列所有的元素随机排序

对象持久化

# 对象持久化——对象退出程序后,仍在文件里
import pickle,dbm,shelve
#shelve 简单数据库 实现程序与程序之间的数据共享
d=shelve.open(filename)
#可读可写
d[key]=data
value=d[key]
del d[key]
#关闭,正常保存
d.close()

文件

# file 数据持久化最简单的类型 字节流——按字节读写

'''
mode第一个字母 str
r,w_读 写
x 文件不存在,创建并写文件
a 文件末尾追写内容
+ 读写
第二个参数
t文本类型
b二进制文件
'''
#文件写、读
f=open("my.txt","w")
f.write("he\n")
f.writelines(["apple\n","pie\n"])
f.close()
f=open("my.txt","r")
a=f.readlines()#读所有行f.readline()读一行
print(a)
f.close() #真正写到到硬盘。内存写到外存 速度差别,内存开辟缓冲区

#文件关闭——使用上下文管理器
with open('my.txt','rt') as myfile:
    myfile.read()
    #缩进代码块执行完后自动 file.close

#结构化文本文件 CSV 纯文本文件,都是字符串,以,分割

#结构化文件PDF

#结构化文件EXCEL

Class

# 空类 不报错
class Empty:
    pass

# 构造一个类
class TheFirstDemo:
	#初始化 ——构造函数 不用给self传参 不写此函数会默认添加
    def __init__(self):
        print("调用构造方法")
    # 下面定义了一个类属性
    add = 'http://c.biancheng.net'
    # 下面定义了一个say方法
    def say(self, content):
        print(content)
# 调用类 与c++一样


# 构造 析构
from os.path import join

class FileObject:
    '''给File进行包装确认在删除时 文件流 关闭'''
    def __init__(self,filepath='~',filename='sample.txt'):
        #读写模式打开文件
        self.file  = open(join(filepath,filename),'r+')

    def __del__(self):
        self.file.close()
        del self.file
        
# 类定义中的特殊方法
class Force: #力
    def __init__(self,x,y):
        self.fx,self.fy=x,y
    def show(self):
        print("Force<%s,%s>"%(self.fx,self.fy))

    def add(self,force2):
        x=self.fx+force2.fx
        y=self.fy+force2.fy
        return Force(x,y ) #c++ 不能返回class本身对象,因为还没构造完成

# 算术运算 反运算  重载  
    __add__=add
    #自动转换为字符串
    def __str__(self):
        return "F<%s,%s>"%(self.fx,self.fy)
    def __mul__(self,n):
        x,y=self.fx*n,self.fy*n
        return Force(x,y)
    def __eq__(self,force2):
        return (self.fx==force2.fx and self.fy==force2.fy)
    #还有__len__,
f1=Force(2,2)
f2=Force(2,2)
f3=f1+f2
print("Fadd=%s"%f3)
f3=f1*4.5
print("Fmul=%s"%f3)
print("%s==%s?->%s"%(f1,f2,f1==f2))



sort

# 列表排序方法sort() 元素数据类型必须相同
num=[2,34,1,4]
name=['a','sd','sda',]
num.sort() #升序
num.sort(reverse=True) #降序
sorted_name=sorted(name) #不改变原列表
''' 用了特殊方法 __lt__'''
class Student:
    def __init__(self,name,grade):
        self.name,self.grade=name,grade

    def __lt__(self,other):
         return self.grade>other.grade
    def __str__(self):
        return "(%s,%d)"%(self.name,self.grade)
    __repr__=__str__


s=list()
s.append(Student("a" ,80))
s.append(Student("b",70))
s.append(Student("c",99))
s.sort()
print(s)

继承

# class继承 代码复用 减少copy paste
# 重写 父类 方法。覆盖执行
# 覆盖执行,仍要执行父类方法。 比如:super().__init__(name)
class Car:
    def __init__(self,name):
        self.name=name 
        self.remain_mile=0
#self 绑定 实例
#实例名.fuc(参数)等价于 类名.fuc(实例名,参数) 

异常

# 错误处理
#SyntaxError 语法错误 indexError 下标错误 TypeERROR——类型错误
#NameError 访问变量不存在 KeyERROR——字典key不存在 AttributeError_未知错误
# 捕捉错误 控制流程
try:
    print('try...')
    r=10/'xyz'
    print('result:',r)
except   TypeError  as e:
    print("TypeError",e)
except ZeroDivisionError as e:
    print("ZeroDivision:",e)
else:
    print('no error!')
finally:#无论是否出错都执行
    print("finally...")
print('End')

推导式、生成器、生成器函数

可用于初始化list、set、dict

# 推导式 迭代器——容器(右属于左) 数据结构
#基本语法
#列表、字典表达式 in <可迭代对象> if <逻辑条件>
[x*x for x in range(10)]
{
     'K%d'%x:x**3 for x in range (10)}
{
     x+y for x  in range(10) for y in range(x)}
[x+y for x  in range(10) for y in range(x)]

[x*x for x in range(10) if x%2==0]
[x.upper() for x in [1,"abc","xyz",True] if isinstance(x,str)]

#生成器推导式 (in <可迭代对象> if <逻辑条件>)
#返回 生成器对象——可迭代对象
agen=(x*x for x in range(10))
for n in agen:
    print(n)
set(agen)
tuple(agen)

#生成器 创建数据序列对象 像数组初始化 只用在调用 agen时候,才生成
#实现更复杂的生成器——生成器函数 yield 协同函数
def even_number(max):
    n=0
    while n<max :
        yield n
        n+=2
for i in even_number(10):
    print(i)

PIL 库

# 图像处理库
#Pillow库   PIL库 一个东西
from PIL import Image,ImageFilter,ImageDraw,ImageFont
# 不能 直接import PIL,Image,...也是库 
#image.open(<路径+图像名+文件格式>)

#图像操作——缩略图
#thumbnail(size,Image.ANTIALIAS)

im=Image.open("test.jpg")    
#应用模糊滤镜
im2=im.filter(ImageFilter.BLUR)
im2.save('blur.jpg','jpeg')
#缩略图
im2.thumbnail((100,200),Image.ANTIALIAS)
im2.save('1.jpg','jpeg')
#添加文字
font=ImageFont.truetype('simsun.ttc',100) #字体宋体 字体大小
draw=ImageDraw.Draw(im)
draw.text((100,10),'SOUL',(255,0,0),font=font)
im.save("hero.jpg",'jpeg')

#PIL生成验证码
import random
def rndChar():#随机字母
     return chr(random.randint(65,90))

def rndColor():#随机颜色1 背景
    return ( random.randint(64,255),\
             random.randint(64,255),\
             random.randint(64,255) )

def rndColor2():#随机颜色2 文字
    return ( random.randint(64,255),\
             random.randint(64,255),\
             random.randint(64,255) )

# 240 * 60
width =60*4
height=60
image=Image.new('RGB',(width,height),(255,255,255))
font=ImageFont.truetype('arial.ttf',36)#创建Font对象
draw=ImageDraw.Draw(image)#draw对象
for x in range(width):#填充每个像素
    for y in range(height):
        draw.point((x,y),fill=rndColor())

for t in range(4):#输出文字
    draw.text((60*t+10,10),rndChar(),font=font,fill=rndColor2())

image=image.filter(ImageFilter.BLUR)
image.save('code.jpg','jpeg')

python基本参考学习:

1.陈斌MOOC《Python语言基础与应用》
2.http://c.biancheng.net/view/4228.html
3.https://www.w3school.com.cn/python/python_strings.asp
4.https://www.runoob.com/python/python-numbers.html

你可能感兴趣的:(python)