{ "cells": [ { "cell_type": "markdown", "id": "b7f9ce31", "metadata": {}, "source": [ "# 一、熟悉python基础语法和jupyter notebook的使用" ] }, { "cell_type": "markdown", "id": "c2b4b112", "metadata": {}, "source": [ "1)输出语句" ] }, { "cell_type": "code", "execution_count": 15, "id": "b1ed8417", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, Python!\n" ] } ], "source": [ "print (\"Hello, Python!\")" ] }, { "cell_type": "markdown", "id": "de5a4b48", "metadata": {}, "source": [ "2)行和缩进" ] }, { "cell_type": "code", "execution_count": 16, "id": "7268bae8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "正确的缩进格式\n", "错误的缩进格式\n" ] } ], "source": [ "#python中通过缩进来进行模块编写\n", "if True:\n", " print (\"正确的缩进格式\")\n", "else:\n", " print (\"False\")\n", "print (\"错误的缩进格式\")" ] }, { "cell_type": "markdown", "id": "5b920f79", "metadata": {}, "source": [ "3)注释使用" ] }, { "cell_type": "code", "execution_count": 17, "id": "1ac7412a", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "单行注释\n", "多行注释\n" ] } ], "source": [ "# 单行注释用'#'\n", "print (\"单行注释\") # 第一个注释\n", "\n", "# 多行注释使用三个单引号或三个双引号\n", "\n", "'''\n", "这是多行注释,使用单引号\n", "这是多行注释,使用单引号\n", "'''\n", "\"\"\"\n", "这是多行注释,使用双引号\n", "这是多行注释,使用双引号\n", "\"\"\"\n", "print (\"多行注释\") # 第二个注释\n" ] }, { "cell_type": "markdown", "id": "7e14475e", "metadata": {}, "source": [ "4)代码组" ] }, { "cell_type": "code", "execution_count": 18, "id": "82836cb7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "num为2\n" ] } ], "source": [ "#缩进相同的一组语句构成一个代码块,我们称之代码组\n", "num=2\n", "if num==1 : \n", " print(\"num为1\") \n", "elif num==2 : \n", " print(\"num为2\") \n", "else : \n", " print(\"num为3\")" ] }, { "cell_type": "markdown", "id": "7f44b00c", "metadata": {}, "source": [ "5)变量类型" ] }, { "cell_type": "code", "execution_count": 19, "id": "3033cb49", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "13\n", "130.0\n", "Taylor\n" ] } ], "source": [ "'''\n", "Python 中的变量赋值不需要类型声明\n", "每个变量在内存中创建,都包括变量的标识,名称和数据这些信息\n", "每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建\n", "'''\n", "counter = 13 # 赋值整型变量\n", "miles = 130.0 # 浮点型\n", "name = \"Taylor\" # 字符串\n", " \n", "print(counter)\n", "print(miles)\n", "print(name)" ] }, { "cell_type": "markdown", "id": "a4dfb10c", "metadata": {}, "source": [ "6)input的使用" ] }, { "cell_type": "code", "execution_count": 20, "id": "ed32f1f5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a的类型: \n", "b的类型: \n" ] } ], "source": [ "#input接收任意输入,将所有输入默认为字符串处理,并返回字符串类型\n", "a = input(\"input:\") # 输入整数\n", "print(\"a的类型:\",type(a)) \n", "b = input(\"input:\") # 输入字符串\n", "print(\"b的类型:\",type(b))" ] }, { "cell_type": "code", "execution_count": 21, "id": "3cf5752b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "r1,r2,r3: 1 2 3\n" ] } ], "source": [ "#需要输入多个值时,可以考虑string中的split函数\n", "r1,r2,r3 = (input(\"input:\").split(\" \"))\n", "r1= int(r1)\n", "r2= int(r2)\n", "r3= int(r3)\n", "print(\"r1,r2,r3:\",r1,r2,r3)" ] }, { "cell_type": "markdown", "id": "5a4179e7", "metadata": {}, "source": [ "7)函数的使用" ] }, { "cell_type": "code", "execution_count": 22, "id": "5cbd51c3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello Python!\n" ] } ], "source": [ "#函数示例1\n", "def hello() :\n", " print(\"Hello Python!\")\n", "\n", "hello()" ] }, { "cell_type": "code", "execution_count": 23, "id": "0b751722", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "width = 13 height = 130 area = 1690\n" ] } ], "source": [ "#函数示例2\n", "# 计算面积函数\n", "def area(width, height):\n", " return width * height\n", "\n", "w = 13\n", "h = 130\n", "print(\"width =\", w, \" height =\", h, \" area =\", area(w, h))" ] }, { "cell_type": "markdown", "id": "992131d9", "metadata": {}, "source": [ "8)列表" ] }, { "cell_type": "code", "execution_count": 24, "id": "f3aa2151", "metadata": {}, "outputs": [], "source": [ "#列表的数据项不需要具有相同的类型,只要把逗号分隔的不同的数据项使用方括号括起来即可\n", "list = ['Intelligent Systems', 2025 , 'Engineering' , 1010]\n" ] }, { "cell_type": "code", "execution_count": 25, "id": "4c464bfd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1010\n", "Engineering\n" ] } ], "source": [ "#逆向索引输出列表\n", "print( list[-1] )\n", "print( list[-2] )" ] }, { "cell_type": "code", "execution_count": 26, "id": "b8a7df9b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Intelligent Systems', 2025, 'Engineering', 1010]\n" ] } ], "source": [ "#遍历列表\n", "print( list[0:4] )" ] }, { "cell_type": "code", "execution_count": 27, "id": "10c6d154", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Intelligent Systems', 2025, 'Engineering', 1012]\n" ] } ], "source": [ "#列表修改\n", "list[3]=1012\n", "print( list )" ] }, { "cell_type": "code", "execution_count": 28, "id": "3e4033a9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Intelligent Systems', 2025, 'Engineering', 1012, 2026]\n" ] } ], "source": [ "#列表加入新元素\n", "list.append(2026)\n", "print( list )" ] }, { "cell_type": "code", "execution_count": 29, "id": "8e841d3a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Intelligent Systems', 'Engineering', 1012, 2026]\n" ] } ], "source": [ "#列表删除元素\n", "del list[1]\n", "print( list )" ] }, { "cell_type": "markdown", "id": "20b61f61", "metadata": {}, "source": [ "9)循环" ] }, { "cell_type": "code", "execution_count": 30, "id": "94b4eb59", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "while循环:\n", "0\n", "1\n", "2\n", "3\n", "4\n", "5\n", "6\n", "7\n", "8\n", "9\n", "10\n", "11\n", "12\n" ] } ], "source": [ "#while循环\n", "print('while循环:')\n", "num=0\n", "while num<13 :\n", " print(num)\n", " num += 1" ] }, { "cell_type": "code", "execution_count": 31, "id": "ea934a22", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "while-else循环:\n", "true\n", "false\n" ] } ], "source": [ "#while-else循环\n", "\n", "print('while-else循环:')\n", "symbol=True\n", "while symbol:\n", " print(\"true\")\n", " symbol=False\n", "else:\n", " print(\"false\")" ] }, { "cell_type": "code", "execution_count": 32, "id": "820b2a06", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "for循环:\n", "0\n", "1\n", "2\n", "3\n", "4\n", "5\n", "6\n", "7\n", "8\n", "9\n", "10\n", "11\n", "12\n" ] } ], "source": [ "#for循环\n", "print('for循环:')\n", "for i in range(0,13) :\n", " print(i)" ] }, { "cell_type": "code", "execution_count": 33, "id": "61d6e4bf", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "break:\n", "8\n", "7\n", "6\n", "over!\n" ] } ], "source": [ "#break和continue\n", "print('break:')\n", "i=9\n", "while i > 0:\n", " i -= 1\n", " print(i)\n", " if i == 6: \n", " break\n", "print(\"over!\")" ] }, { "cell_type": "code", "execution_count": 34, "id": "046fa5f7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "continue:\n", "8\n", "7\n", "5\n", "4\n", "3\n", "2\n", "1\n", "0\n", "over!\n" ] } ], "source": [ "print('continue:')\n", "i=9\n", "while i > 0:\n", " i -= 1\n", " if i == 6: \n", " continue\n", " print(i)\n", "print(\"over!\")" ] }, { "cell_type": "markdown", "id": "a78b05cb", "metadata": {}, "source": [ "10)模块导入" ] }, { "cell_type": "code", "execution_count": 35, "id": "d56e8ccc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "命令行参数如下:\n", "/home/atrix/miniconda3/lib/python3.13/site-packages/ipykernel_launcher.py\n", "--f=/run/user/1000/jupyter/runtime/kernel-v35e8009bb204139bdd61c89c4f17cf8b2cce7ca9b.json\n" ] } ], "source": [ "#想使用 Python 源文件,只需在另一个源文件里执行 import 语句\n", "import sys\n", " \n", "print('命令行参数如下:')\n", "for i in sys.argv:\n", " print(i)" ] }, { "cell_type": "code", "execution_count": 36, "id": "d7e4bdda", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x= [0 1 2]\n", "y= [ 140245661690688 547191536 86989327015346176]\n", "z= [0 0 0]\n", "a= [ 1. 7. 13.]\n" ] } ], "source": [ "import numpy as np\n", "#简单介绍使用numpy库创建数组的几种方式\n", "#使用 arange 函数创建数值范围并返回 ndarray 对象\n", "x = np.arange(3) \n", "print ('x=',x)\n", "#创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组\n", "y = np.empty(3,dtype = int) \n", "print ('y=',y)\n", "#创建指定大小的数组,数组元素以 0 来填充\n", "z = np.zeros(3, dtype = int) \n", "print ('z=',z)\n", "#创建一个一维数组,数组是一个等差数列构成的\n", "a = np.linspace(1,13,3)\n", "print ('a=',a)" ] }, { "cell_type": "markdown", "id": "73259f8e", "metadata": {}, "source": [ "# 二、数据处理示例" ] }, { "cell_type": "markdown", "id": "fcfc3a2c", "metadata": {}, "source": [ "diabetes.csv是一个亚利桑那州的Pima Womans Hospital包含糖尿病相关测量和结果的历史记录的数据集,目的是根据某些诊断测量结果预测患者是否患有糖尿病。该数据集由8个医学预测变量和一个目标变量outcome组成。在进行机器学习的模型训练前我们需要对原始数据进行一定的处理,下列即为一个简略的数据处理示例过程。" ] }, { "cell_type": "markdown", "id": "85f05918", "metadata": {}, "source": [ "1)引入各种常用库" ] }, { "cell_type": "code", "execution_count": 7, "id": "662450cc", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import seaborn as sb\n", "import matplotlib.pyplot as plt\n", "from sklearn.model_selection import train_test_split\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "markdown", "id": "465cd6d0", "metadata": {}, "source": [ "2)使用Pandas加载数据文件并输出文件信息" ] }, { "cell_type": "code", "execution_count": 8, "id": "962f7b0e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pregnancies int64\n", "Glucose int64\n", "BloodPressure float64\n", "SkinThickness float64\n", "Insulin int64\n", "BMI float64\n", "DiabetesPedigreeFunction float64\n", "Age int64\n", "Outcome int64\n", "dtype: object\n", "Pregnancies 0\n", "Glucose 0\n", "BloodPressure 1\n", "SkinThickness 1\n", "Insulin 0\n", "BMI 0\n", "DiabetesPedigreeFunction 1\n", "Age 0\n", "Outcome 0\n", "dtype: int64\n" ] } ], "source": [ "#使用Pandas将CSV文件加载到名为pima的数据框对象中\n", "pima = pd.read_csv(\"diabetes.csv\")\n", "#输出文件信息\n", "print(pima.dtypes)\n", "#输出csv文件中每列缺失的项目数量\n", "print(pima.isnull().sum())" ] }, { "cell_type": "markdown", "id": "36a23574", "metadata": {}, "source": [ "3)数据查看" ] }, { "cell_type": "code", "execution_count": 4, "id": "095cde5a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
0614872.035.0033.60.627501
118566.029.0026.60.351310
2818364.00.0023.30.672321
318966.023.09428.10.167210
4013740.035.016843.12.288331
5511674.00.0025.60.201300
637850.032.08831.00.248261
7101150.00.0035.30.134290
8219770.045.054330.50.158531
9812596.00.000.00.232541
\n", "
" ], "text/plain": [ " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n", "0 6 148 72.0 35.0 0 33.6 \n", "1 1 85 66.0 29.0 0 26.6 \n", "2 8 183 64.0 0.0 0 23.3 \n", "3 1 89 66.0 23.0 94 28.1 \n", "4 0 137 40.0 35.0 168 43.1 \n", "5 5 116 74.0 0.0 0 25.6 \n", "6 3 78 50.0 32.0 88 31.0 \n", "7 10 115 0.0 0.0 0 35.3 \n", "8 2 197 70.0 45.0 543 30.5 \n", "9 8 125 96.0 0.0 0 0.0 \n", "\n", " DiabetesPedigreeFunction Age Outcome \n", "0 0.627 50 1 \n", "1 0.351 31 0 \n", "2 0.672 32 1 \n", "3 0.167 21 0 \n", "4 2.288 33 1 \n", "5 0.201 30 0 \n", "6 0.248 26 1 \n", "7 0.134 29 0 \n", "8 0.158 53 1 \n", "9 0.232 54 1 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#输出前10行数据\n", "pima.head(10)" ] }, { "cell_type": "markdown", "id": "af0b46f2", "metadata": {}, "source": [ "4)替换缺失值为0" ] }, { "cell_type": "code", "execution_count": null, "id": "88a4884e", "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
GlucoseBloodPressureSkinThicknessInsulinBMI
014872.035.0033.6
18566.029.0026.6
218364.00.0023.3
38966.023.09428.1
413740.035.016843.1
..................
76310176.048.018032.9
76412270.027.0036.8
76512172.023.011226.2
76612660.00.0030.1
7679370.031.0030.4
\n", "

768 rows × 5 columns

\n", "
" ], "text/plain": [ " Glucose BloodPressure SkinThickness Insulin BMI\n", "0 148 72.0 35.0 0 33.6\n", "1 85 66.0 29.0 0 26.6\n", "2 183 64.0 0.0 0 23.3\n", "3 89 66.0 23.0 94 28.1\n", "4 137 40.0 35.0 168 43.1\n", ".. ... ... ... ... ...\n", "763 101 76.0 48.0 180 32.9\n", "764 122 70.0 27.0 0 36.8\n", "765 121 72.0 23.0 112 26.2\n", "766 126 60.0 0.0 0 30.1\n", "767 93 70.0 31.0 0 30.4\n", "\n", "[768 rows x 5 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pima[['Glucose','BloodPressure','SkinThickness','Insulin','BMI']].replace(np.nan,0)" ] }, { "cell_type": "code", "execution_count": 10, "id": "70a95343", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 1\n", "1 0\n", "2 1\n", "3 0\n", "4 1\n", " ..\n", "763 0\n", "764 0\n", "765 0\n", "766 1\n", "767 0\n", "Name: Outcome, Length: 768, dtype: int64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pima['Outcome']" ] }, { "cell_type": "markdown", "id": "5e6f4007", "metadata": {}, "source": [ "5)将Outcome这一列内容可视化" ] }, { "cell_type": "code", "execution_count": 11, "id": "588cce42", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5,4))\n", "sb.countplot(x=pima['Outcome'],palette='OrRd_r',saturation=0.8)\n", "plt.tight_layout()\n", "plt.grid(True)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "d6b1d6e6", "metadata": {}, "source": [ "6)将Pregnancies这列连续变量分别按不同划分方法转换为分类变量" ] }, { "cell_type": "code", "execution_count": 43, "id": "5c1578c3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 2\n", "1 1\n", "2 2\n", "3 1\n", "4 0\n", "5 2\n", "6 1\n", "7 3\n", "8 1\n", "9 2\n", "Name: Pregnancies, dtype: category\n", "Categories (4, int64): [0 < 1 < 2 < 3]\n", "0 2\n", "1 0\n", "2 3\n", "3 0\n", "4 0\n", "5 2\n", "6 1\n", "7 3\n", "8 1\n", "9 3\n", "Name: Pregnancies, dtype: category\n", "Categories (4, int64): [0 < 1 < 2 < 3]\n" ] } ], "source": [ "#将Pregnancies这一列的内容按照[0,1,5,10,250]的区间分别划分为[0,1,2,3]的label\n", "Pregnancies1=pd.cut(pima['Pregnancies'],[0,1,5,10,250], labels=[0,1,2,3],right=False)\n", "#将Pregnancies这一列的内容按照四等分划分为[0,1,2,3]的label\n", "Pregnancies2=pd.qcut(pima['Pregnancies'],4, labels=[0,1,2,3])\n", "print(Pregnancies1.head(10))\n", "print(Pregnancies2.head(10))" ] }, { "cell_type": "markdown", "id": "e12dd773", "metadata": {}, "source": [ "7)将原始数据集划分为训练集和测试集" ] }, { "cell_type": "code", "execution_count": 44, "id": "959ef96d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(768, 8) (576, 8) (192, 8) (768,) (576,) (192,)\n" ] } ], "source": [ "x1 = pima.drop(columns='Outcome')\n", "y1 = pima['Outcome']\n", "x_train1, x_test1, y_train1, y_test1 = train_test_split(x1, y1, test_size = 0.25, random_state=0)\n", "#输出划分后的两个集合和原始集合的大小\n", "print(x1.shape, x_train1.shape, x_test1.shape, y1.shape, y_train1.shape, y_test1.shape)" ] }, { "cell_type": "markdown", "id": "35cc0f5c", "metadata": {}, "source": [ "# 三、课堂练习" ] }, { "cell_type": "markdown", "id": "da68bbb4", "metadata": {}, "source": [ "在jupyter notebook工具上使用python编写一个冒泡排序算法和一个快速排序算法,要求如下: \n", "1)待排序数组手动输入 \n", "2)将所实现算法编写为可调用函数,然后在另一个模块调用 " ] }, { "cell_type": "code", "execution_count": null, "id": "36513827", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "原始数组是否有序:False\n", "快速排序后数组是否有序:True\n", "冒泡排序后数组是否有序:True\n" ] } ], "source": [ "import random\n", "# 冒泡排序和快速排序算法实现\n", "def bubble_sort(array):\n", " length = len(array)\n", " array = array.copy()\n", " for i in range(length, -1, -1):\n", " for j in range(0, i - 1):\n", " if array[j] > array[j+1]:\n", " temp = array[j]\n", " array[j] = array[j+1]\n", " array[j+1] = temp\n", " return array\n", "\n", "def quick_sort(array):\n", " if len(array) <= 1:\n", " return array\n", " else:\n", " pivot = array[0]\n", " bigger, smeller = [], []\n", " for i in range(1, len(array)):\n", " if array[i] >= pivot:\n", " bigger.append(array[i])\n", " else:\n", " smeller.append(array[i])\n", "\n", " return quick_sort(smeller) + [pivot] + quick_sort(bigger)\n", "\n", "def chack_sorted(array):\n", " for i in range(len(array)-1):\n", " if array[i] > array[i+1]:\n", " return False\n", " return True\n", "\n", "\n", "array = [i for i in range(0,100)]\n", "random.shuffle(array)\n", "print(f\"原始数组是否有序:{chack_sorted(array)}\")\n", "quick_sorted_array = quick_sort(array)\n", "bubble_sorted_array = bubble_sort(array)\n", "print(f\"快速排序后数组是否有序:{chack_sorted(quick_sorted_array)}\")\n", "print(f\"冒泡排序后数组是否有序:{chack_sorted(bubble_sorted_array)}\")" ] }, { "cell_type": "markdown", "id": "f0b92f50", "metadata": {}, "source": [ "# 四、课堂拓展" ] }, { "cell_type": "markdown", "id": "ec7f7b86", "metadata": {}, "source": [ "为了方便同学们课后自学,向大家介绍一些相关网站帮助同学们自行学习提升: \n", "https://docs.python.org/zh-cn/3/tutorial/index.html \n", "https://www.w3school.com.cn/python/index.asp \n", "https://www.runoob.com/python3/ \n", "https://www.numpy.org.cn/ \n", "http://www.pypandas.cn/docs/ \n", "https://seaborn.apachecn.org/#/README \n", "https://scikit-learn.org.cn/ \n", "https://jupyter-notebook.readthedocs.io/en/stable/notebook.html" ] } ], "metadata": { "kernelspec": { "display_name": "base", "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.13.5" } }, "nbformat": 4, "nbformat_minor": 5 }