Commit 65914396 by 靓靓

Upload New File

parent dae896b1
{
"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
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment