安装及配置

  • 使用的编程地址:编程地址
  • python基础相关文件安装:
链接:https://pan.baidu.com/s/1ZAhPIJ4_KAgWRHzX1lD3dQ
提取码:nxis 

pycharm配置环境

将原本pycharm中不可见的显示出,需要勾选以下三个:

用tab自动转化为4个空格:

设置行号:

python38相关文件目录:

一、第一课

1.主要内容

变量
循环
四则运算
函数
带参数的函数
多参数的函数
变量命名规则
代码规范

2.例子 1(在线编程网站中完成)

画一个边长为 101 像素的正三角形的代码如下
注意
1, 一条语句一行
2, 括号必须是英文字符(使用中文字符会报错误)

forward(101)
right(120)
forward(101)
right(120)
forward(101)
right(120)

效果图如下所示

3.在pycharm中完成第一课内容

1)gua.py文件

import turtles = turtle.Screen()
turtle.setup(width=0.433, height=0.633, startx=20, starty=40)def jump(x, y):turtle.penup()turtle.goto(x, y)turtle.pendown()def forward(l):turtle.forward(l)def right(a):turtle.right(a)def pause():turtle.done()

2)注释问题

单行注释:

# 注释
# # 开始到这一行的结束,都属于注释的一部分,是不会被程序识别的
# 除了在开头写注释之外,还可以在一行内进行注释,因为 # 到这一行的行末都是注释

多行注释:

"""
这是多行字符串,可以当做注释使用
可以换行
"""

3)相关作业

首先需要在py4课1板书.py中添加以下:

from gua import *pause()
以下是几道作业题目及其相关代码,和最后的效果展示图。
作业 1
画一个边长为 10 像素的正三角形
forward(10)
right(120)
forward(10)
right(120)
forward(10)
right(120)

作业 2
画一个边长为 99 像素的正方形(用到变量)
x = 100
degree = 90forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)

作业 3
画一个长宽分别为 168, 99 像素的矩形
w = 168
h = 99
degree = 90forward(w)
right(degree)
forward(h)
right(degree)
forward(w)
right(degree)
forward(h)
right(degree)

作业 4
画一个边长为 33 像素的正三角形
x = 33
degree = 120forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)

作业 5
画一个边长为 106 像素的正方形
x = 106
degree = 90forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)

作业 6
画一个长宽分别为 68, 59 像素的矩形
w = 68
h = 59
degree = 90forward(w)
right(degree)
forward(h)
right(degree)
forward(w)
right(degree)
forward(h)
right(degree)

作业 7
画一个边长为 79 的正五边形
提示, 往右旋转 72 度
x = 79
degree = 72forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)

作业 8
画一个边长为 63 的正六边形
提示, 往右旋转 60 度
正 n 边形的内角和: (n - 2) * 180
x = 63
n = 6
# degree = 180 - (n - 2) * 180 / n
nzjc = (n - 2) * 180 / n
degree = 180 - nzjcforward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)

作业 9
画一个边长为 159 的正七边形
提示, 往右旋转 52 度
x = 159
n = 7
# degree = 180 - (n - 2) * 180 / n
nzjc = (n - 2) * 180 / n
degree = 180 - nzjcforward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)
forward(x)
right(degree)

作业 10
画一个边长为 93 的正十边形
提示, 往右旋转 36
x = 93
n = 10
# degree = 180 - (n - 2) * 180 / n
nzjc = (n - 2) * 180 / n
degree = 180 - nzjc# 循环
# 首先定义一个变量,用于计算循环的次数,一般是 i j k a b c
i = 0
# while 后面的语句是条件
# 当条件成立的时候,执行代码块内的语句
# 否则,结束循环
while i < n:forward(x)right(degree)# 注意,在 while 循环里,一定改变 i 的值# 否则循环永远不会结束i = i + 1

4)Python 中的四则运算

* 代表乘号
/ 代表除号
四则运算是有优先级的 + - 低于 * /

5)循环while

# 循环
# 首先定义一个变量,用于计算循环的次数,一般是 i j k a b c
i = 0
# while 后面的语句是条件
# 当条件成立的时候,执行代码块内的语句
# 否则,结束循环
while i < n:forward(x)right(degree)# 注意,在 while 循环里,一定改变 i 的值# 否则循环永远不会结束i = i + 1

6)函数

函数是用来消除大段重复代码的功能
主流的语言都有函数这个特性
函数是一段代码的疾患,用于重复使用一段代码

定义一个函数,画一个边长 100 像素的正三角形
def sjjcxy():n = 3x = 100nzjc = (n - 2) * 180 / ndegree = 180 - nzjci = 0while i < n:forward(x)right(degree)i = i + 1sjjcxy()

以上是定义函数的方式,下面就可以使用了
注意,程序是按顺序执行的,所以定义要在使用前面
函数名 加上一对括号,表示调用函数(调用即为使用)

sjjcxy()
forward(50)
sjjcxy()

函数和其他变量一样,是可以赋值给另一个变量的

sjjc = sjjcxy
sjjc()

7)函数的参数可以增加灵活性

def sjjcxy(x):n = 3# x = 100nzjc = (n - 2) * 180 / ndegree = 180 - nzjci = 0while i < n:forward(x)right(degree)i = i + 1sjjcxy(10)
sjjcxy(50)
sjjcxy(100)

def polygon(bmih, bmuu=3):# n = 3# x = 100n = bmuunzjc = (n - 2) * 180 / ndegree = 180 - nzjci = 0while i < n:forward(bmih)right(degree)i = i + 1polygon(100)
polygon(80, 5)
polygon(50, 6)

8)变量名命名规则

只能包括字母,下划线,美元符号,数字
不能以数字开头
变量名是大小写敏感的
只有在现代的 Python 里,才能用中文作为合法的变量名
变量名不能是 Python 的保留字(while def 等等)

9)代码格式化自检条目

​​​​1. 每行只写一条语句
2. 函数之间空两行
3. 运算符左右各加一个空格
4. 逗号前无空格,后面加 1 个空格
5. 冒号前无空格,字典中的冒号后面有一个空格
6. 参数默认值的等号两边没有空格
7. 函数、列表左括号前没有空格,所有右括号前无空格

二、第二课

1.作业1解答

1
实现函数, 用于画一个正方形, 边长由参数提供
参数 x, y 是正方形左上角坐标
参数 l(注意,这里是字母 l,不是数字 1) 是正方行边长
def square(x, y, l):jump(x, y)# 循环画正方形# 当然, 你可以用 goto 来画# 只需要计算一下四个顶点的坐标 (这很简单)i = 0while i < 4:forward(l)right(90)i = i + 1square(5, 5, 10)

2
实现函数, 用于画一个矩形, 长宽由参数提供
参数 x, y 是左上角坐标
参数 w, h 是长宽
def rect(x, y, w, h):jump(x, y)# 循环画正方形# 当然, 你可以用 goto 来画# 只需要计算一下四个顶点的坐标 (这很简单)i = 0while i < 2:forward(w)right(90)forward(h)right(90)i = i + 1rect(2, 20, 30, 10)

3
画一排正方形, 一共 5 个
从 0 0 点开始, 边长为 30, 正方形之间间隔为 0
def square(x, y, l):jump(x, y)# 循环画正方形# 当然, 你可以用 goto 来画# 只需要计算一下四个顶点的坐标 (这很简单)i = 0while i < 4:forward(l)right(90)i = i + 1def square5():n = 5bmih = 30#  x 坐标# 0  30  60  90  120# 0  1   2   3   4i = 0while i < n:x1 = i * bmihy1 = 0square(x1, y1, bmih)i = i + 1square5()

4
画一排正方形, 一共 5 个
从 0 0 点开始, 边长为 30, 正方形之间间隔为 10 像素
def square(x, y, l):jump(x, y)# 循环画正方形# 当然, 你可以用 goto 来画# 只需要计算一下四个顶点的坐标 (这很简单)i = 0while i < 4:forward(l)right(90)i = i + 1def square5_10():n = 5bmih = 30space = 10#  x 坐标# 0  40  80  120  160# 0  1   2   3   4i = 0while i < n:x1 = i * (bmih + space)y1 = 0square(x1, y1, bmih)i = i + 1square5_10()

5
实现函数, 画一排正方形, 有如下参数
x, y 是第一个正方形左上角坐标
n 是正方形的个数
space 是两个正方形之间的间距
len 是正方形的边长
def square(x, y, l):jump(x, y)# 循环画正方形# 当然, 你可以用 goto 来画# 只需要计算一下四个顶点的坐标 (这很简单)i = 0while i < 4:forward(l)right(90)i = i + 1def square_line(x, y, n, space, len):# n = 5bmih = len# space = 10#  x 坐标# 0  40  80  120  160# 0  1   2   3   4i = 0while i < n:x1 = x + i * (bmih + space)y1 = ysquare(x1, y1, bmih)i = i + 1square_line(5, 8, 7, 10, 30)

6
实现函数, 用上题的函数来画一个正方形方阵, 参数如下
x, y 是第一个正方形左上角坐标
space 是两个正方形之间的间距
len 是正方形的边长
n 是横向正方形的个数
m 是纵向正方形的个数
def square(x, y, l):jump(x, y)# 循环画正方形# 当然, 你可以用 goto 来画# 只需要计算一下四个顶点的坐标 (这很简单)i = 0while i < 4:forward(l)right(90)i = i + 1def square_line(x, y, n, space, len):# n = 5bmih = len# space = 10#  x 坐标# 0  40  80  120  160# 0  1   2   3   4i = 0while i < n:x1 = x + i * (bmih + space)y1 = ysquare(x1, y1, bmih)i = i + 1def square_square(x, y, space, len, n, m):i = 0while i < m:x1 = xy1 = y + i * (len + space)square_line(x1, y1, n, space, len)i = i + 1square_square(-100, 50, 10, 50, 3, 2)

7
实现函数, 画一排矩形, 有如下参数
x, y 是第一个矩形左上角坐标
w, h 是矩形长宽
n 是矩形的个数
space 是两个矩形之间的间距
def rect(x, y, w, h):jump(x, y)# 循环画正方形# 当然, 你可以用 goto 来画# 只需要计算一下四个顶点的坐标 (这很简单)i = 0while i < 2:forward(w)right(90)forward(h)right(90)i = i + 1def rect_line(x, y, w, h, n, space):i = 0while i < n:x1 = x + i * (w + space)y1 = yrect(x1, y1, w, h)i = i + 1rect_line(40, 40, 40, 10, 3, 10)

8
实现函数, 画一个矩形方阵, 参数如下
x, y 是第一个矩形左上角坐标
space 是两个矩形之间的间距(横向和纵向)
w, h 是矩形的长宽
n 是横向矩形的个数
m 是纵向矩形的个数
def rect(x, y, w, h):jump(x, y)# 循环画正方形# 当然, 你可以用 goto 来画# 只需要计算一下四个顶点的坐标 (这很简单)i = 0while i < 2:forward(w)right(90)forward(h)right(90)i = i + 1def rect_line(x, y, w, h, n, space):i = 0while i < n:x1 = x + i * (w + space)y1 = yrect(x1, y1, w, h)i = i + 1def rect_square(x, y, space, w, h, n, m):i = 0while i < m:x1 = xy1 = y + i * (h + space)rect_line(x1, y1, w, h, n, space)i = i + 1rect_square(50, 50, 10, 40, 10, 3, 4)

9
实现函数, 画一个正多边形, 参数如下
x y 是起点, 设起点为多边形的顶部边的左顶点
n 是多边形的边数
l 是边长
def polygon(x, y, n, l):jump(x, y)i = 0jcdu = 180 - (180 * (n - 2) / n)while i < n:forward(l)right(jcdu)i = i + 1polygon(40, 10, 36, 10)

2.调试代码

解决语法错误和逻辑错误

3.数据类型

1)整型就是整数

x = 10

2)浮点型就是小数

y = 10.1
a = 12.0
b = 0.21

下面的 c 和 d 两个变量是合法的
因为当你小数点左右只有 0 的时候
Python 规定可以省略 0
但一定不要这样写

c = 12.
d = .21

3)字符串类型的变量

name = 'gua'
gender = "male"

4)print函数

x = 10
y = 10.1
name = 'gua'
print(x, y, name)

10 10.1 gua

4.选择控制

1)if else

grade = 3
# 如果 grade 小于 7
if grade < 7:# 这句 print 只在 grade 小于 7 这个条件满足的情况下会被执行print('小学生')

小学生

if 带 else
if else 必定会执行一个语句

if 1 > 2:print('条件成立')
else:print('条件不成立')

条件不成立

多个if else

grade = 8
if grade < 7:print('小学生')
elif grade < 10:print('初中生')
else:print('高中生')

初中生

2)绝对值

n = 111
if n < 0:n = -nprint('绝对值', n)

绝对值 111

3)判断奇数偶数

n = 1
if n % 2 == 0:print('偶数')
else:print('奇数')

奇数

5.比较运算和逻辑操作

1)比较运算

一共有 6 个常用比较运算
 分别是:
相等, 不等, 小于, 大于, 小于等于, 大于等于

==
!=
<
>
<=
>=
print('布尔值', 1 == 1)

布尔值 True

2)逻辑操作

与, 或, 非

and
or
not

用到的地方很广, 比如登录网站的时候, 服务器做如下判断

if 用户名存在 and 密码验证成功:登录成功
else:登录失败
print('1 == 1 and 2 == 2', 1 == 1 and 2 == 2)

1 == 1 and 2 == 2 True

6.函数返回值

1)定义

函数不仅可以合并操作重复性的代码
还可以通过计算得到一个结果, 结果就是返回值
函数可以有「返回值」
返回值的意思是函数调用的结果是一个值, 可以被赋值给变量

2)add函数

例
定义一个函数 add
接受 a b 两个参数
def add(a, b):# 用 return 语句来得到一个返回值# 函数执行到 return 语句的时候就结束了return a + bprint('add 函数的返回值', add(1, 2))
number = add(2, 3)
print('add 函数的返回值 number', number)

add 函数的返回值 3
add 函数的返回值 number 5

3)绝对值函数

def abs(n):if n < 0:n = -nreturn nprint(abs(0))
print(abs(-8))
print(abs(3))

0
8
3

函数执行遇到 return 就结束

def minus(a, b):print('minus start')return a - bprint('这一句是不会被执行的, 因为 return 的时候函数就结束了')print(minus(1, 2))

minus start

4)一个数字是否是奇数

def is_odd(n):# 取余数的操作符是 %if n % 2 != 0:return Trueelse:return False

以下是更好的写法

def is_odd(n):return n % 2 != 0print(is_odd(1))
print(is_odd(2))
print(is_odd(3))
print(is_odd(4))

True
False
True
False

5)返回两个参数中较小的一个

def min(a, b):if a < b:return aelse:return bprint(min(1, 2))
print(min(3, 2))

1
2

7.标准库

库 是一个编程术语, 意思是一系列函数的集合

标准库 也是一个术语, 指的是语言自带的库

Python 的在线文档有所有标准库的文档(当然, 不那么容易看懂)。我们可以用标准库实现很多功能

使用标准库就是直接使用即可(因为自带了)。标准库的用法上课会讲

1)math库-sin

print(math.pi)
print(math.sin(30))
print('0.5', math.sin(30 * math.pi / 180))

3.141592653589793
-0.9880316240928618
0.5 0.49999999999999994

def float_equal(a, b):delta = 0.0001return abs(a - b) < deltaradian = 30 * math.pi / 180
sin30 = math.sin(radian)
# print('0.5', sin30, sin30 == 0.5)
print('0.5', sin30, float_equal(sin30, 0.5))

0.5 0.49999999999999994 True

2)math-floor,ceil

print('floor', math.floor(3.9))
print('ceil', math.ceil(3.1))

三、第三课

1.作业2解答

// 注意, 作业中提到的国旗的颜色我们只画黑色线框不填色
// 所有国旗的矩形长宽分别为 300 * 200(包括瑞士国旗)// 作业 1
// 实现一个圆形函数
// x y 是圆形的圆心
// r 是半径
// circle(x, y, r)提示:我们在第一节课的最后有一个作业 polygon, 实际上电脑是通过模拟来实现画一个圆的也就是画一个正 n 变形, n 很大的时候, 这个图形就是一个圆有一个问题需要注意, 初始点在圆心处, 在画 polygon 的时候需要从左上角开始所以要先从圆心移动到左上角需要注意的是,按照下面提示的写法,画出的圆会多处一条半径线,这一条线必须保留。分步提示:
注意, 你需要 import math 后才能使用 math.pi1. 我们用正 36 边形来模拟圆形, 也就是说 n 取值 362. 正多边形的周长是 n(边数) * l(边长), 而它的外接圆的周长是 2 * math.pi * r, 我们这里把这两个周长看做相等(因为我们只是用正多边形近似模拟, 不是精准画圆, 小小偏差可以接受)所以直接算出 l = (2 * math.pi * r) / n  这个公式中 l 是多边形边长, r 是圆半径, n 是边数具体请看下图(正多边形和外接圆)3. 初始情况下箭头是朝右的, 所以先往左转, 左转 90 度等于右转 270 度, 所以你需要自己实现一个 left 函数(或者直接 right(270) 或者 right(-90))这个角度的具体计算原理见下图这里直接把公式给出如下, 你可以直接使用jcdu = (90 + (360 / n) / 2)left(jcdu)4. 转完之后, 移动 r, 也就是半径的距离5. 这样就移动到了左上角的位置, 但此时角度并不是朝右的,刚刚往左转动了 jcdu, 现在往右转回来这个角度right(jcdu)6. 这时候你就在正多边形的顶部横边的左顶点并且方向朝右了, 以此为起点画一个正 36 边形即可如果不能理解上面的提示,那么看下面的提示
程序初始的时候状态如下
1,箭头朝右
2,在原点处你把你想像成箭头,你得先 jump 到圆心处,再:
1,先左转90度(或者右转 270 度)
2,左转 360/n/2 度
3,前进半径 r
4,转成朝右
5,开始画 36 边形
def left(jcdu):right(360 - jcdu)def polygon(n, l):i = 0jcdu = 360 / nwhile i < n:forward(l)right(jcdu)i = i + 1def circle(x, y, r):jump(x, y)n = 36jcdu = (90 + (360 / n) / 2)len = (2 * math.pi * r) / nleft(jcdu)forward(r)right(jcdu)polygon(n, len)circle(0, 0, 50)

// 作业 2
// 实现一个矩形函数
// x y 是矩形中心的坐标
// w h 是宽高
// center_rect(x, y, w, h)

提示:
    在第一课的作业中已经实现了 rect 函数,
    不过 rect 函数中的 x, y 是表示左上角坐标,
    现在需要实现的 center_rect 函数的 x, y 是矩形中心的坐标,
    所以应该先从矩形中心移动到矩形左上角, 然后调用 rect 函数

分步提示:
    1. 根据矩形中心坐标 x, y 计算出左上角坐标 x1, y1
    2. 调用 rect 函数, 传入的参数分别为左上角坐标, 宽和高

def rect(x, y, w, h):jump(x, y)i = 0while i < 2:forward(w)right(90)forward(h)right(90)i = i + 1def center_rect(x, y, w, h):x1 = x - w / 2y1 = y + h / 2rect(x1, y1, w, h)

// 作业 3
// 实现一个正五角星(国旗大星星那种)函数
// x y 是五角星顶部横边的左边点坐标
// length 是一条线的长度
// 这是一个正五角星
// vgwujcxy(x, y, length)

分步提示:
    1. 正五角星需要重复 5 次, 所以需要循环 5 次
    2. 每次循环中前进 length 的长度, 右转 144 度
    3. 别忘了循环的时候 i 增加 1

def vgwujcxy(x, y, length):jump(x, y)i = 0while i < 5:forward(length)right(144)i = i + 1vgwujcxy(-100, 50, 50)

// 注意, 作业中提到的国旗的颜色我们只画黑色线框不填色

// 作业 4
// 实现一个函数画日本国旗
// 调用 2 个函数画日本国旗
// 一个画背景的白色矩形
// 一个画中间的圆,圆的直径必须为国旗高的 3/5
// x, y 是国旗左上角座标
// japan(x, y)

提示:
    日本国旗由两部分组成, 矩形和圆形. 所以依次画出这两个图形

分步提示:
    1. 调用 center_rect 函数画一个矩形
    2. 调用 circle 函数画一个圆形

def japan(x, y):w = 300h = 200x1 = x + w / 2y1 = y - h / 2center_rect(x1, y1, w, h)r = h * (3 / 5) / 2circle(x1, y1, r)japan(100, 100)

// 作业 5
// 实现一个五角星函数
// x y 是五角星的中心点坐标
// r 是五角星外接圆的半径
// wujcxy(x, y, r)
// 为了实现这个函数, 你需要使用三角函数计算顶点在圆上的坐标
// 如果你不懂这个数学计算过程, 应该在群里提问
// 我帮你实现了正弦余弦函数如下
def sin(degree):
    import math
    # 如上课所述, 数学库里面的 sin 函数接受弧度作为参数
    # 我们这个函数接受角度, 下面是弧度转角度的公式
    radians = degree * math.pi / 180
    return math.sin(radians)

def cos(degree):
    import math
    radians = degree * math.pi / 180
    return math.cos(radians)

提示
    1. 正五角星顶角的一半是 18 度, du = 18, 外接圆半径为 r
    2. 五角星顶部横边 BE 的左边点 B 的 x 坐标为 x1 = x - cos(du) * r
    3. 五角星顶部横边 BE 的左边点 B 的 y 坐标为 y1 = y + sin(du) * r
    4. 五角星顶部横边的长度为 length = cos(du) * r * 2
    5. 调用作业 3 的函数 vgwujcxy(x1, y1, length)

def sin(degree):import math# 如上课所述, 数学库里面的 sin 函数接受弧度作为参数# 我们这个函数接受角度, 下面是弧度转角度的公式radians = degree * math.pi / 180return math.sin(radians)def cos(degree):import mathradians = degree * math.pi / 180return math.cos(radians)def wujcxy(x, y, r):du = 18x1 = x - cos(du) * ry1 = y + sin(du) * rlength = cos(du) * r * 2vgwujcxy(x1, y1, length)wujcxy(0, 0, 135)
circle(0, 0, 135)

作业 6
实现一个函数画中国国旗(以下国旗题目都是如此 不重复了)
五角星不要求角度朝向(统一用正五角星),但是要求尺寸必须符合下图中的比例
x, y 是国旗左上角座标(后面的题都是这个要求,不再重复说明)
china(x, y)提示:中国国旗由两部分组成, 矩形和 5 个五角星, 计算好比例, 依次画完分步提示:1. 使用 rect 函数画一个矩形2. 计算比例,画 5 个五角星(调用 5 次)
def china(x, y):w = 300h = 200rect(x, y, w, h)# 大五角星xw1 = x + w / 6yw1 = y - h / 4rw1 = h * 3 / 20wujcxy(xw1, yw1, rw1)#xw2 = x + w / 3xw3 = x + w * 12 / 30yw2 = y - h * 1 / 10yw3 = y - h * 1 / 5yw4 = y - h * 7 / 20yw5 = y - h * 9 / 20rw2 = h / 20wujcxy(xw2, yw2, rw2)wujcxy(xw3, yw3, rw2)wujcxy(xw3, yw4, rw2)wujcxy(xw2, yw5, rw2)china(0, 0)

// 作业 7
// 实现一个函数画法国国旗
// france(x, y)

提示:
    法国国旗由三个纵向矩形组成, 依次画出这三个矩形

分步提示:
    1. 计算出三个矩形的宽, 均为 1/3 * w
    2. 计算出三个矩形的左上角坐标, 分别为 x1, y1、x2, y2 和 x3, y3
    3. 调用三次 rect 函数, 每次传入不一样的参数

def france(x, y):w = 300h = 200w1 = w / 3x1 = xx2 = x1 + w1x3 = x2 + w1rect(x1, y, w1, h)rect(x2, y, w1, h)rect(x3, y, w1, h)france(0, 0)

// 作业 8
// 画德国国旗
// germany(x, y)

提示:
    德国国旗由三个横向矩形组成, 依次画出这三个矩形

分步提示:
    1. 计算出三个矩形的高, 均为 1/3 * h
    2. 计算出三个矩形的左上角坐标, 分别为 x1, y1、x2, y2 和 x3, y3
    3. 调用三次 rect 函数, 每次传入不一样的参数

def germany(x, y):w = 300h = 200h1 = h / 3y1 = yy2 = y1 - h1y3 = y2 - h1rect(x, y1, w, h1)rect(x, y2, w, h1)rect(x, y3, w, h1)germany(0, 0)

// 作业 9
// 画 冈比亚国旗
// gambia(x, y)

提示:
    冈比亚国旗和德国国旗类似, 中间的矩形由一个大纵向矩形和两个小纵向矩形组成,
    所以画 5 个矩形

分步提示:
    1. 最上面和最下面两个矩形和德国国旗一致
    2. 中间的矩形分成三个矩形, 高度占比分别为 1:6:1, 分别计算出这三个矩形的中心坐标
    3. 分别计算中间三个矩形的长度和高度
    4. 使用 center_rect 画出 5 个矩形, 每次传入的参数不一致

