Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
python打卡营学习资料
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
靓靓
python打卡营学习资料
Commits
65914396
Commit
65914396
authored
Sep 09, 2025
by
靓靓
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
dae896b1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
1170 additions
and
0 deletions
+1170
-0
DT_python_learning.ipynb
DT_python_learning.ipynb
+1170
-0
No files found.
DT_python_learning.ipynb
0 → 100644
View file @
65914396
{
"cells": [
{
"cell_type": "markdown",
"id": "f68b858d",
"metadata": {},
"source": [
"# 8.18 Day1 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "fb223e09",
"metadata": {},
"source": [
"作业安排:<br>使用 Jupyter 创建一个 .ipynb 文件,输出 \"Hello, Jupyter!\",并观察输出格式。"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "d4c0d92a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Hello Jupyter\n"
]
}
],
"source": [
"print(\"Hello Jupyter\")"
]
},
{
"cell_type": "markdown",
"id": "8d0de4b9",
"metadata": {},
"source": [
"# 8.19 Day2 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "0090a031",
"metadata": {},
"source": [
"作业安排:<br>1.创建5个不同类型的变量(整数、浮点数、字符串、布尔值)并输出它们的类型。<br>2.给定一个整数和一个浮点数,将它们相加并打印结果。(使用ipynb格式的文件)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "c8bc57a6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 <class 'int'>\n",
"1.2 <class 'float'>\n",
"hello <class 'str'>\n",
"True <class 'bool'>\n",
"None <class 'NoneType'>\n",
"2.2\n"
]
}
],
"source": [
"a = 1\n",
"b = 1.2\n",
"c = \"hello\"\n",
"d = True\n",
"e = None\n",
"print(a, type(a))\n",
"print(b, type(b))\n",
"print(c, type(c))\n",
"print(d, type(d))\n",
"print(e, type(e))\n",
"print(a+b)"
]
},
{
"cell_type": "markdown",
"id": "6503ee1a",
"metadata": {},
"source": [
"# 8.20 Day3 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "82b88f85",
"metadata": {},
"source": [
"作业安排:<br>编写程序,将一个浮点数转换为整数并输出结果,再将整数转换为字符串。(使用ipynb格式的文件)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "d7576a0a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"原始浮点数:\t5.3\t<class 'float'>\n",
"转换为整数:\t5\t<class 'int'>\n",
"转换为字符串:\t5\t<class 'str'>\n"
]
}
],
"source": [
"val_float = 5.3\n",
"vat_int = int(val_float)\n",
"vat_str = str(vat_int)\n",
"print(\"原始浮点数:\", val_float, type(val_float), sep='\\t')\n",
"print(\"转换为整数:\", vat_int, type(vat_int), sep='\\t')\n",
"print(\"转换为字符串:\", vat_str, type(vat_str), sep='\\t')"
]
},
{
"cell_type": "markdown",
"id": "62939667",
"metadata": {},
"source": [
"# 8.21 Day4 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "50450d23",
"metadata": {},
"source": [
"作业安排:<br>\n",
"假设你是一名老师,需要计算一个学生的最终成绩。<br>\n",
"作业平均分 (homework_avg) = 85<br>\n",
"期中考试分 (midterm) = 78<br>\n",
"期末考试分 (final) = 92<br>\n",
"成绩计算规则:最终成绩 = 作业平均分 * 30% + 期中考试分 * 30% + 期末考试分 * 40%<br>\n",
"请编写一个 Python 程序,计算该学生的最终成绩(保留一位小数),并判断他是否通过了考试(最终成绩 >= 60)。<br>\n",
"要求:<br>\n",
"1. 使用变量存储上述分数。<br>\n",
"2. 使用算术运算符(*, +, /)计算最终成绩。<br>\n",
"3. 使用比较运算符(>=)判断是否通过。<br>\n",
"4. 使用 print() 函数输出结果。<br>\n",
"最后,在代码中添加适当的注释,描述每一步操作的功能。<br>"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b8f96732",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"成绩为85.7,通过\n"
]
}
],
"source": [
"# 使用变量存储分数\n",
"homework_avg = 85\n",
"midterm = 78\n",
"final = 92\n",
"# 使用算术运算符((*,+,/)计算最终成绩\n",
"score = homework_avg*0.3 + midterm*0.3 + final*0.4\n",
"# 使用比较运算符(>=)判断是否通过\n",
"if score>=60:\n",
" # 使用 print()函数输出结果\n",
" print(f\"成绩为{score},通过\")\n",
"else:\n",
" print(f\"成绩为{score},不通过\")"
]
},
{
"cell_type": "markdown",
"id": "80c7e07e",
"metadata": {},
"source": [
"# 8.22 Day5 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "e61b2853",
"metadata": {},
"source": [
"作业安排:<br>定义一个字符串 s = \" Python is powerful. \",先去除两端空格,转换为大写,再以空格分割成列表,最后将列表中的每个单词用连字符连接起来。(使用ipynb格式的文件)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "19570fb6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Python is powerful.\n",
" PYTHON IS POWERFUL. \n",
"['Python', 'is', 'powerful.']\n",
"Python-is-powerful.\n"
]
}
],
"source": [
"# 1.定义一个字符串s;\n",
"s = \" Python is powerful. \"\n",
"# 2.去除两端空格;\n",
"print(s.strip())\n",
"# 3.转换为大写;\n",
"print(s.upper())\n",
"# 4.以空格分割成列表;\n",
"s_lst = s.split()\n",
"print(s_lst)\n",
"# 5.将列表中的每个单词用连字符`-`连接起来。\n",
"print(\"-\".join(s_lst))"
]
},
{
"cell_type": "markdown",
"id": "d7eaa00d",
"metadata": {},
"source": [
"# 8.23 Day6 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "5b8add93",
"metadata": {},
"source": [
"作业安排:<br>创建一个包含1到10的整数的列表,然后删除其中的偶数,最后将列表倒序排列。(使用ipynb格式的文件)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "816b182d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"创建列表 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
"删除偶数 [1, 3, 5, 7, 9]\n",
"倒序排列 [9, 7, 5, 3, 1]\n"
]
}
],
"source": [
"lst = [i+1 for i in range(10)]\n",
"print(\"创建列表\", lst)\n",
"lst = [i for i in lst if i%2]\n",
"print(\"删除偶数\",lst)\n",
"lst.reverse() # reverse()是一个原地操作,直接修改列表本身,而不是返回一个新的列表\n",
"print(\"倒序排列\", lst)"
]
},
{
"cell_type": "markdown",
"id": "38350b5e",
"metadata": {},
"source": [
"升级任务:<br>\n",
"编写一个程序,判断一个年份是否为闰年"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "21179721",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2012 是闰年\n"
]
}
],
"source": [
"# 从键盘接收输入\n",
"year = int(input(\"请输入一个年份:\"))\n",
"# 判断闰年标准\n",
"if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):\n",
" print(f\"{year} 是闰年\")\n",
"else:\n",
" print(f\"{year} 不是闰年\")"
]
},
{
"cell_type": "markdown",
"id": "0ba544d1",
"metadata": {},
"source": [
"# 8.25 Day7 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "8b9d2847",
"metadata": {},
"source": [
"作业安排:<br>\n",
"1.创建一个元组并尝试访问其中的元素。<br>2.用集合去掉列表 [\"红\", \"蓝\", \"红\", \"黄\"] 里重复的东西。(使用ipynb格式的文件)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "cab65222",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"原元组: (1, 2, 3, 4)\n",
"第一个元素 1\n",
"最后一个元素 4\n",
"前3个元素 (1, 2, 3)\n",
"* * * * * * * * * * * * * * * * * * * * \n",
"原列表: ['红', '蓝', '红', '黄']\n",
"去重后的列表: ['红', '蓝', '黄']\n"
]
}
],
"source": [
"test_tuple = (1, 2, 3, 4)\n",
"print(\"原元组:\", test_tuple)\n",
"print(\"第一个元素\", test_tuple[0])\n",
"print(\"最后一个元素\", test_tuple[-1])\n",
"print(\"前3个元素\", test_tuple[:3])\n",
"print(\"* \"*20)\n",
"color = [\"红\", \"蓝\", \"红\", \"黄\"]\n",
"print(\"原列表:\", color)\n",
"print(\"去重后的列表:\", list(set(color)))"
]
},
{
"cell_type": "markdown",
"id": "15f95c4f",
"metadata": {},
"source": [
"# 8.26 Day8 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "767247f4",
"metadata": {},
"source": [
"作业安排:<br>\n",
"创建一个字典,存储你的姓名、年龄和城市,然后添加一项“爱好”,(值为列表,包含至少两个爱好)。最后,打印出所有的键和值。(使用ipynb格式的文件)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "1cfdbbad",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"视图打印:\n",
"dict_keys(['姓名', '年龄', '城市', '爱好'])\n",
"dict_values(['栀柚', 18, '上海', ['唱歌', '跳舞']])\n",
"dict_items([('姓名', '栀柚'), ('年龄', 18), ('城市', '上海'), ('爱好', ['唱歌', '跳舞'])])\n",
"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <class 'list'>\n",
"遍历打印:\n",
"姓名: 栀柚\n",
"年龄: 18\n",
"城市: 上海\n",
"爱好: ['唱歌', '跳舞']\n"
]
}
],
"source": [
"person = {\"姓名\":\"栀柚\", \"年龄\": 18, \"城市\": \"上海\"}\n",
"person[\"爱好\"] = [\"唱歌\", \"跳舞\"]\n",
"# 使用视图\n",
"print(\"视图打印:\", person.keys(), person.values(), person.items(), sep=\"\\n\")\n",
"\n",
"print(\"* \" * 50, type([\"唱歌\", \"跳舞\"]))\n",
"# 使用遍历\n",
"print(\"遍历打印:\")\n",
"for key, value in person.items():\n",
" print(f\"{key}: {value}\")"
]
},
{
"cell_type": "markdown",
"id": "13b55808",
"metadata": {},
"source": [
"# 8.27 Day9 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "ecadf214",
"metadata": {},
"source": [
"作业安排:<br>编写程序,根据用户输入的年龄,判断并输出是否为成年人。(使用ipynb格式的文件)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "8181c05a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"成年\n"
]
}
],
"source": [
"while True:\n",
" try:\n",
" age = int(input(\"请输入年龄:\"))\n",
" if age < 0 :\n",
" print(\"年龄不能为负数,请输入一个有效的年龄。\")\n",
" else:\n",
" if age < 18:\n",
" print(\"未成年\")\n",
" else:\n",
" print(\"成年\")\n",
" break\n",
" except ValueError:\n",
" print(\"请输入一个有效的数字。\")"
]
},
{
"cell_type": "markdown",
"id": "c000177d",
"metadata": {},
"source": [
"升级任务:<br>\n",
"【输入一个成绩(0-100),输出对应等级】: <br>\n",
"90-100: A<br>\n",
"80-89: B<br>\n",
"70-79: C<br>\n",
"60-69: D<br>\n",
"<60: F<br>\n",
"【要求】:使用 if-elif-else,并处理非法输入(如 >100 或 <0) <br>"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c52f029e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"成绩为:70, 等级为:C\n"
]
}
],
"source": [
"try:\n",
" score = int(input(\"输入一个成绩(0-100):\"))\n",
" if score<0 or score>100:\n",
" print(\"输入成绩无效,请输入0到100之间的数字!\")\n",
" elif score >= 90 :\n",
" grade = \"A\"\n",
" print(f\"成绩为:{score}, 等级为:{grade}\")\n",
" elif score >= 80:\n",
" grade = \"B\"\n",
" print(f\"成绩为:{score}, 等级为:{grade}\")\n",
" elif score >= 70:\n",
" grade = \"C\"\n",
" print(f\"成绩为:{score}, 等级为:{grade}\")\n",
" elif score >= 60 :\n",
" grade = \"D\"\n",
" print(f\"成绩为:{score}, 等级为:{grade}\")\n",
" else:\n",
" grade = \"F\"\n",
" print(f\"成绩为:{score}, 等级为:{grade}\")\n",
" \n",
"except ValueError:\n",
" print(\"输入无效,请输入一个数字!\")"
]
},
{
"cell_type": "markdown",
"id": "eb260440",
"metadata": {},
"source": [
"# 8.28 Day10 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "c66e2a0a",
"metadata": {},
"source": [
"作业安排:<br>\n",
"1.使用 for 循环打印1到100中所有3的倍数。<br>2.使用 while 循环求1到100的总和。(使用ipynb格式的文件)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "9c0f8443",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"第一题:\n",
"3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 \n",
"第二题:\n",
"1-100的总和是: 5050\n"
]
}
],
"source": [
"print(\"第一题:\")\n",
"for i in range(1, 101):\n",
" if i % 3 == 0:\n",
" print(i, end=' ')\n",
"\n",
"print(\"\\n第二题:\")\n",
"\n",
"k = 1\n",
"sum = 0\n",
"while k <= 100:\n",
" sum += k\n",
" k += 1\n",
"print(\"1-100的总和是:\", sum)"
]
},
{
"cell_type": "markdown",
"id": "6b6d4684",
"metadata": {},
"source": [
"# 8.29 Day11 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "f4d6c2be",
"metadata": {},
"source": [
"作业安排:<br>定义一个函数,计算两个数字的和,并返回结果。(使用ipynb格式的文件)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "f6d887d1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"输入无效,请确保输入的是数字!\n"
]
}
],
"source": [
"def add(a, b):\n",
" return a + b\n",
"\n",
"try:\n",
" num1 = float(input(\"请输入第一个数字:\"))\n",
" num2 = float(input(\"请输入第二个数字:\"))\n",
" result = add(num1, num2)\n",
" print(f\"{num1}和{num2}这两个数字的和是:{result}\")\n",
"except ValueError:\n",
" print(\"输入无效,请确保输入的是数字!\")"
]
},
{
"cell_type": "markdown",
"id": "aa30b2b9",
"metadata": {},
"source": [
"# 8.30 Day12 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "ab79fc8f",
"metadata": {},
"source": [
"作业安排:<br>创建一个文本文件,写入3行你喜欢的名言。然后读取这个文件,并打印出每一行(带行号)。(使用ipynb格式的文件)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "153f49c0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1行:Data is the new oil, AI is the new electricity.\n",
"第2行:The future is already here — it’s just not evenly distributed yet.\n",
"第3行:The best preparation for tomorrow is doing your best today.\n"
]
}
],
"source": [
"path = r\"kp_open.txt\"\n",
"quotes = [\n",
" \"Data is the new oil, AI is the new electricity.\", \n",
" \"The future is already here — it’s just not evenly distributed yet.\",\n",
" \"The best preparation for tomorrow is doing your best today.\"\n",
"]\n",
"with open(path, \"w\") as f:\n",
" for quote in quotes:\n",
" f.write(quote+\"\\n\")\n",
"with open(path, \"r\") as f:\n",
" for i, line in enumerate(f.readlines()):\n",
" print(f\"第{i+1}行:{line.strip()}\")\n"
]
},
{
"cell_type": "markdown",
"id": "825dde22",
"metadata": {},
"source": [
"# 9.01 Day13 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "b8b5baae",
"metadata": {},
"source": [
"作业安排:<br>定义一个简单的类 Person,包含属性 name 和 age,以及方法 greet() 用来打印“你好,{name}!”。创建该类的实例并调用方法。"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "afde388c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"你好,栀柚! \n"
]
}
],
"source": [
"class Person:\n",
" def __init__(self, name, age):\n",
" self.name = name\n",
" self.age = age\n",
" \n",
" def greet(self):\n",
" print(f\"你好,{self.name}! \")\n",
"\n",
"p = Person(\"栀柚\", 18)\n",
"p.greet()"
]
},
{
"cell_type": "markdown",
"id": "eedf4c8f",
"metadata": {},
"source": [
"# 9.02 Day14 学习打卡 栀柚"
]
},
{
"cell_type": "markdown",
"id": "0f90a288",
"metadata": {},
"source": [
"## 项目一:简易记事本\n",
"\n",
"本项目实现一个命令行版的“记事本”程序。用户可以添加笔记、查看所有笔记,并在退出时自动保存到本地文件。下次启动时会自动加载历史记录。"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "7e7eee84",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"菜单:\n",
"1. 添加\n",
"2. 查看\n",
"3. 退出\n",
"无笔记\n",
"笔记已添加\n",
"笔记已保存,程序退出\n"
]
}
],
"source": [
"import os\n",
"\n",
"notes = []\n",
"if os.path.exists(\"notes.txt\"):\n",
" with open(\"notes.txt\", \"r\", encoding=\"utf-8\") as f:\n",
" print([note.split() for note in f.readlines()])\n",
"\n",
"print(\"\\n菜单:\")\n",
"print(\"1. 添加\")\n",
"print(\"2. 查看\")\n",
"print(\"3. 退出\")\n",
"\n",
"while True:\n",
" choice = input(\"请输入(1/2/3):\")\n",
" if choice == \"1\":\n",
" note = input(\"请输入笔记内容:\")\n",
" notes.append(note)\n",
" print(\"笔记已添加\")\n",
" elif choice == \"2\":\n",
" if notes:\n",
" for i, note in enumerate(notes, 1):\n",
" print(f\"{i}: {note}\")\n",
" else:\n",
" print(\"无笔记\")\n",
" elif choice == \"3\":\n",
" with open(\"notes.txt\", \"w\", encoding=\"utf-8\") as f:\n",
" for note in notes:\n",
" f.write(note+'\\n')\n",
" print(\"笔记已保存,程序退出\")\n",
" break\n",
" else:\n",
" print(\"无效的选择,请重新输入。\")"
]
},
{
"cell_type": "markdown",
"id": "78f23e06",
"metadata": {},
"source": [
"## 项目二:学生成绩管理系统\n",
"\n",
"模拟一个学生成绩管理系统,支持多学生信息管理,自动计算平均分、等级和通过情况并进行统计分析。"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "541716a8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"学生成绩管理系统\n",
"姓名: 张三 | 数学: 95, 英语: 88, 语文: 90 | 平均分: 91.00 | 等级: A | 结果: 通过\n",
"姓名: 李四 | 数学: 60, 英语: 75, 语文: 70 | 平均分: 68.33 | 等级: D | 结果: 通过\n",
"姓名: 王五 | 数学: 85, 英语: 92, 语文: 90 | 平均分: 89.00 | 等级: B | 结果: 通过\n",
"姓名: 赵六 | 数学: 60, 英语: 58, 语文: 55 | 平均分: 57.67 | 等级: F | 结果: 未通过\n",
"姓名: 孙七 | 数学: 82, 英语: 75, 语文: 78 | 平均分: 78.33 | 等级: C | 结果: 通过\n",
"共有5名学生, 4人通过考试,最高平均分为91.0(张三)\n"
]
}
],
"source": [
"students = [\n",
" {\"姓名\": \"张三\", \"语文\": 90, \"数学\": 95, \"英语\": 88},\n",
" {\"姓名\": \"李四\", \"语文\": 70, \"数学\": 60, \"英语\": 75},\n",
" {\"姓名\": \"王五\", \"语文\": 90, \"数学\": 85, \"英语\": 92},\n",
" {\"姓名\": \"赵六\", \"语文\": 55, \"数学\": 60, \"英语\": 58},\n",
" {\"姓名\": \"孙七\", \"语文\": 78, \"数学\": 82, \"英语\": 75}\n",
"]\n",
"def calculate_avg(socres):\n",
" return sum(socres) / len(socres)\n",
"\n",
"def get_grade(socre):\n",
" if socre >= 90:\n",
" return 'A'\n",
" elif socre >= 80:\n",
" return 'B'\n",
" elif socre >= 70:\n",
" return 'C'\n",
" elif socre >= 60:\n",
" return 'D'\n",
" else:\n",
" return 'F'\n",
"\n",
"def print_details(students):\n",
" for student in students:\n",
" socres = [student['语文'], student['数学'], student['英语']]\n",
" avg_score = calculate_avg(socres)\n",
" grade = get_grade(avg_score)\n",
" passed = '通过' if avg_score>=60 else '未通过'\n",
" print(f\"姓名: {student['姓名']} | 数学: {student['数学']}, 英语: {student['英语']}, 语文: {student['语文']} | 平均分: {avg_score:.2f} | 等级: {grade} | 结果: {passed}\")\n",
"\n",
"def summary(students):\n",
" total_students = len(students)\n",
" passed_students = 0\n",
" highest_score = 0\n",
" highest_score_student = None\n",
"\n",
" for student in students:\n",
" socres = [student['语文'], student['数学'], student['英语']]\n",
" avg_score = calculate_avg(socres)\n",
" if avg_score >= 60:\n",
" passed_students += 1\n",
" if avg_score > highest_score:\n",
" highest_score = avg_score\n",
" highest_score_student = student['姓名']\n",
" print(f\"共有{total_students}名学生, {passed_students}人通过考试,最高平均分为{highest_score:.1f}({highest_score_student})\")\n",
"\n",
"print('学生成绩管理系统')\n",
"print_details(students)\n",
"summary(students)"
]
},
{
"cell_type": "markdown",
"id": "739ec197",
"metadata": {},
"source": [
"## 项目三:猜数字游戏\n",
"\n",
"编写一个有趣的“猜数字”游戏:程序随机生成 1~100 的整数,玩家不断猜测,系统提示“太大”或“太小”,直到猜中为止。"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "62f73f3e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"猜数字游戏:1-100的整数\n",
"你的输入为50,太大了,再试试\n",
"你的输入为25,太小了,再试试\n",
"你的输入为38,太大了,再试试\n",
"你的输入为32,太大了,再试试\n",
"你的输入为28,太大了,再试试\n",
"你的输入为26,太小了,再试试\n",
"恭喜你!猜中了!答案是27。你用了7次。\n",
"结束\n"
]
}
],
"source": [
"import random\n",
"\n",
"while True:\n",
" number = random.randint(1, 100)\n",
" attempts = 0\n",
" print(\"猜数字游戏:1-100的整数\")\n",
"\n",
" while True:\n",
" try:\n",
" guess = int(input(\"请输入一个1-100的整数:\"))\n",
" attempts += 1\n",
"\n",
" if guess<1 or guess>100:\n",
" print(\"请输入一个1-100的整数:\")\n",
" continue\n",
"\n",
" if guess < number:\n",
" print(f\"你的输入为{guess},太小了,再试试\")\n",
" elif guess > number:\n",
" print(f\"你的输入为{guess},太大了,再试试\")\n",
" else:\n",
" print(f\"恭喜你!猜中了!答案是{number}。你用了{attempts}次。\")\n",
" break\n",
" except ValueError:\n",
" print(\"请输入一个有效的数字。\")\n",
" trymore = input(\"还继续玩吗?(y/n)\").strip().lower()\n",
" if trymore != 'y':\n",
" print('结束')\n",
" break\n"
]
},
{
"cell_type": "markdown",
"id": "b5a59ca0",
"metadata": {},
"source": [
"## 项目四:天气数据文本分析器\n",
"\n",
"本项目要求你对一个已有的天气数据文件 weather data.txt 进行分析,提取关键信息并生成一份完整的文本报告。你将练习如何从真实格式的文本中解析数据,并进行基础统计分析。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "41c2f1d3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"天气数据分析报告\n",
"===================\n",
"最高温度: 20°C (广州, 2024-01-07)\n",
"最低温度: -5°C (北京, 2024-01-08)\n",
"\n",
"每个城市的平均温度:\n",
"北京: 0.25°C\n",
"上海: 10.00°C\n",
"广州: 19.00°C\n",
"\n",
"每种天气出现的次数:\n",
"晴: 4次\n",
"雪: 2次\n",
"雨: 2次\n",
"阴: 1次\n",
"多云: 1次\n"
]
}
],
"source": [
"import csv\n",
"from collections import defaultdict\n",
"\n",
"\n",
"def read_weather_data(file_path):\n",
" with open(file_path, mode='r', encoding='utf-8') as file:\n",
" reader = csv.DictReader(file)\n",
" data = [row for row in reader]\n",
" return data\n",
"\n",
"# 找出最高温和最低温的记录\n",
"def find_temperature_extremes(data):\n",
"\n",
" highest_temp_record = max(data, key=lambda x: int(x['temperature']))\n",
" lowest_temp_record = min(data, key=lambda x: int(x['temperature']))\n",
"\n",
" return highest_temp_record, lowest_temp_record\n",
"\n",
"# 计算每个城市的平均温度\n",
"def calculate_average_temperatures(data):\n",
" city_temperatures = defaultdict(list)\n",
" for record in data:\n",
" city = record['city']\n",
" temp = int(record['temperature'])\n",
" city_temperatures[city].append(temp)\n",
" \n",
" average_temperatures = {city: sum(temps) / len(temps) for city, temps in city_temperatures.items()}\n",
" return average_temperatures\n",
"\n",
"# 统计每种天气出现的次数\n",
"def count_weather_occurrences(data):\n",
" weather_counts = defaultdict(int)\n",
" for record in data:\n",
" weather = record['weather']\n",
" weather_counts[weather] += 1\n",
" return weather_counts\n",
"\n",
"# 输出\n",
"def generate_report(data):\n",
" highest_temp_record, lowest_temp_record = find_temperature_extremes(data)\n",
" average_temperatures = calculate_average_temperatures(data)\n",
" weather_counts = count_weather_occurrences(data)\n",
"\n",
" print(\"\\n天气数据分析报告\")\n",
" print(\"===================\")\n",
" print(f\"最高温度: {highest_temp_record['temperature']}°C ({highest_temp_record['city']}, {highest_temp_record['date']})\")\n",
" print(f\"最低温度: {lowest_temp_record['temperature']}°C ({lowest_temp_record['city']}, {lowest_temp_record['date']})\")\n",
" print(\"\\n每个城市的平均温度:\")\n",
" for city, avg_temp in average_temperatures.items():\n",
" print(f\"{city}: {avg_temp:.2f}°C\")\n",
" print(\"\\n每种天气出现的次数:\")\n",
" for weather, count in weather_counts.items():\n",
" print(f\"{weather}: {count}次\")\n",
"\n",
"# 主程序\n",
"if __name__ == \"__main__\":\n",
" file_path = 'weather_data.txt'\n",
" weather_data = read_weather_data(file_path)\n",
" generate_report(weather_data)"
]
},
{
"cell_type": "markdown",
"id": "b85b11cf",
"metadata": {},
"source": [
"## 项目五:简易图书馆里系统(面向对象版)\n",
"\n",
"使用面向对象方式实现一个图书管理系统,支持添加、删除、查找书籍,并将数据保存到 .txt 文本文件中实现持久化存储。"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5e2b361b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"菜单:\n",
"1. 添加书籍\n",
"2. 删除书籍\n",
"3. 查找书籍\n",
"4. 显示所有书籍\n",
"5. 退出\n",
"馆藏共3本书\n",
"《五一》 | 作者:张三 | ISBN:5555\n",
"《端午》 | 作者:王五 | ISBN:6666\n",
"《周一》 | 作者:李四 | ISBN:7878\n",
"isbn为7878的书籍已删除。\n",
"馆藏共2本书\n",
"《五一》 | 作者:张三 | ISBN:5555\n",
"《端午》 | 作者:王五 | ISBN:6666\n",
"书籍《国庆》已添加。\n",
"馆藏共3本书\n",
"《五一》 | 作者:张三 | ISBN:5555\n",
"《端午》 | 作者:王五 | ISBN:6666\n",
"《国庆》 | 作者:赵六 | ISBN:1001\n",
"已找到与“一”相关的书籍:\n",
"《五一》 | 作者:张三 | ISBN:5555\n",
"退出程序。\n"
]
}
],
"source": [
"import os\n",
"class Book:\n",
" def __init__(self, title, author, isbn):\n",
" self.title = title\n",
" self.author = author\n",
" self.isbn = isbn\n",
"\n",
" def __str__(self):\n",
" return f\"《{self.title}》 | 作者:{self.author} | ISBN:{self.isbn}\"\n",
"\n",
"class Library:\n",
" def __init__(self, filename='library.txt'):\n",
" self.filename = filename\n",
" self.books = self.load_books()\n",
"\n",
" def load_books(self):\n",
" if os.path.exists(self.filename):\n",
" with open(self.filename, 'r', encoding='utf-8') as f:\n",
" books = [Book(*line.strip().split('|')) for line in f.readlines()]\n",
" return books\n",
" return []\n",
"\n",
" def save_books(self):\n",
" with open(self.filename, 'w', encoding='utf-8') as f:\n",
" for book in self.books:\n",
" f.write(f\"{book.title}|{book.author}|{book.isbn}\\n\")\n",
"\n",
" def add_book(self, book):\n",
" self.books.append(book)\n",
" self.save_books()\n",
"\n",
" def remove_book(self, isbn):\n",
" self.books = [book for book in self.books if book.isbn != isbn]\n",
" self.save_books()\n",
"\n",
" def find_by_title(self, title):\n",
" return [book for book in self.books if title in book.title]\n",
"\n",
" def display_all(self):\n",
" print(f\"馆藏共{len(self.books)}本书\")\n",
" for book in self.books:\n",
" print(book)\n",
"\n",
"def main():\n",
" library = Library()\n",
" print(\"\\n菜单:\")\n",
" print(\"1. 添加书籍\")\n",
" print(\"2. 删除书籍\")\n",
" print(\"3. 查找书籍\")\n",
" print(\"4. 显示所有书籍\")\n",
" print(\"5. 退出\")\n",
" while True:\n",
" choice = input(\"请根据菜单数字输入选项:\")\n",
"\n",
" if choice == '1':\n",
" title = input(\"输入书名:\")\n",
" author = input(\"输入作者:\")\n",
" isbn = input(\"输入ISBN:\")\n",
" library.add_book(Book(title, author, isbn))\n",
" print(f\"书籍《{title}》已添加。\")\n",
"\n",
" elif choice == '2':\n",
" isbn = input(\"输入要删除的书籍ISBN:\")\n",
" title = library.remove_book(isbn)\n",
" print(f\"isbn为{isbn}的书籍已删除。\")\n",
"\n",
" elif choice == '3':\n",
" title = input(\"输入要查找的书籍标题:\")\n",
" results = library.find_by_title(title)\n",
" if results:\n",
" print(f\"已找到与“{title}”相关的书籍:\")\n",
" for book in results:\n",
" print(book)\n",
" else:\n",
" print(\"未找到相关书籍。\")\n",
"\n",
" elif choice == '4':\n",
" library.display_all()\n",
"\n",
" elif choice == '5':\n",
" print(\"退出程序。\")\n",
" break\n",
" else:\n",
" print(\"无效的选项,请重新输入。\")\n",
"\n",
"if __name__ == \"__main__\":\n",
" main()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "torch",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.23"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment