蒟蒻的python 学习笔记 ——北京理工大学嵩天mooc(有时间就看就更新,尽量让笔记容易懂,蟹蟹各位大神不吝赐教)

前言

版权声明
本文受CC BY-NC-SA 4.0知识产权协议保护(署名 — 非商业性使用 — 相同方式共享)
除此以外,将本文任何内容用于其他用途时,须征得本文作者许可。
(可csdn私信)

笔记介绍
学习记录,蒟蒻一枚的,预计2个月内更完。

作者特点:
1.喜欢研究语法问题,可能有各种奇怪的想法,有的地方会尝试地很透彻(或者最后说我也不知道为什么qwq,向大神求教)
2.真的蒟蒻非常非常非常蒟蒻,能从萌新的角度,说萌新容易懂的话。个人喜欢讲大白话啦~~~
3.作者很萌新,发现错误,请访问的您不吝赐教,帮忙指出,蟹蟹!
4.作者喜欢人,很外向,喜欢温暖,喜欢朋友~
加油冲冲冲,让我们一起努力,共同进步叭!!! ** ^ _ ^ **

课一:python语言程序设计

课程链接:link

第一周:python 基本语法元素

1.1 程序设计基本方法

  • 和以前的c不一样,python 是脚本语言,使用解释器,逐条翻译
静态语言 脚本语言
翻译工具 编译器 ,先编译再运行 解释器,逐条翻译
举例 C python

1.2 python 环境配置

测试代码:

 print("hello")

r=25
area=3.1415*r*r
print(area)
print("{:.2f}".format(area))

import turtle
turtle.pensize(2)
turtle.circle(10)
turtle.circle(40)
turtle.circle(80)
turtle.circle(160)

from turtle import *
color('red','red')
begin_fill()
for i in range(5):
    fd(200)
    rt(144)

end_fill()

1.3 实例1:温度转换

'''hahaha'''
t=input("请输入带符号的温度")#注意用英文符号
#因为下面有格式错误,所以这里不print("转换后的温度是")
if t[-1] in ['f','F']:#如果最后一个(好像是)在这(f,F)之间
    C=(eval(t[0:-1])-32)/1.8
    #[0:-1]:除了最后一个以外eval:执行一个字符串表达式,并返回表达式的值。
    print("转换后的温度是{:.2f}C".format(C))#这个C就是前面定义的变量C,格式化输出
elif t[-1] in ['c','C']:
    F=1.8*eval(t[0:-1])+32
    print("转换后的温度是{:.2f}F".format(F))
else:
    print("格式错误")
    

1.用:分支
2.用elif不是else if
3.#用于注释
4.似乎直接处理字符串

1.4 python程序语法元素分析

  • 缩进
    python的缩进是严格明确的,表达层次关系。
    (缩进多或少一条真的会运行不了)
    程序内缩进长度一致。

  • 注释
    单行注释:

#。。。。。

多行注释:

'''。。。。
 。。。。。。。	。。
 。。。。注意英文单引号'''

注释,自己写,便于人阅读(c里面编译时视为空白)

  • 变量
    表示的称为:标识符
    命名:关联标识符的过程
    命名规则:
    字母、数字、下划线、汉字等组成(比c广)
    tip:区分大小写,不能数字开头,不能是保留字(如if,又叫关键字,防止冲突(c也是))
  • 保留字
    python自带的33个保留字,有固定的含义。
    不能做变量名
    (用IDLE的字体颜色可以区分,不用刻意记忆)
  • 数据类型
    即数据的类型
    用不同的数据形式,告诉计算机这是不同类型的数据
    1.字符串
    从0开始排序。
    索引:不仅可以正向递增,0,1,2…
    还可以反向递减,…-3,-2,-1
    取法:不仅有t[0],t[-1]索引
    还有t[0:-1]切片,
    t[a:b]表示从a开始到b之前,a<=范围<b,a,b不需要同号,但是实际位置一定要a在b前(否则运行时越界)。
    表示方法:字符串类型可以" "或’ ‘,没有区别,和c不一样(但是’ "不行)
    2.数字类型
    包括整数,浮点数
    3.列表
    由若干数据组成的有序数列
    表示方法:[ ]表示,中间 , 分隔
    *使用 in 判断一个元素是否在列表中
  • 语句
    赋值语句就那样
    分支语句中,
    提醒一下if,elif,else 判断后的:不能省
  • 函数
    1.输入函数
    <变量>= input(<提示字符串>)
    2.输出函数
    print(<输出字符串>)
    *可以格式化如:{:.2f}对应.format( C ),把C转为.2f格式,两位有效小数,输出
    {}是一个插槽,会把format里面的打进去
    {}可以有格式,{:.2f}这样的(整数也会多了两个0)
    注意:插槽要和format里提供的变量个数一样
    *其中,变成‘ ’:分隔符sep,可以最后sep=’…‘改
    最后\n:结束符end,可以最后end=’…‘改
    (不必先sep后end)
    3.评估函数
    eval(<字符串>)
    去引号,字符串变为语句,之后用python语句的方式执行
    *纠错:unexpected indent :行首不能多空格
    invalid syntax:错在一对的符号没有用好,除了缺了一个,"…"…"…“是不行的,要用”…’…’…"区分

1.5 练习与测验注意点

1.温度转换

  • : 容易掉,if / elif / else 后的 : ,{:.2f}的:都掉了。。
  • if / elif / else : 后可直接写话,不用换行也可以

2.数字形式转换

template = "零一二三四五六七八九"

s = input()
for c in s:
    print(template[eval(c)], end="")
  • python中循环,for c in s:
    不用设后才用,直接可以凭空弄出一个c,意思是从头到尾充当每一个s中的字符
  • print(… , end="~") 的意思是,每次输出的最后输出~

3.温度转换2

  • t[1:],可以表示字符串除首字符外的所有字符。
    t[a:],可以表示字符串a号之后(包括)的所有字符
    t[:a],可以表示字符串a号之前的(不包括)的所有字符
  • 这样的表达形式也是成立的
 if t[0] == 'F':
  • 错误记录:EOL while scanning string literal——字符串以 \ 结尾 或者字符串缺少引号
print("F{:.2f}".format(eval(t[1:])*1.8+32)")

(实际上是最后多打了个 " )

4.货币转换

  • CurStr[:3] == “RMB” 也可以,python可以直接比较字符串
  • {:.2f}这次又写错了,这次写成2.f了,报Format specifier missing precision
  • 发现:不能两句话同一行只留空格
  • 发现:十进制非0整数不能以0开头。否则出现错误:invalid token

5.Hello World的条件输出

  • int(~)能把 ~转化为int 型
  • for 语言不通,不会用。。。

6.M OP N

  • input() (别掉了())只会在回车换行时停止,而不会在空格停止(和c不一样)这里一次即可
  • python只是要求缩进 , 对于 1 + 1 这样的不要求靠在一起
    除了{:.2f},别的都可以加空格
    {:_.2f}这样加空格,输出前会多一个空格,且只能多一个空格
    这个地方加数字无显示,加符号错误
    其他地方加空格也错误
    最开头加0,通过,无效果
    .af表示保留a位有效数字
print ("{: .2f}" . format ( eval ( input ( ) ) ) ) 


第二周:python基本图形绘制

2.1 深入理解python语言

计算机语言 关注内容
c 指针,内存,数据类型
Java 对象,跨平台,运行时
c++ 对象,多态,继承
python 编程逻辑,第三方库

*确实比c短多了,还有共享的计算生态
“人生苦短,我用python”

2.2 实例2:python 蟒蛇绘制

实例代码:

import turtle#海龟库
turtle.setup(650,350,200,200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)
for i in range(4):
    turtle.circle(40,80)
    turtle.circle(-40,80)
turtle.circle(40,80/2)
turtle.fd(40)
turtle.circle(16,180)
turtle.fd(40*2/3)
turtle.done()

*非常惊艳,在c的ACLLib图形绘制时,准备工作还那么麻烦,操作的也只是基本几何图形。而这里已经栩栩如生画出了蟒蛇!

2.3 模块1:turtle库的使用

1. 概述

  • turtle库:是turtle绘图体系的python实现
  • turtle绘图体系:1969年(就?)诞生了,主要用于程序设计入门
  • python语言的标准库之一
    *可以理解为真的有一个turtle在爬

2. 库

  • 标准库:随解释器直接安装到操作系统的功能模块
  • 第三方库:需要安装才能使用的功能模块
  • 库,包,模块,统称模块

3 .turtle的绘图窗体

  • 原点:左上角
  • 单位:像素
    (和acllib一样)
  • 安放窗口的函数:
    turtle.setup(窗口长度,窗口宽度,与左侧距离,与上侧距离)
    *这个数值都要合理,不然界面就会消失,在状态栏里看也是一片空白没有蟒蛇
    如下图所示,可看出窗口的左上角是边框的左上角
    绘图窗体
    可省略后两个定位的,省去的,则居中
    也可不使用setup函数,控制窗口大小、位置时才用
    *这个的意思不是随机大小,而是默认大小(一个正方形),当然,居中

4 . turtle的空间坐标体系

  • 绝对坐标
    介绍:以窗口中心为原点的,平面直角坐标系
    相关函数:turtle.goto(x,y)
    ——无论turtle在哪里,都去到( x , y )处
  • 海龟坐标
    介绍:以海龟为原点,前后左右的坐标系
    相关函数:
    turtle.fd(d)
    ——向前走d
    turtle.bk(d)
    ——向后走d
    turtle.circle(r,angle)
    ——以海龟左侧的某一个点为圆心(半径r),走曲线(角度angle)
    *r为负数则为右侧了哈哈哈

5. turtle角度坐标体系

  • 绝对角度
    介绍:如下表示各角度的数值,正为逆时针转动得出,负数为顺时针转动得出在这里插入图片描述
    相关函数:
    turtle.seth(angle)
    ——改变海龟方向到以上的angle(但不行进)
  • 相对角度
    turtle.left(angle)
    ——海龟向左侧转angle度
    turtle.right(angle)
    ——海龟向右侧转angle度

6. RGB色彩体系

red,green,blue三通道
每色取值范围为0~255整数或0 ~ 1 小数,调色
相关函数:
turtle.colormode(mode)
——切换color的模式,
mode=1.0为小数模式,255为整数模式,默认为小数模式
举例:

turtle.colormode(255)
turtle.color(211,22,11)

如此用法

当然也可以用默认的

turtle.color("blue")

这里面是个字符串
发现:color()和pencolor()一模一样,运行没有区别

2.4 turtle程序语法元素分析

1. 库引用和import

  • 库引用:扩充python功能的方式
    *如同c的头文件
  • 三种方法:
  1. import <库名>
    +<库名>.<函数名>(<函数参数>)
    ——繁琐,不重名
  2. from <库名> import *——引用整个库/
    from <库名> import <函数名>——引用一个函数
    +<函数名>(<函数参数>)
    ——不繁琐,可能重名
  3. import <库名> as <库别名>
    +<库别名>.<函数名>(<函数参数>)
    ——不繁琐,不重名,好
    *三种情况不能混用,不然说如“turtle未知什么的”

2. turtle 画笔控制函数

画笔操作后一直有效(直到下一次修改),一般成对出现
1.turtle.penup()
别名:turtle.pu()
——抬起画笔,海龟在飞行
*别名相当于c的 #define penup pu ,只是替换名字而已
2. turtle.pendown()
别名:turtle.pd()
——落下画笔,海龟在爬行
3.turtle.pensize(width)
别名:turtle.width(width)
——画笔宽度,海龟的腰围
4. turtle.pencolor(color)
——画笔颜色,海龟在涂装
其中(color)有三种形式:

形式 实例
颜色字符串,小写字母的 (“purple”)
RGB的小数值 (0.63,0.13,0.94)
RGB的元组值 ((0.63,0.13,0.94))

——切换了colormode后也可以用0~255如此调色,不止小数才可以

3. turtle的运动控制函数

(讲过了,注意一点负数)
turtle.fd(d)
——向前走d,负为向后
turtle.circle(r,angle)
——以海龟左侧的(负为右)某一个点为圆心(半径r),走曲线(角度angle)

4. turtle的方向控制函数

(也讲过了,,,,,,)
turtle.setheading(angle)
别名:turtle.seth(angle)
——改变海龟方向到绝对角度的angle位置

turtle.left(angle)
——海龟向左侧转angle度
turtle.right(angle)
——海龟向右侧转angle度

注意方向控制函数都是不行进,运动控制函数才是。
并且一句一句执行下,也不可能让运动控制函数中途改变既定方向。(可以循环什么的)

5. 循环语句与range()函数

  1. 关于for i in range(N): (小心掉了 : )
    相当于for i in [1,2,3,4]
for <变量> in range(<参数>):#变量会从 0 到 参数-1 共 参数 次
		<被循环执行的语句>#这段缩进的代码将被循环执行
  1. 关于range()
    用于产生循环计数序列
    range(N)相当于[0,1,2,…,N-1]
    range(M,N)相当于[M,M+1,M+2,…,N-1]
    左包括右不包括

6. 分析绘制

多了一个
turtle.done()
——如果描写方法是文件式的,
绘制程序完成后不自动退出,而是手动关闭退出
能留住窗口
*如同system(“pause”)

2.5 由于往期课程没有公布练习,一段时间放题后再补全

默写的实例代码:

import turtle as t
t.setup(650,350,200,200)
t.pu()
t.fd(-250)
t.pensize(25)
t.pencolor("blue")
t.pd()
t.seth(-40)
for i in range(4):
    t.circle(40,80)
    t.circle(-40,80)
t.circle(40,80/2)
t.fd(40)
t.circle(15,180)
t.fd(30)

第三周:

3.1数字类型及操作

1. 整数类型

优点:可正可负,无范围限制

进制 前缀表示
十进制 无前缀
二进制 0b,0B
八进制 0o,0O
十六进制 0x,0X

2. 浮点数类型

  • 取值范围:-10e308 ~ 10e308
  • 精度数量级:10e(-16)
    注意:存在不确定位数(因为二进制存储与十进制实际值的差别)
  • 解决不确定位数的round函数:比较时,保留小数点后若干位四舍五入
    如:
    (也说明判断句的输出是True和False)
>>> round(0.1+0.2,2)==0.3
True
>>> 0.1+0.2==0.3
False
  • 科学计数法x*10y写为 xey ,属于浮点数,注意y只能是整数

3. 复数类型

  • 只有py有复数类型
  • 表示:a+bj (J也可以)或者 complex(a,b),效果一样
    注意:b必须要有,为1也不能省
  • 对于复数z:
    实部:z.real
    虚部:z.imag

4. 数值运算操作符

操作符及使用 描述
x+y
x-y
x*y
x/y 除(小数结果)
x//y 除(结果取整数丢小数)
+x x本身
-y y的负值
x%y 取余
x**y x^y
x+=y x=x+y
x-=y x=x-y
x*=y x=x*y
x/=y x=x/y
x//=y x=x//y
x%=y x=x%y
x**=y x=x^y
  • 类型之间可混合运算,生成结果是最“宽”类型:
    整数 -> 浮点数 -> 复数
    (.0也算小数)

5. 数值运算函数

函数及使用 描述
abs(x) x的绝对值
divmod(x,y) 商余:输出 ( x//y , x%y )
pow(x,y[,z]) 幂余:没有z,不取余,x** y;有z,结果对z取余,(x**y)%z
round(x[,d]) x的约等于(四舍五入),d为保留d位小数(可负,-1为保留至10位)(结果无法增加原本小数位数),默认保留整数即d=0
max(x1,x2,…,xn) 最大值,这n个数中的(至少2个,不可比较复数,下同)
min(x1,x2,…,xn) 最小值,这n个数中的
int(x) 若x为字符串,要求eval(x)为整数(否则错),先进行eval()再操作;若x为小数,转换为整数;若x为整数,保留原样
float(x) 若x为字符串,先进行eval()再操作;若x为整数,转换为小数;若x为小数,保留原样
complex(x[,y]) 没y:将x变为复数,增加虚数部分,为x+0j;有y:表示x+yj
  • […]表示其中参数可省略

3.2 实例3:天天向上的力量

第一次用函数

def Day(df):#定义函数的方法,注意:
#注意缩进一格
    s=1
    for i in range(365):
        if i%7 in [6,0]:
            s*=0.99
        else:
            s*=(1+df)
    return s#返回值
df =0.01#无需main()这样的。注意初始值不能太大了
while Day(df)<37.78:#while的使用
    df+=0.001
    #print("{:3f}".format(df))(调试用)
print("{:3f}".format(df))

同时这个问题非常有哲理启发:
GRIT,坚毅,对长期目标的持续激情及持久耐力
GRIT,是获得成功的最重要的因素之一,牢记天天向上的力量

3.3 字符串类型及操作

暂时搞acm,先记录老师的笔记

关于if else

  • 紧凑:a=(若对了)if(判断)else(若错了)
  • pass:
    等于跳过,有一点像continue,但是continue只用于循环,pass用于分支结构。
    c语言没有pass,continue也不能用于分支,python有continue。
    python中什么都不干必须要pass,和continue不同

关于交换ab

只要

a,b=b,a

不需要弄一个新的变量,不用考虑顺序

关于字符串

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关于函数

go=0.011
def f(go):
    b=1
    for i in range(365):
        if i%7 in [0,6]:
            b-=0.01*b
        else:
            b+=b*go
    return b
a=1
for i in range(365):
   a+=0.01*a
while(f(go)<a):
    go+=0.001
print("工作日的努力参数是: {:.3f}".format(go))

1.有return
2.有参数,也可全局,但是全局的话不能变值

关于循环

1.range(begin,end,sep):从begin(省略为0)到end,每次走sep步(省略为1)
2.break和continue
和c语言一样
3.循环的else:
若循环没有break,正常结束循环,就进入else

for x in range(1,10):
    if x==11:
        break
    print(x,end=' ')
else :
    print(2)
  #输出1 2 3 4 5 6 7 8 9 2

但是elif无效

猜你喜欢

转载自blog.csdn.net/qq_51945248/article/details/114367033
今日推荐