def gambia(x, y):w = 300h = 200x1 = x + w / 2x2 = x1x3 = x1x4 = x1x5 = x1y1 = y - h / 6y2 = y - h / 3 - h / 48y3 = y - h / 2y4 = y - h * 2 / 3 + h / 48y5 = y - h + h / 6h1 = h / 3h2 = h / 24h3 = h / 4h4 = h / 24h5 = h / 3center_rect(x1, y1, w, h1)center_rect(x2, y2, w, h2)center_rect(x3, y3, w, h3)center_rect(x4, y4, w, h4)center_rect(x5, y5, w, h5)gambia(0, 0)

// 作业 10
// 画 瑞士国旗
// switzerland(x, y)

提示:
    瑞士国旗由一个大矩形和两个小矩形组成, 需要画三个矩形

分步提示:
    1. 瑞士国旗中的两个矩形大小是一样的, 都按照长边 75, 短边 25 来计算
    2. 计算出三个矩形的中心点坐标、长、宽
    3. 依次画出这三个矩形

def switzerland(x, y):w = 300h = 200width = 75height = 25cx = x + w / 2cy = y - h / 2center_rect(cx, cy, w, h)center_rect(cx, cy, width, height)center_rect(cx, cy, height, width)switzerland(0, 0)

作业 11
画朝鲜国旗
northkorea(x, y)提示:朝鲜国旗从上往下依次为蓝色矩形、白色矩形、红色矩形、白色矩形和蓝色矩形,这些矩形的高度比分别为 4:1:15:1:4, 红色矩形里包含了一个圆形和一个五角星圆形的直径和红色矩形的高度的比为 2:3, 圆形的圆点 x 坐标在国旗宽的 2/5 处使用这些数据计算出各个图形的坐标, 然后画出来分步提示:1. 分别计算出 5 个矩形的坐标和长宽2. 计算出圆形的圆心, 圆形的直径和红色矩形的高度的比为 2:3, 圆形的圆点 x 坐标在国旗宽的 2/5 处3. 画 5 个矩形4. 画圆形5. 画五角星
def northkorea(x, y):w = 300h = 200h1 = h * 4 / 25h2 = h * 1 / 25h3 = h * 15 / 25h4 = h2h5 = h1x1 = xx2 = xx3 = xx4 = xx5 = xy1 = yy2 = y1 - h1y3 = y2 - h2y4 = y3 - h3y5 = y4 - h4rect(x1, y1, w, h1)rect(x2, y2, w, h2)rect(x3, y3, w, h3)rect(x4, y4, w, h4)rect(x5, y5, w, h5)xr = x + w * 3 / 8yr = y - h / 2hr = h3 / 3circle(xr, yr, hr)wujcxy(xr, yr, hr)northkorea(0, 0)

2.log 函数

这里用一种特殊的方式创造了一个 log 函数
下面就可以用 log 替代 print 了, 用 log 的原因在于统一/方便/灵活(具体以后你会学到)
以后会学这个的原理, 现在直接拿来用即可
注意, 我们以后用这个 log 替代 print

def log(*args, **kwargs):print(*args, **kwargs)

3.debug(调试/除错)的标准应对流程(最重要的内容)

debug 常见的 2 种错误:
1. 语法错误,程序没有运行
2. 逻辑错误,程序运行了,但是结果不是想要的

调试的 2 个难点:
1. 程序的分支你不知道,要让它显形
2. 程序的运行状态(变量的值)你不知道,要看到它

1)用 log debug 的示例:

from gua import *log('line start')def line(l):log('line mid', l)forward(1)log('line end')line(100)pause()

line start
line end
line mid 100

2)分号问题

# ;   希腊问号(GREEK QUESTION MARK)
# ;   分号
log('希腊问号', ord(';'))
log('分号', ord(';'))

希腊问号 894
分号 59

4.内置数据结构 array(数组)

array 可以干嘛?
array 可以存储很多元素,每个元素的值、类型都可以不同
具体看下面的例子array(数组)常用操作
创建数组
使用 [] 符号,每个元素用逗号分隔

1)array定义

a = [1, 3, 4, 5]

2)len 函数

a = [1, 3, 4, 5]
# 现在 a 是一个 array,拥有 4 个元素# 可以用内置的 len 函数得到 array 的长度
log('求 array 长度', len(a))# 使用 len(a) 可以求出数组的长度(数组中元素的个数)
# 值可以用变量接住length = len(a)
log(length)

求 array 长度 4
4

3)访问元素

对于数组中的每个元素,可以通过下标(就是元素在数组中的序号,从 0 开始)访问
下标访问语法是 [] 中括号

log('用下标访问 array 中的元素')
log(a[0])
log(a[1])
log(a[2])
log(a[3])

用下标访问 array 中的元素
1
3
4
5

4)遍历

log('循环访问 array 所有元素')
length = len(a)
for i in range(length):# i 分别是 0 1 2 3log(a[i])# 上面的循环等价于下面的 while
i = 0
length = len(a)
while i < length:log(a[i])i = i + 1

循环访问 array 所有元素
1
3
4
5
1
3
4
5

5)添加新元素

向已经存在的 array 中添加新元素
可以用数组的 append 函数往列表末尾插入一个元素
并且,这个新元素可以是任意类型,这里是一个字符串
请注意, 这是一个全新的概念, 数组类型的变量可以用 .函数 的方式来进行操作

a.append('新元素')
log(a)a.append(0)
log(a)# 多添加几个元素
a.append(12)
a.append(23)
a.append(34)
log(a)

[1, 3, 4, 5, '新元素']
[1, 3, 4, 5, '新元素', 0]
[1, 3, 4, 5, '新元素', 0, 12, 23, 34]

6)关于array题目

题目,给定一个只包含数字的 array
题目,得到列表中最小的元素
题目,得到列表中所有数字的和
题目,得到列表中所有数字的平均数
题目,len(array) 可以得到 array 长度(也就是元素个数),上文有写
a = [3, 9, 2, 0, -8]
min_number = a[0]for i in range(len(a)):n = a[i]if n < min_number:min_number = nlog("数组中最小元素:", min_number)# 求和
sum = 0
for i in range(len(a)):n = a[i]sum = sum + n
log("数组求和:", sum)
log("数组平均数:", sum / len(a))
log("array 长度:", len(a))

数组中最小元素: -8
数组求和: 6
数组平均数: 1.2
array 长度: 5

5.字符串

1)判断相等或者包含

log('good' == 'good')
log('good' == 'bar')
log('good' != 'bad')
log('possible' in 'impossible')

True
False
True
True

2)拼接得到一个新字符串

# 拼接得到一个新字符串
log('very' + 'good')
log('very ' + 'good')name = 'gua'
log('hello, ' + name)name = 'gua'
greeting = 'hello, ' + name
log(greeting)

verygood
very good
hello, gua
hello, gua

3)format 函数

得到一个你想要的字符串有多种方式
但是现在有现代的方式, 字符串的 format 函数
注意,书上如果和我不一样,以我为准(如果你看过书或者自学过其他教程你会知道百分号格式化字符串, 那是过时的用法了)
用法如下
name = 'gua'
a = '#{}#, 你好'.format(name)
log(a)

#gua#, 你好

简单说来,就是 {} 会被变量替换形成新字符串
可以有多个参数, 按顺序替换字符串中的 {}

4)字符串下标访问

字符串相当于一个 array,可以用下标访问
看例子,看结果
s 的长度是 7,但是下标是从 0 开始的,所以最大下标是 6
s = 'iamgood'
log(s[0])
log(s[1])
log(s[2])
# ...
log(s[6])

i
a
m
d

5)字符串不能使用下标来赋值

字符串不能使用下标来赋值
只能拼接起来生成一个新的字符串
name = 'gua'name[0] 是 'g'
假如你进行如下操作 name[0] = 'A'
会产生一个错误, 因为字符串不能这样操作

6)字符串切片

# 语法如下
# s[开始下标:结束下标]
slit1 = s[0:3]  # 'iam'
slit2 = s[1:3]  # 'am'
log("slit1:", slit1)
log("slit2:", slit2)

slit1: iam
slit2: am

# 省略开始下标参数意思是从 0 开始取
s[:3]  # 'iam'
slit3 = s[:3]
log("slit3:", slit3)

slit3: iam

s[2:]  # 'mgood'
slit4 = s[2:]
log("slit4:", slit4)s1 = 'iamgood'[3:]
log("s1:", s1)

slit4: mgood
s1: good

6.变量作用域

def center_rect():x = 1...def rect():x = 100y = 100...

四、第四课

0.扩展基础

1)log函数

def log(*args, **kwargs):print(*args, **kwargs)

2)range函数(不是从0开始)

# 从1开始遍历数组,并求乘积
def product(array):s = 1for i in range(1, len(array)):n = array[i]s = s * nreturn s

3)自动化测试

def ensure(condition, message):# condition 是布尔值# message 是一个 string,condition 不成立的时候被输出if not condition:log(message)else:log('测试成功!')# 加强版 ensure 函数
def ensure_equal(a, b, message):if a != b:# log(message, a, b)log('{}, ({}) 不等于 ({})'.format(message, a, b))else:log('测试成功!')

1.作业3解答

0)例子 1 : 求数组的和

def sum(array):# 先设置一个变量用来存数组的和s = 0for i in range(len(array)):# 用变量 n 保存元素的值n = array[i]# 累加到变量 ss = s + n# 循环结束, 现在 s 里面存的是数组中所有元素的和了return sa = [1, 2, 3, 4]
log('sum', sum(a))

sum 10

1)array 的乘积

作业 1
参数是一个只包含数字的 array
求 array 的乘积
提示:通过遍历数组,然后累乘的方式计算数组的乘积,参考例子 1分步提示:1. 先设置一个变量 s 用来存数组的乘积,初始值为 12. 遍历数组,用变量 n 保存元素的值3. 累乘每次的变量 n 到变量 s4. 循环结束后,变量 s 里面存的是数组中所有元素的乘积, 返回变量 s(很重要,一定要 return s)product(array)
def product(array):# 先设置一个变量用来存数组的和s = 1for i in range(len(array)):# 用变量 n 保存元素的值n = array[i]# 累加到变量 ss = s * n# 循环结束, 现在 s 里面存的是数组中所有元素的和了return sa = [1, 2, 3, 4]
log('pro', product(a))

pro 24

2)

python入门基础(完整)相关推荐

  1. python入门基础教程-Python入门基础教程:WSGI

    原标题:Python入门基础教程:WSGI WSGI 简介 WSGI 是什么 WSGI 是 Python Web Server Gateway Interface 的缩写,是描述 Web 服务器与 P ...

  2. Python入门基础总结笔记——正则表达式

    Python入门基础总结笔记--正则表达式 完整基础知识参看网站:正则表达式 总结重点 用\d可以匹配一个数字,\w可以匹配一个字母或数字 用*表示任意个字符(包括0个),用+表示至少一个字符 用?表 ...

  3. python笔记基础-Python入门基础知识学习笔记之一

    为什么要写这篇文章? 本人做过Objective-C开发,现在在用C#做WinForm开发.近段时间在学习Python入门基础知识时,发现有很多知识点和Objective-C的不一样.故想通过本文记录 ...

  4. python入门基础代码初学

    python入门基础代码初学 一.检查python安装 二.print使用 二.使用python运算 三.enumerate()函数 一.检查python安装 PS C:\Users\admin> ...

  5. 【目录】Python 入门基础篇 <(^-^)>

    Python 入门基础篇 一.关于Python的介绍与准备工作 Python基础介绍 Jupyter notebook基础介绍 Jupyter notebook打开问题 Jupyter noteboo ...

  6. Python入门基础知识学什么?

    Python基础知识主要是针对一些零基础的同学安排的,虽说Python是相对比较简单的一门编程语言,但是没有基础的同学还是要进行系统的学习,那么Python入门基础知识学什么呢?来看看下面小编的详细介 ...

  7. python 判断列表所有元素是否为某个值_这应该是最详细的Python入门基础语法总结!...

    这应该是最详细的Python入门基础语法总结! 这应该是最详细的Python入门基础语法总结! 定义变量,使用变量 input 用户自己输入值 print 打印值 可以输出多个变量 %d|%s 用于输 ...

  8. B站马士兵python入门基础版详细笔记(6)

    前言: 这篇文章是B站学习python入门基础班的视频的第五 六章内容,主要讲述的是列表,主要包括列表的创建,以及他的元素的增.删.查.改操作命令. 一.列表的初始化 为什么要使用列表? 列表就好比C ...

  9. Python入门基础(下)之魔方方法

    Python入门基础(下)之魔方方法 一.学习内容概括 学习地址:https://tianchi.aliyun.com/s/58327c15d1faee512c008128d3bb9e32 今天主要学 ...

  10. B站马士兵python入门基础版详细笔记(4)

    前言: 这篇文章是B站学习python入门基础班的视频的第四章内容,主要讲述的是if-else语句,但是不包括循环结构,循环结构在下一章笔记中有记叙 一.顺序结构 什么是顺序结构呢?比如说 '''把大 ...

最新文章

  1. 2021-2027年中国透明导电膜玻璃行业市场研究及前瞻分析报告
  2. bash中case的用法
  3. anconda安装后命令行中安装tensorflow报错
  4. stm32影子寄存器、预装载寄存器,TIM_OC1PreloadConfig和TIM_ARRPreloadConfig的作用
  5. pytorch笔记: 搭建Skip—gram
  6. php sqrt函数,sqrt函数怎么使用
  7. java BitSet2
  8. arduino的esp32程序无法上传_【arduino】arudino开发ESP32 SPIFFS文件上传方法
  9. 镜头像差之二——色差
  10. html页面乱码解决
  11. 使用PS2019制作明信片
  12. java-net-php-python-jspm新开路东总布小学编程类课程教学系统计算机毕业设计程序
  13. 幼儿园语言活动包括哪几类_幼儿园语言教学活动提问的类型及优化设计
  14. PPT2010无法从所选的文件中插入视频
  15. 怎么判断电脑是32位还是64位呢
  16. 安装opencv3.4遇到Download: opencv_ffmpeg.dll、ippicv等失败的解决方法
  17. Swing MVC设计模式
  18. 单引号,双引号,三引号的区别
  19. Camunda撤回流程操作
  20. 房屋出租系统(初级)

热门文章

  1. 张小龙说的「需求只来自你对用户的了解。需求不来自调研、需求不来自分析、需求不来自讨论、需求不来自竞争对手」...
  2. 中睿天下主机取证溯源系统与飞腾S2500完成兼容互认
  3. 散装笔记--考研--考研数学的演草纸够用么?
  4. u盘文件删除如何恢复?四步解决
  5. Docker切换国内镜像下载源
  6. CCF-CSP 201903-2二十四点 三种方法 满分题解 结尾附惊天方法
  7. SpringBoot使用记录之日志Logback
  8. java thread resume_java 线程Thread方法之suspend()和resume() | 学步园
  9. 安卓刷机包 各个文件夹的作用
  10. 天梯赛 L1-025 正整数A+B (15 分) 小坑不断