诺怡 Python 笔记「北京普及科技中心」集训课程
诺怡 Python 笔记「北京普及科技中心」集训课程
Bornforthis1. Message
- 考试日期📅:9月28日
日程
2. 试课
2024-09-15 19:00:00
1. 八色卡 base card
- 复现时间:20分钟
2. 要求说明
- 按要求画出色卡对应图形的形状,做好边线条(如有)和填充颜色处理;(不考虑自动产生的箭头)
- 长方形的长为100,宽为50;
- 长方形从下到上,填充颜色代码分别是
black
;white
;gray
;边缘线颜色都是black
; - 圆的半径是34;
- 圆从左到右,填充颜色代码分别是
(255,0,0)
;(255,255,0)
;(0,128,0)
;其中中间的圆外边缘线颜色代码是(128,128,128)
; - 五角星的间隔顶点的边长为68;
- 五角星从下到上,颜色代码分别为
(0,0,1)
;(1,0.753,0.796)
; - A点坐标为
(0,0)
;B点坐标为(200,32)
;C点坐标为(270,32)
;D点坐标为(340,32)
;E点坐标为(420,32)
;F点坐标为(420,126)
。
3. 图示
- 图中包含一个长方形、三个圆形、两个五角星以及各个点标记(A, B, C, D, E, F)和坐标轴。
turtle.pensize(5)
# 设置画笔的粗细为 5turtle.pencolor('green')
# 设置画笔颜色为绿色- 思路:
- 先实现效果
- 然后再拆分空行,便于找规律
- 发现重复代码(重复的逻辑代码)——loop(循环实现)
- 注意⚠️:
- 列表创建语法不熟;
- 变量命名不能和 Python 内置函数相同;
- 函数使用要用
()
,不是[]
; - 有点小粗心;
- 复习
- for 循环
input()
- point: 画图
- 皇冠
- 使用 turtle 的 circle 画出多边形
1 | import turtle as t |
五环
1 | import turtle as t |
1 | import turtle # 导入 turtle 模块 |
1 | import turtle # 导入 turtle 模块 |
1 | import turtle as t |
- for 循环基础语法
1 | colors = ['red', 'yellow', 'blue', 'orange'] |
- zip
1 | positions = [(-120, 0), (0, 0), (120, 0), (-60, -60), (60, -60)] |
1 | a, b = (1, 200) |
1 | positions = [(-120, 0), (0, 0), (120, 0), (-60, -60), (60, -60)] |
1 | import turtle |
1 | import turtle |
3. for 循环语法集训
2024-09-17 15:10:00
1 | students_list = ["李雷", "韩梅梅", "马冬梅"] |
- range(start, end, sep)
- 默认从 0 开始
- start: 开始的数
- end: 结束的数(结束的数取不到)
- sep: 间隔
1 | for i in range(10): |
1 | for i in range(0, 10, 2): |
1 | for i in range(1, 10, 2): |
1 | student_list = ['李雷', '韩梅梅', '马冬梅'] |
操作如下列表,按要求输出目标结构:
student_list = ['李雷', '韩梅梅', '马冬梅']
输出如下结果:
1 | st1_李雷 |
- 代码:
1 | student_list = ['李雷', '韩梅梅', '马冬梅'] |
1 | for i in range(10): |
1 | for i in range(10): |
1 | i = 0 |
1 | numbers = [10, 2, 31, 4, 5, 6, 7, 8, 9, 10] |
1 | numbers = [10, 2, 31, 4, 5, 6, 7, 8, 9, 10] |
1 | import turtle |
1 | import turtle |
1 | import turtle as t |
1 | import turtle |
1 | import turtle as t |
- 列表的索引:
- 从左到右,下标从 0 开始;
- 从右到左,下标从 -1 开始;
- 提取单个元素
1 | numbers = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] |
- 提取多个元素
1 | numbers = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] |
- 提取不连续的元素
1 | numbers = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] |
打印 1 到 10:用 for 循环打印从 1 到 10 的数字。
1
2for i in range(1, 11):
print(i)打印偶数
1
2for i in range(2, 21, 2):
print(i)打印列表元素
1
2
3fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)倒序打印数字
1
2for i in range(10, 0, -1):
print(i)累加器
1
2
3
4total_sum = 0
for i in range(1, 101):
total_sum += i
print(total_sum)计算平方
1
2
3numbers = [1, 2, 3, 4, 5]
for number in numbers:
print(number ** 2)简单九九乘法表
1
2
3
4for i in range(1, 10):
for j in range(1, i + 1):
print(f"{i} * {j} = {i * j}", end=" ")
print()计算列表元素的长度
1
2
3words = ["dog", "cat", "elephant"]
for word in words:
print(len(word))查找最大值
1
2
3
4
5
6numbers = [3, 5, 7, 2, 8]
max_value = numbers[0]
for num in numbers:
if num > max_value:
max_value = num
print(max_value)统计元音
1
2
3
4
5
6
7s = "hello world"
vowels = "aeiou"
count = 0
for char in s:
if char in vowels:
count += 1
print(count)
斐波那契数列
1
2
3
4
5n = 10
a, b = 0, 1
for _ in range(n):
print(a)
a, b = b, a + b寻找质数
1
2
3
4
5
6
7
8for num in range(2, 101):
is_prime = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
print(num)冒泡排序
1
2
3
4
5
6
7arr = [5, 2, 9, 1, 5, 6]
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
print(arr)列表翻转
1
2
3
4
5lst = [1, 2, 3, 4, 5]
reversed_list = []
for i in range(len(lst)-1, -1, -1):
reversed_list.append(lst[i])
print(reversed_list)计算阶乘
1
2
3
4
5n = 5
factorial = 1
for i in range(1, n + 1):
factorial *= i
print(factorial)倒置字符串
1
2
3
4
5s = "abcdef"
reversed_s = ""
for char in s:
reversed_s = char + reversed_s
print(reversed_s)矩阵转置
1
2
3
4
5
6
7
8
9
10
11
12matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
transpose = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
transpose[j][i] = matrix[i][j]
print(transpose)统计单词出现次数
1
2
3
4
5
6
7
8
9sentence = "the quick brown fox jumps over the lazy dog"
words = sentence.split()
word_count = {}
for word in words:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count)二进制转换
1
2
3
4
5
6decimal = 10
binary = ""
while decimal > 0:
binary = str(decimal % 2) + binary
decimal //= 2
print(binary)合并两个有序列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16list1 = [1, 3, 5]
list2 = [2, 4, 6]
merged_list = []
i = j = 0
while i < len(list1) and j < len(list2):
if list1[i] < list2[j]:
merged_list.append(list1[i])
i += 1
else:
merged_list.append(list2[j])
j += 1
merged_list.extend(list1[i:])
merged_list.extend(list2[j:])
print(merged_list)
字母金字塔
1
2
3n = 4
for i in range(1, n + 1):
print((chr(64 + i) + " ") * i)蛇形矩阵
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28n = 3
matrix = [[0] * n for _ in range(n)]
num = 1
left, right, top, bottom = 0, n - 1, 0, n - 1
while left <= right and top <= bottom:
for i in range(left, right + 1):
matrix[top][i] = num
num += 1
top += 1
for i in range(top, bottom + 1):
matrix[i][right] = num
num += 1
right -= 1
for i in range(right, left - 1, -1):
matrix[bottom][i] = num
num += 1
bottom -= 1
for i in range(bottom, top - 1, -1):
matrix[i][left] = num
num += 1
left += 1
for row in matrix:
print(row)找出所有回文数
1
2
3for num in range(100, 1000):
if str(num) == str(num)[::-1]:
print(num)统计字符频率
1
2
3
4
5
6
7
8s = "hello world"
char_count = {}
for char in s:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
print(char_count)模拟骰子投掷
1
2
3
4
5
6
7
8import random
rolls = [0] * 6
for _ in range(100):
roll = random.randint(1, 6)
rolls[roll - 1] += 1
print(rolls)构建杨辉三角
1
2
3
4
5
6
7
8
9
10
11n = 5
triangle = []
for i in range(n):
row = [1] * (i + 1)
for j in range(1, i):
row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j]
triangle.append(row)
for row in triangle:
print(row)生成棋盘
1
2
3
4
5
6
7
8
9size = 8
for i in range(size):
row = ""
for j in range(size):
if (i + j) % 2 == 0:
row += "X "
else:
row += "O "
print(row)找出列表中出现频率最高的元素
1
2
3
4
5
6
7
8
9
10
11
12lst = [1, 3, 2, 1, 5, 1, 3, 2, 3, 3]
count_dict = {}
for num in lst:
if num in count_dict:
count_dict[num] += 1
else:
count_dict[num] = 1
max_count = max(count_dict.values())
most_frequent = [k for k, v in count_dict.items() if v == max_count]
print(most_frequent)递归实现
1
2
3
4
5
6
7
8
9n = 10
fib_series =
[0, 1]
for i in range(2, n):
next_num = fib_series[i - 1] + fib_series[i - 2]
fib_series.append(next_num)
print(fib_series[n - 1])文本冒泡排序
1
2
3
4
5
6
7
8
9text = "Sort these words by their length in ascending order"
words = text.split()
for i in range(len(words)):
for j in range(0, len(words) - i - 1):
if len(words[j]) > len(words[j + 1]):
words[j], words[j + 1] = words[j + 1], words[j]
print(" ".join(words))
这些代码涵盖了从简单的循环到更复杂的算法和数据结构操作,可以有效地帮助你理解和应用 for
循环。
4. 运算符复习
2024-09-18 20:08:23
算术运算符: 用于算术计算。
运算符 | 描述 | 例子 |
---|---|---|
+ |
加法运算符 | 1 + 1 = 2 |
- |
减法运算符 | 2 - 1 = 1 |
* |
乘法运算符 | 2 * 3 = 6 |
/ |
除法运算符 | 9 / 3 = 3.0 |
** |
指数运算符 | 2 ** 3 = 8 |
% |
取余运算符,计算余数 | 9 % 2 = 1 |
// |
除法取整运算符,计算商并去除其小数部分 | 9 // 2 = 4 |
tips: 9 / 2 = 4……1
1 | odd_num = 0 |
- 假设你有一个两位的整数,我们需要通过以下规则产生两个新的数字:
- 第一个新数字是原数字的两位数中的各个数字的和;
- 第二个新数字是原数字的反转(如原数字为 21,反转后的数字为 12)。
- 示例:
假设数字
num
为 91,那么你的代码应当输出两个数字:10(9和1的和)和19(91的反转)。假设数字
num
为 26,那么你的代码应当输出两个数字:8(2和6的和)和62(26的反转)。假设数字
num
为 18,那么你的代码应当输出两个数字:9(1和8的和)和81(18的反转)。
- 代码
1 | # 给定输入数字 |
- 比较运算符:比较值的大小
运算符 | 描述 | 例子 |
---|---|---|
> |
判断第一个运算对象是否大于第二个运算对象 | print(1 > 2) |
< |
判断第一个运算对象是否小于第二个运算对象 | print(1 < 2) |
>= |
判断第一个运算对象是否大于或等于第二个运算对象 | print(3 >= 3) |
<= |
判断第一个运算对象是否小于或等于第二个运算对象 | print(3 <= 4) |
== |
判断两个运算对象是否相同 | print(2 == 2) |
!= |
判断两个运算对象是否不相同 | print(2 != 1) |
试一试上面的例子,看看会输出上面结果?
在 Python 中,break 语句用于立即退出当前正在执行的循环,无论循环条件是否仍然为真。使用 break 可以提前结束循环,常用于当满足某个条件时不需要继续执行循环体的剩余部分。
注意:循环后的代码还是会继续执行的。
- for 循环代码示例
1 | for i in range(10): |
- while 循环代码示例,下面程序输出什么结果呢?
1 | i = 0 |
这段代码展示了一个无限循环(while True),它会一直执行,直到遇到 break 语句。这里,当变量 i 大于 5 时,循环会被中断。循环会打印从 0 到 5 的数字。
- 循环之后有代码的情况
1 | for i in range(10): |
continue 用于跳过当前循环的剩余部分,并直接进入下一次循环的判断。也就是说,当循环体内遇到 continue 语句时,会跳过该次循环中 continue 之后的代码,并直接进入下一次循环。
- for 循环代码示例
1 | for i in range(1, 6): |
在这个例子中,当 i 等于 3 时,continue 语句被触发,程序跳过了打印 3 的步骤,直接进入了下一次循环。因此输出中没有 3。
1 | # 编写一个函数 sum_total ,实现用户传入两个整数参数,进行求和。 |
以下是10道Python基础函数练习题,涵盖了函数定义、参数传递、返回值等基础知识:
定义一个求和函数
编写一个函数sum_numbers
,接受两个整数参数,返回它们的和。1
2
3def sum_numbers(a, b):
# Your code here
pass计算列表中元素的平均值
定义一个函数average
,接受一个列表作为参数,返回列表中所有元素的平均值。1
2
3def average(numbers):
# Your code here
pass判断奇偶数
编写一个函数is_even
,接受一个整数参数,返回True
表示偶数,False
表示奇数。1
2
3def is_even(num):
# Your code here
pass字符串反转
定义一个函数reverse_string
,接受一个字符串参数,返回该字符串的反转结果。1
2
3def reverse_string(s):
# Your code here
pass阶乘计算
编写一个函数factorial
,接受一个正整数参数n
,返回n
的阶乘。1
2
3def factorial(n):
# Your code here
pass检查质数
定义一个函数is_prime
,接受一个正整数参数,返回True
表示质数,False
表示合数。1
2
3def is_prime(num):
# Your code here
pass最大公约数
编写一个函数gcd
,接受两个整数参数,返回它们的最大公约数。1
2
3def gcd(a, b):
# Your code here
pass列表中最大值
定义一个函数find_max
,接受一个列表作为参数,返回列表中的最大值。1
2
3def find_max(numbers):
# Your code here
pass华氏温度转换为摄氏温度
编写一个函数fahrenheit_to_celsius
,接受一个表示华氏温度的参数,返回对应的摄氏温度。1
2
3def fahrenheit_to_celsius(fahrenheit):
# Your code here
pass斐波那契数列
定义一个函数fibonacci
,接受一个正整数参数n
,返回斐波那契数列的前n
项。
1 | def fibonacci(n): |
5. 函数与 return
2024-09-19 20:31:53
- 先用基础语法实现;
- 改写成 for 循环实现;(如果可以用循环的话)
- 再改写成函数实现;
6. 递归
递归就是在函数内部,自己调用自己;
2024-09-21 19:23:46
- 参考课件:Python 递归详解
- 求 n 的阶乘
- 直接使用循环实现:
1 | n = 9 |
- 递归实现
1 | def factorial(n): |
- 太阳花图案: 使用 turtle 模块绘制一个太阳花图案,花瓣数量可以设置为 6 到 12 之间,颜色渐变。
1 | import turtle as t |
- 螺旋线条: 利用递归或循环,绘制一个渐变的螺旋线条图形,随着线条变长,颜色从浅变深,线条逐渐变宽。
普通实现:
1 | import turtle as t |
递归实现:
1 | import turtle as t # 导入 turtle 模块,并将其别名为 t |
- 基本实现:
1 | import turtle as t |
- 递归实现
1 | import turtle as t |
7. 习题讲解
发布日期📅:2024-09-23 15:40:13
发布日期📅:2024-09-25 19:30:00
题目说明:
- 16 个正六边形大小相同,边长为 50;24 个等边三角形大小相同,边长为 50;
- 直线颜色代码为 “black”,正六边形颜色填充代码为 “red”,等边三角形颜色代码为 “blue”;
- 程序有效使用变量来调用图形相关数据;
- 程序中有效使用 for 循环语句的嵌套循环;
图片
思路:
- 正六边形内角和:720˚/6=120˚,所以 180˚ - 120˚ = 60˚。
- 画出正六边形:
1 | import turtle as t |
- 改写成 for 循环
1 | import turtle as t |
- 画出多个正六边形
注意:画出多个正多边形,需要得到两条线的高!
分析
1 | import turtle as t |
效果
我的代码:
1 | import turtle as t # 导入 turtle 模块并使用别名 t |
小宇代码:
1 | import turtle as t # 导入 turtle 模块并使用别名 t |
题目说明:
有一个名为 exam_scores.csv
的文件,文件包含三列数据:第一列是学生(即学生姓名),第二列是日期(即考试日期,格式为 YYYY-MM-DD
),第三列是分数(即考试分数,0-100 之间的整数)。
请使用 Python 进行简单的数据分析,完成以下任务(请确保代码简洁,注释明了)。
- 读取
exam_scores.csv
文件中的数据。 - 计算每个学生的平均考试分数。
- 使用
matplotlib
绘制折线图,横坐标为学生姓名,纵坐标为平均考试分数。
exam_scores.csv 数据
1 | 学生,日期,分数 |
代码:
- 读取
exam_scores.csv
文件:
1 | df_exam = pd.read_csv('exam_scores.csv') |
- 计算每个学生的平均考试分数:
1 | average_scores = df_exam.groupby('学生')['分数'].mean() |
- 绘制折线图:
1 | plt.figure(figsize=(10, 6)) |
- 完整代码
1 | import pandas as pd |
题目内容:
题目时间 | 10 分钟 |
---|---|
题目说明 | |
1. | 7 个圆大小相同,半径为 50 |
2. | 孤线颜色代码为 “black”,外圆颜色填充代码为 “red”,中心圆颜色代码为 “blue”,其他部分颜色为 “yellow” |
3. | 程序有效使用变量来调用图形相关数据 |
4. | 程序中有效使用循环语句 |
小宇代码:
1 | import turtle as t |
题目内容:
效果图
- 图中每条小线段的长度为20,相邻两个线段之间的夹角均为135度。
- 线段颜色代码为
"red"
。 - 线段粗细为5。
- 程序有效使用变量来调用图形相关数据。
- 程序中有效函数来精简代码。
注意:
- 在比赛中,如果能直接使用循环/递归实现,那就直接使用循环实现,如果不能,就先使用基本的方法,看似很笨,但关键可以得分!
- 不要被完美主义遮住眼睛,先实现,在优化。一步到位,一切将变得复杂!
- 直接实现 for、函数很难,先实现基础的,咱们一笔一笔的话会吧,把一笔一笔画了好之后。再去适当的加空行来查找规律。(其实在一笔一笔画的时候,心中已经有规律了。不过别急,等思路特别清晰了再去尝试。当然,先实现基础版的,再改进这样比赛才会稳。
1 | import turtle as t |
小宇代码:
1 | import turtle as t |
8. 考前辅导
2024-09-26 19:04:57
- 策略:
- 不用一次做到最好,这是很难的。
- 微信时不时需要升级,为什么需要升级?——迭代,迭代的目的:达到更好的效果。
- 那么微信公司牛不——牛!他们不能一次性把微信开发到最好吗?——为什么不能一次性开发到最好?
- 人不是机器,达不到最好;
- 时代潮流;
- 思路、思维的提升是需要时间,想法的完善是需要时间的;
- 先走路才能学跑;
- 先基础的实现,再去详细的优化;
- 先做自己能快速解决并且有把握的,
- 题型一致的,分都一样;
- 自己会的题型做了;
- 对复杂题 or 困难题:
- 奔溃、悲伤、捉急——一着急会怎么样?
- 出错
- 心态
- 问题拆分思想:把大问题拆分成小问题,小问题解决了,大问题也就解决了。
- 生活中一个常见的例子是搬家:
- 搬家本身是个大问题,涉及很多方面,比如打包、运输、清洁、新房整理等。如果你直接去想如何完成整个搬家的过程,可能会感到很复杂、压力很大。但如果把它拆分成几个小任务:
- 打包:按房间或物品类别分别打包,比如先打包衣服、书籍、厨具等。
- 安排运输:联系搬家公司或租车,把打包好的物品运送到新家。
- 清洁:搬家后打扫旧房,或者提前清理新房。
- 整理新家:到了新家之后,按房间将物品分类摆放。
- 这样每一步都是可控且容易解决的小问题。随着每个小问题被逐一解决,整个搬家的大问题自然也就迎刃而解了。
- 搬家本身是个大问题,涉及很多方面,比如打包、运输、清洁、新房整理等。如果你直接去想如何完成整个搬家的过程,可能会感到很复杂、压力很大。但如果把它拆分成几个小任务:
- 生活中一个常见的例子是搬家:
- 结合实际:Question 4,破解方法:
- 一步步来;
- 结合实际,你自己拿手画的时候,你会怎么画;
- 问题转换思想:
- 把一个问题转换成另一种问题;
- 求一个不规则图形面积,代表:没有具体公式来计算;
- 奔溃、悲伤、捉急——一着急会怎么样?
- 多看看代码,培养阅读代码的习惯,增强观察力;
1 | import turtle as t |
9. 练习题
发布日期📅:2024-09-27 18:03:01
效果图
1 | import turtle as t |
效果图
- 斜三角形为顶角 120 度的等腰三角形,腰长为 100;
- 中间为等腰三角形腰,高为 150;
- 线粗为 3;
- 图形尽可能居于中央;
效果图
- 棋盘长 90;
- 圆与棋盘线相距 5;
- 叉与边线相距 5;
- 图形居于中央;
实现代码:
1 | import turtle |
题目要求数据实现:
1 | import turtle |
1 | import turtle |
10. Other
1 | import turtle as t |
公众号:AI悦创【二维码】
AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发、Web、Linux」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh