{"id":22787036,"url":"https://github.com/freemankevin/pythonbasis","last_synced_at":"2025-07-15T13:09:00.484Z","repository":{"id":264980447,"uuid":"894785624","full_name":"FreemanKevin/PythonBasis","owner":"FreemanKevin","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-10T08:03:03.000Z","size":25,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-10T09:18:33.960Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FreemanKevin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-27T01:40:57.000Z","updated_at":"2024-12-10T08:03:07.000Z","dependencies_parsed_at":"2024-11-27T03:36:35.010Z","dependency_job_id":null,"html_url":"https://github.com/FreemanKevin/PythonBasis","commit_stats":null,"previous_names":["freemankevin/pythonbasis"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FreemanKevin%2FPythonBasis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FreemanKevin%2FPythonBasis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FreemanKevin%2FPythonBasis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FreemanKevin%2FPythonBasis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FreemanKevin","download_url":"https://codeload.github.com/FreemanKevin/PythonBasis/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237341594,"owners_count":19294293,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-12T00:48:52.954Z","updated_at":"2025-02-05T17:29:33.557Z","avatar_url":"https://github.com/FreemanKevin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PythonBasis\n\n\n\n## 1 基础语法\n\n\n\n### 1.1 print函数\n\n语法格式\n\n```python\nprint(value,xxx,sep='', end='\\n',file=None)\n```\n\n\n\n#### 实例1\n\n```py\na=10\nb=20\nprint(90)\nprint(a*b)\nprint('welcome to china!')\nprint(\"welcome to china!\")\nprint(\"\"\"welcome to china!\"\"\")\nprint('''welcome to china!''')\n```\n\n\n\n#### 实例2\n\n```py\nc=10\nd=20\nprint(c,d,'要么出众，要么出局！')\n```\n\n\n\n\n\n#### 实例3\n\n```py\nprint(b)\nprint(chr(98))\nprint('C')\nprint(chr(67))\nprint(8)\nprint(chr(56))\nprint('[')\nprint(chr(91))\n```\n\n\n\n\n\n#### 实例4\n\n```py\nprint(ord('北'))\nprint(ord('京'))\nprint(chr(21271),chr(20140))\n```\n\n\n\n\n\n\n\n#### 实例5\n\n```py\nfp=open('note.txt','w')\nprint('welcome to china', file=fp)\n\n# \nfp=open('test.txt','w',encoding='utf-8')\nprint('人生苦短，我用PY',file=fp)\nfp.close()\n```\n\n\n\n\n\n#### 实例6\n\n```py\nprint('北京',end='--\u003e')\nprint('北京')\nprint('北京欢迎您！'+'2008')\n```\n\n\n\n\n\n### 1.2 int函数\n\n```py\na=int(input('请输入你的幸运数字：'))\nprint('您的幸运数字是：',a)\n\n# \nname=input('请输入姓名：')\nage=input('请输入年龄：')\nmotto=input('请输入座右铭：')\nprint('-----------------自我介绍------------------')\nprint('姓名',name)\nprint('年龄',age)\nprint('座右铭',motto)\n```\n\n\n\n\n\n\n\n\n\n### 1.3 注释\n\n```py\n# encoding=gbk # 这是文件编码注释，只能放在文件的首行\n# encoding=utf-8  # 只能放在文件的首行\n\n#\nprint('hello world') # 这是单行注释\n\n#\n\"\"\"\n第一行：xxx  这是多行注释\n第二行：xxx\n第三行：xxx\n\"\"\"\n\n'''\n第一行：xxx\n第二行：xxx\n第三行：xxx\n'''\n```\n\n\n\n### 1.4 缩进\n\n```python\nprint('') # 一般代码不缩进\n\n# 类\nclass Students():\n    pass # 缩进\n\n# 函数\ndef fun():\n    pass # 缩进\n```\n\n\n\n### 1.5 关键字\n\n```python\nimport keyword\nprint(keyword.kwlist)\nprint(len(keyword.kwlist))\n```\n\n\n\n### 1.6 标识符\n\n```python\n# 1.模块名、包名尽量短小，并且全部使用小写字母\n# 2.模块名，可以使用下划线，比如：grame_main\n# 3.包名，可以使用.，比如：com.mypython,不推荐使用com_mypython\n# 4.类名，使用Pascal 风格命名，比如：MyClass\n# 5.模块内部的类，使用_ + 使用Pascal 风格命名，比如：_InnerMyClass\n\n# 6._开头的模块变量无法被导入，是受保护的。\n# 7.__开头的类或方法是私有的。\n# 8.__开头和结尾的类或者函数，是python专用标识。\n```\n\n\n\n### 1.7 变量\n\n\u003e*警告：*\n\u003e\n\u003e1. 务必谨慎使用小写字母`i` 和大写字母`O`\n\n```python\nluck_number=8\nmy_name='zhan'\nprint('luck_number的数据类型是：',type(luck_number))\nprint(my_name,'的幸运数字是：',luck_number)\n\nluck_number='welcome to china'\nprint('luck_number的数据类型是：',type(luck_number))\n\nno=number=2017\nprint(id(no))\nprint(id(number))\n```\n\n\n\n\n\n\n\n### 1.8 常量\n\n一般使用大写字母标识，不希望被修改。\n\n```python\npi=3.1415926 # 变量，可以修改\nPI=3.1415926 # 常量，不可修改\n```\n\n\n\n\n\n### 1.9 进制\n\n```python\nnum=987 # 10进制\nnum2=0b101010 # 二进制\nnum3=0o765   # 八进制\nnum4=0x87ABF  # 16 进制\nprint(num,num2,num3,num4)\n```\n\n\n\n\n\n\n\n### 1.10 浮点数\n\n```python\na=10\nb=10.0\nc=1.99e1413 # 科学计数法\n\nprint('a的数据类型',type(a))\nprint('b的数据类型',type(b))\nprint('c的数据类型',type(c))\n```\n\n\n\n\n\n### 1.11 复数\n\n**复数的基本概念**\n\n在Python中，复数（complex numbers）由实部和虚部组成，形式为 `a + bj`，其中：\n\n- `a` 是实部（real part）\n- `b` 是虚部（imaginary part）\n- `j` 代表虚数单位（通常数学上用 `i` 表示，但Python中用 `j`）\n\n例如，`3 + 4j` 就是一个复数，3 是实部，4 是虚部。\n\n\n\n\n\n**Python中的复数表示**\n\n- 直接赋值：`c = 3 + 4j`\n\n- 使用 `complex` 函数：`c = complex(3, 4)`\n\n  \n\n**复数的操作**\n\nPython支持对复数进行基本的数学运算，如加法、减法、乘法、除法、幂运算等：\n\n```python\nd=1+2j\ne=2-3j\nprint('实数部分：',d.real)\nprint('虚数部分：',d.imag)\nprint(d+e)\n```\n\n\n\n\n\n### 1.12 字符串\n\n#### 实例1\n\n```python\nname='zhang'\naddress='广东省广州市白云区香奈儿街费力大厦B座2楼208'\nlink1='''\\n地址：广东省广州市天河区王璐璐街道田丽华源C栋9楼29D\n姓名：王爱仁\n电话：1980099081\n'''\nlink2=\"\"\"\\n地址：广东省广州市天河区王璐璐街道田丽华源C栋9楼29D\n姓名：王爱仁\n电话：1980099081\n\"\"\"\nprint(name,address,link1,link2)\n```\n\n\n\n#### 实例2\n\n```python\nprint('北京')\nprint('北京欢迎你！')\nprint('------------')\nprint('北京欢迎你！')\nprint('hello')\nprint('hell\\no')\nprint('helloworld')\nprint('hello\\tworld')#tab 长度取决于前面的字符，英文更长一点\nprint('北京欢迎你！')\nprint('北京欢迎\\t你！')\nprint('老实说：好好学习，天天向上')\nprint('老实说：\\'好好学习,天天向上\\'')\nprint('老实说：\\'好好学习,天天向上\\'')\nprint('老实说：\\\"好好学习，天天向上\\\"')\nprint(r'老实说：\\'好好学习,天天向上\\'') # r、R 原字符，取消转义字符特殊含义\nprint(R'老实说：\\\"好好学习，天天向上\\\"')\n```\n\n\n\n\n\n#### 实例3\n\n字符串的切片与索引\n\n```python\ns='HELLOWORLD'\nprint(s[:])\nprint(s[0:10])\nprint(s[2:-1])\nprint(s[:-1])\nprint(s[-1])\nprint(s[5:])\n```\n\n\n\n\n\n#### 实例4\n\n```python\na='2024年'\nb='北京冬奥会'\n\nprint(a+b)\nprint(a*2)\nprint('202' in a)\nprint('201' in a)\n```\n\n\n\n### 1.13 布尔值\n\n```python\nx=True\nprint(x)\nprint(x+10)\nprint(type(x))\nprint(-x+10)\nprint(False+10)\n\nprint(bool(0))  # 非零，非空，非None为true\nprint(bool(0.0))\nprint(bool(-0))\nprint(bool(''))\nprint(bool('hello'))\nprint(bool(-1))\nprint(bool('北京欢迎你'))\nprint(bool(True))\nprint(bool(False))\nprint(bool(None))\n\n```\n\n\n\n\n\n### 1.14 类型转换\n\n```python\nx=10\ny=3\nz=x/3\nprint(z,type(z))\n#\nprint('float类型转换成int类型',int(3.14)) # float转int之后只会保留整数部分\nprint('float类型转换成int类型',int(3.9))\nprint('float类型转换成int类型',int(-3.14))\nprint('float类型转换成int类型',int(-3.9))\n#\nprint('int类型转换成float类型',float(3))\nprint(int(3.14)+int(3.2))\nprint(int('100')+int('200'))\n# print(int('19a'))  # ValueError: invalid literal\n# print(int('3.14')) # ValueError: invalid literal\n\n# chr()-ord()\nprint(ord('杨'))  # unicode 字符中对应的整数\nprint(chr(26472)) # 整数对应的unicode 字符\n\n# 进制转换\nprint('十进制转换成十六进制：',hex(26472))\nprint('十进制转换成八进制：',oct(26472))\nprint('十进制转换成二进制：',bin(26472))\n```\n\n\n\n\n\n### 1.15 eval函数\n\n```python\ns='3.13+3'\nprint(s,type(s))\nx=eval(s)\nprint(x,type(x))\n\n# int\nage=eval(input('请输入你的年龄：'))\nprint(age,type(age))\n# float\nheight=eval(input('请输入你的年龄：'))\nprint(height,type(height))\n\n#\nhello='北京欢迎您'\nprint(hello)\nprint(eval('hello'))\n# print(eval(hello)) # NameError: name '北京欢迎您' is not defined   字符串在这里没被定义\n```\n\n\n\n\n\n### 1.16 算术运算符\n\n运算优先级：幂运算 \u003e 乘除 \u003e 加减\n\n\n\n\u003e ## 除法与整除的区别\n\u003e\n\u003e ### 除法\n\u003e\n\u003e - **定义:** 将一个数平均分成若干份，求每份是多少或分成了多少份的运算。\n\u003e - **结果:** 可以是整数、小数或分数，即包含了余数。\n\u003e - **应用:** 广泛应用于各种计算，包括分数、小数运算、比例分配等。\n\u003e\n\u003e **示例:**\n\u003e\n\u003e - 10 / 2 = 5  （将10平均分成2份，每份是5）\n\u003e - 10 / 3 = 3.333... （将10平均分成3份，每份是3.333...）\n\u003e\n\u003e ### 整除\n\u003e\n\u003e - **定义:** 一个整数能够被另一个整数除尽（没有余数），即商也是整数。\n\u003e - **结果:** 只能是整数。\n\u003e - **应用:** 在数学理论、编程、以及需要精确整数结果的场景中经常使用。\n\u003e\n\u003e **示例:**\n\u003e\n\u003e - 10 // 2 = 5  （10能被2整除，商是5）\n\u003e - 10 // 3 = 3  （10不能被3整除，取商的整数部分，即3）\n\n```python\nprint('加法：',1+1)\nprint('减法：',1-1)\nprint('乘法：',1*2)\nprint('除法：',10/2)\nprint('整除：',10//3)\nprint('取余：',10%3)\nprint('幂运算：',2**4)\n# print('除法：',10/0) # ZeroDivisionError: division by zero\n```\n\n\n\n\n\n### 1.17 赋值运算符\n\n```python\nx=20\ny=10\nx=x+y\nprint(x,type(x))\n\n#\na=1\nb=2\na+=b\nprint(a,type(a))\nb-=a\nprint(b,type(b))\n\n#\nc=10\nd=2\nc*=d\nprint(c,type(c))\nd/=c\nprint(d,type(d))\n\n#\ne=10\nf=20\ne%=f\nprint(e,type(e))\nf//=e\nprint(f,type(f))\n\n#\ng=2\nh=3\ng**=h\nprint(g,type(g))\n\n# 链式赋值\na=b=c=100\nprint(a,b,c)\n# 系列解包赋值\na,b=10,20\nprint(a,b)\na,b=b,a\nprint(a,b)\n```\n\n\n\n\n\n### 1.18 比较运算符\n\n```python\nprint('98小于90吗？',98\u003c90)\nprint('98大于90吗？',98\u003e90)\nprint('98等于90吗？',98==90)\nprint('98不等于90吗？',98!=90)\nprint('98小于等于90吗？',98\u003c=90)\nprint('98小于等于98吗？',98\u003c=98)\nprint('98大于等于90吗？',98\u003e=90)\n\n```\n\n\n\n\n\n### 1.19 逻辑运算符\n\n\u003e 1. 逻辑与，and, 从左到右计算，一个为假都是假\n\u003e 2. 逻辑或，or，从左到右计算，一个为真都是真\n\u003e 3. 逻辑非，not, 从左到右计算\n\n\n\n```python\nprint(True and False)\nprint(False and False)\nprint(False and True)\nprint(True and True)\nprint(False and False)\nprint('-'*20)\n\nprint(8\u003e7 and 6\u003e5)\nprint(8\u003c7 and 6\u003e5)\nprint(8\u003e7 and 6\u003c5)\nprint(8\u003c7 and 6\u003c5)\nprint('-'*20)\n\nprint(True or False)\nprint(False or True)\nprint(True or True)\nprint(False or False)\nprint('-'*20)\n\nprint(9\u003e8 or 8\u003e10)\n# print(10/0 or 10\u003c10) # ZeroDivisionError: division by zero\nprint(10\u003c11 or 10/0)\nprint('-'*20)\n\nprint(not True)\nprint(not False)\nprint(not 10\u003c0)\nprint(not (10\u003e0))\nprint('-'*20)\n```\n\n\n\n### 1.20 字符串练习\n\n\u003e 白板工具：https://miro.com/app/board\n\n```python\nnumber=eval(input('请输入四位数的整数：'))\nprint('个位上面的数字：',number%10)\nprint('十位上面的数字：',number//10%10)\nprint('百位上面的数字：',number//100%10)\nprint('千位上面的数字：',number//1000)\nprint('-'*40)\nnumber=input('请输入四位数的整数：')\nprint('个位上面的数字：',number[-1])\nprint('十位上面的数字：',number[-2])\nprint('百位上面的数字：',number[1])\nprint('千位上面的数字：',number[0])\n\nmom_height=eval(input(\"请输入母亲的身高：\"))\nfather_height=eval(input(\"请输入父亲的身高：\"))\nson_height=(mom_height+father_height)*0.54\nprint(\"您儿子的身高预计是：\",son_height)\n\n```\n\n\n\n\n\n### 1.21 if双分支结构\n\n```python\nnumber=eval(input('请输入你的数字：'))\nif number==123456:\n    print('中奖')\nelse:\n    print(\"谢谢惠顾\")\n\n# 使用条件表达式简化\nprint('中奖') if number==123456 else print('谢谢惠顾')\n```\n\n\n\n\n\n### 1.22 if多分支结构\n\n```python\nscore=eval(input(\"请输入您的成绩：\"))\nif score \u003c0 or score \u003e100:\n    print(\"输入有误\")\nelif score == 100:\n    print(\"满分\")\nelif 60 \u003c= score \u003c100:\n    print(\"通过\")\nelse:\n    print(\"未通过\")\n```\n\n\n\n\n\n### 1.22 if嵌套结构\n\n```python\nanswer=input('请问您喝酒了吗？')\nif answer=='y':\n    proof=eval(input(\"请输入酒精含量：\"))\n    if proof\u003c=20:\n        print(\"你可以开车\")\n    else:\n        print(\"你不可以开车\")\nelse:\n    print(\"请开走，Goodbye!\")\n```\n\n\n\n\n\n### 1.23 模式匹配\n\n```python\nscore=input('请输入成绩：')\nmatch score:  # python3.11+ 新特性\n    case 'A':\n        print('优秀')\n    case 'B':\n        print('及格')\n    case 'C':\n        print('勉强')\n    case 'D':\n        print('未通过')\n```\n\n\n\n\n\n\n\n### 1.24 for循环\n\n```python\nfor i in \"hello\":\n    print(i)\n\nfor i in range(1,11):\n    print(i)\n\ns=0\nfor i in range(1,11):\n    s+=i\nprint(s)\n\n\"\"\"\n153=5**3+3**3+1**3\n\"\"\"\nfor i in range(100,1000):\n    gn=i%10\n    sn=i//10%10\n    bn=i//100\n    if i==gn**3+sn**3+bn**3:\n        print(i)\n\n```\n\n\n\n### 1.25 while循环\n\n```python\nanswer=input(\"今天要上课吗？y/n\")\nwhile answer=='y':\n    print(\"good study, day day up\")\n    answer=input(\"今天要上课吗？y/n\")\n\ns=0\ni=1\nwhile i\u003c=100:\n    s+=i\n    i+=1\nprint(s)\n\n# ---------------------------\ns=0\ni=1\nwhile i\u003c=100:\n    s+=i\n    i+=1\nelse:\n    print(s)\n```\n\n\n\n\n\n\n\n#### 练习1\n\n```python\ni=0\nwhile i\u003c3:\n    username=input('请输入你的用户名：')\n    password=input('请输入你的密码：')\n    if username=='admin' and password=='123':\n        print('登录成功')\n        i=8\n    else:\n        if i\u003c2:\n            print('用户名或密码不正确，你还有',2-i,'次机会')\n        i+=1\nif i==3:\n    print('三次用户名密码均输入错误，你目前已经无法登录。')\n```\n\n\n\n\n\n\n\n#### 练习2\n\n```python\nfor i in range(1,4):\n    for j in range(1,5):\n        print('*',end='')\n    print()\n##################################\nprint('-'*20)\nfor i in range(1,6):\n    for j in range(1,i+1):\n        print('*',end='')\n    print()\n##################################\nprint('-'*20)\nfor i in range(1,6):\n    for j in range(1,7-i):\n        print('*',end='')\n    print()\n##################################\nprint('-'*20)\nfor i in range(1,6):\n    for j in range(1,6-i):\n        # print('\u0026',end=''\n        print(' ',end='')\n    for k in range(1,i*2):\n        print('*',end='')\n    print()\n##################################\nprint('-'*20)\nrow=eval(input('请输入行数(只能是奇数)：'))\nwhile row%2==0:\n    row=eval(input('请重新输入行数：')) #7\n# 上半部\ntop_row=(row+1)//2 #行数\nfor i in range(1,top_row+1):\n    for j in range(1,top_row+1-i):\n        # print('\u0026',end=''\n        print(' ',end='')\n    for k in range(1,i*2):\n        print('*',end='')\n    print()\n# 下半部\nbottom_row=row//2 # 3\nfor i in range(1,bottom_row+1): # 4 (1,2,3,4)\n    for j in range(1,i+1):\n        print(' ',end='')\n    for k in range(1,2*bottom_row-2*i+2):\n        print('*',end='')\n    print()\n##################################\nprint('-'*20)\nrow=eval(input('请输入行数(只能是奇数)：'))\nwhile row%2==0:\n    row=eval(input('请重新输入行数：')) #7\n# 上半部\ntop_row=(row+1)//2 #行数\nfor i in range(1,top_row+1):\n    for j in range(1,top_row+1-i):\n        # print('\u0026',end=''\n        print(' ',end='')\n    for k in range(1,i*2):\n        if k==1 or k==i*2-1:\n            print('*',end='')\n        else:\n            print(' ',end='')\n    print()\n# 下半部\nbottom_row=row//2 # 3\nfor i in range(1,bottom_row+1): # 4 (1,2,3,4)\n    for j in range(1,i+1):\n        print(' ',end='')\n    for k in range(1,2*bottom_row-2*i+2):\n        if k==1 or k==2*bottom_row-2*i+2-1:\n            print('*',end='')\n        else:\n            print(' ',end='')\n    print()\n```\n\n\n\n\n\n\n\n### 1.26 break退出循环\n\n```python\ns=0\ni=1\nwhile i\u003c20:\n    s+=i\n    if s \u003e20:\n        print('累加和大于20的当前数是：',i)\n        break\n    i+=1\nprint('--------------------')\ni=0\nwhile i\u003c3:\n    username=input(\"请输入用户名：\")\n    password=input(\"请输入用户密码：\")\n    if username=='admin' and password=='123':\n        print('登录成功')\n        break\n    else:\n        if i\u003c2:\n            print('请重新输入，你还有',2-i,'次机会')\n    i+=1\nelse:\n    print('三次均输入错误，账户已经被锁定！')\nprint('--------------------')\nfor i in 'hello':\n    if i=='e':\n        break\n    print(i)\nprint('--------------------')\nfor i in range(3):\n    username=input(\"请输入用户名：\")\n    password=input(\"请输入用户密码：\")\n    if username=='admin' and password=='123':\n        print('登录成功')\n        break\n    else:\n        if i\u003c2:\n            print('请重新输入，你还有',2-i,'次机会')\n    i+=1\nelse:\n    print('三次均输入错误，账户已经被锁定！')\n```\n\n\n\n\n\n### 1.27 continue跳过本次循环\n\n```python\ns=0\ni=1\nwhile i\u003c=100:\n    if i%2==1:\n        i+=1\n        continue\n    s+=i\n    i+=1\nprint(\"一百以内的偶数之和：\",s)\n#\ns=0\ni=1\nfor i in range(1,101):\n    if i % 2 == 1:\n        i += 1\n        continue\n    s += i\nprint(\"一百以内的偶数之和：\", s)\n```\n\n\n\n\n\n### 1.28 pass空语句\n\n```python\nif True:\n    pass\nfor i in range(10):\n    pass\nwhile True:\n    pass\n```\n\n\n\n#### 练习1\n\n```python\nfor i in range(8):\n    print(i)\n\nwhile True:\n    num=eval('请输入一个整数：')\n    if num//3:\n        break\n\nfor i in range(-3,4):\n    if i\u003c0:\n        print(' '*(-i)+'*'*(4+i))\n    elif i\u003e0:\n        print(' '*3+'*'*(4-i))\n    else:\n        print('*'*7)\n\nfor i in 'python':\n    for j in range(2):\n        print(i,end='')\n        if i=='h':\n            break\n\ni=0\nwhile i\u003c10:  # 0\n    if i\u003c1:\n        print('hello')\n        continue\n    if i==5:\n        print('world')\n        break\n    i+=1\n\n    \nyear=eval(input('请输入年份：'))\nif year%4==0 and year%100!=0 or year%400==0:\n    print(year,'年是闰年.')\nelse:\n    print(year,'年是平年.')\n\n    \nyear=eval(input('请输入年份：'))\nif year%4==0 and year%100!=0 or year%400==0:\n    print(year,'年是闰年.')\nelse:\n    print(year,'年是平年.')\n\n\n#\nnum=input('请输入10086查询功能代号(0-3):')\nmatch num:\n    case '0':\n        print('退出自助查询系统')\n    case '1':\n        print('显示当前余额：99999999999999999999999999美刀')\n    case '2':\n        print('显示当前的剩余流量：999999999999999999999999999G')\n    case '3':\n        print('显示当前的剩余通话时间：9999999999999999999min')\n        \n#\nanswer='y'\nwhile answer=='y':\n    print('---------------欢迎使用10086自助查询功能---------------')\n    print('0.退出系统')\n    print('1.查询余额')\n    print('2.查询流量')\n    print('3.查询通话')\n    choice=eval(input('请输入查询代码：'))\n    if choice==0:\n        print('退出系统')\n        break\n    elif choice==1:\n        print('当前账户余额为：200美刀.')\n    elif choice==2:\n        print('当前剩余流量为：20GB.')\n    elif choice==3:\n        print('当前剩余通话时长：300分钟')\n    else:\n        print('您的输入有误，请重新输入')\n    answer=input('您是否还需要继续执行？y/n ' )\nelse:\n    print('退出系统，感谢您的使用。')\n```\n\n\n\n#### 练习2\n\n```python\nimport random\nrand=random.randint(1,100)\ncount=1\nwhile count\u003c=10:\n    number=eval(input('请输入一个一百以内的随机数：'))\n    if number==rand:\n        print('猜对了，真牛逼')\n        break\n    elif number \u003erand:\n        print('猜大了，加油！')\n    else:\n        print('猜小了，加油！')\n    count+=1\nprint('******************@系统评价@*******************')\nif count\u003c=3:\n    print('你共计猜了',count,'次,','有点强')\nelif count\u003c=6:\n    print('你共计猜了',count,'次,','还凑合')\nelse:\n    print('你共计猜了',count,'次,','真垃圾')\n```\n\n\n\n### 1.29 索引\n\n```python\ns='helloworld'\nfor i in range(0,len(s)):\n    print(i,s[i],end='\\t\\t')\n```\n\n\n\n### 1.30 切片\n\n```python\ns='HelloWorld' # 0-4 5-9\ns1=s[0:5:2]\nprint(s1)\nprint(s[:5:1])\nprint(s[:5:])\nprint(s[:5:])\nprint(s[5:])\nprint(s[::2])\nprint(s[::-1])\nprint(s[-1:-11:-1])\n```\n\n\n\n### 1.31 序列操作\n\n```python\ns='helloworld'\nprint('e在'+s+'中吗？',('e'in s))\nprint('v在'+s+'中吗？',('v'in s))\n\nprint('e不在'+s+'中吗？',('e'not in s))\nprint('v不在'+s+'中吗？',('v'not in s))\n\nprint('len()',len(s))\nprint('max()',max(s)) # 'w' 在字符串\"helloworld\"中是ASCII值最大的字符，因为它在字母表中比其他字符都靠后。 ASCII值为119\nprint('min()',min(s)) # 'd' 是ASCII值最小的字符，因为它在字母表中比其他字符都靠前。ASCII值为100\n\nprint('s.index()', s.index('h'))\nprint('s.count()', s.count('l'))\n```\n\n\n\n### 1.32 列表\n\n```python\nlst=['hello','world',92,100.01,20.4]\nlst2=list('helloworld')\nlst3=list(range(1,10,2))\n\nprint(lst,'\\n',lst2,'\\n',lst3)\nprint(lst*3)\nprint(lst+lst2+lst3)\nprint(len(lst))\nprint(max(lst3))\nprint(min(lst3))\nprint(lst2.count('o'))\n```\n\n\n\n#### 列表遍历\n\n```python\nlst=['hello','world','php','python']\n\nfor item in lst:\n    print(item)\nprint('-'*20)\nfor i in range(0,len(lst)):\n    print(i,'---\u003e',lst[i])  # 这里i 是索引\nprint('-'*20)\nfor index,item in enumerate(lst):\n    print(index,item)  # 这里index 是序号，非索引\nprint('-'*20)\nfor index,item in enumerate(lst,start=1):\n    print(index,item) # 将这里的index 序号改为1\n\n```\n\n\n\n#### 列表数据增删\n\n```python\nlst=['hello','world','python']\nprint('这里是原始数据：',lst,id(lst))\nprint('---------------------')\nlst.append('sql')\nprint('增加数据之后：',lst,id(lst))\nprint('---------------------')\nlst.insert(1,100)\nprint('增加数据之后：',lst,id(lst))\nprint('---------------------')\nlst.remove('world')\nprint('移除数据之后：',lst,id(lst))\nprint('---------------------')\nlst.pop(1)\nprint('移除数据之后：',lst,id(lst))\nprint('---------------------')\n# lst.clear()\n# print('清除所有数据之后：',lst,id(lst))\nlst.reverse()\nprint('反转数据之后：',lst,id(lst))\nprint('---------------------')\nnew_lst=lst.copy()\nprint('这里是原始数据的副本：',new_lst,id(new_lst))\nprint('---------------------')\nlst[1]='mysql'\nprint('修改数据之后：',lst,id(lst))\nprint('---------------------')\n```\n\n\n\n#### 列表排序\n\n```python \nlst=[4,56,3,78,40,56,89]\nprint('原列表：',lst)\n\nlst.sort()\nprint('升序后：',lst)\n\nlst.sort(reverse=True)\nprint('降序后：',lst)\n\nprint('-'*30)\n\nlst2=['banana','apple','orange','tomato','allow','Xcom','Cat','Dog']\nprint('原列表：',lst2)\n\nlst2.sort()\nprint('升序后：',lst2) # 先排大写\n\nlst2.sort(reverse=True)\nprint('降序后：',lst2)\n\n# 忽略大小写=统一大小写\nimport sys\nprint(sys.version)\nlst2.sort(key=lambda x: x.lower())\nprint('忽略大小写后：',lst2)\n\n\n#################\nlst=[4,56,3,78,40,56,89]\nprint('原数字列表：',lst)\nacs_lst=sorted(lst)\nprint('升序后列表：',acs_lst)\ndcs_lst=sorted(lst,reverse=True)\nprint('降序后列表：',dcs_lst)\nprint('-'*40)\nlst2=['banana','apple','orange','tomato','allow','Xcom','Cat','Dog']\nprint('原字符串列表：',lst2)\nacs_lst2=sorted(lst2)\nprint('升序后列表：',acs_lst2)\ndcs_lst2=sorted(lst2,reverse=True)\nprint('降序后列表：',dcs_lst2)\nmcs_lst2=sorted(lst2,key=lambda x: x.lower())\nprint('忽略大小写后列表：',mcs_lst2)\n```\n\n\n\n\n\n #### 列表生成式\n\n```shell \nimport random\n\nlst=[item for item in range(1,11)]\nprint(lst)\n\nlst=[item*item for item in range(1,11)]\nprint(lst)\n\nlst=[random.randint(1,100) for _ in range(10)]\nprint(lst)\n\nlst=[i for i in range(10) if i%2==0]\nprint(lst)\n```\n\n\n\n#### 二维列表\n\n```shell\nlst=[\n    ['城市','环比','同比','定基'],\n    ['北京','103.4','129.8','122.5'],\n    ['上海','103.5','120.8','123.5'],\n    ['广州','102.1','144.3','105.5'],\n]\nprint(lst)\n\nfor row in lst:\n    for item in row:\n        print(item,end='\\t')\n    print()\n\nlst2=[ [j for j in range(5)] for i in range(4)]\nprint(lst2)\n```\n\n\n\n\n\n### 1.33 元组\n\n```python \nt=('hello',[10,20,30],'python','world')\nprint(t)\n\nt=tuple('helloworld')\nprint(t)\n\nt=tuple([10,20,30,40])\nprint(t)\n\nprint('10在元组中是否存在：',(10 in t))\nprint('10在元组是不存在：',(10 not in t))\nprint('最大值：',max(t))\nprint('最小值：',min(t))\nprint('len:',len(t))\nprint('t.count:',t.count(10))\nprint('t.index:',t.index(10))\n\ny=(10,)\nprint(y,type(y))\n\nu=10\nprint(u,type(u))\n\ndel t\n# print(t)# NameError: name 't' is not defined\n```\n\n\n\n#### 元组生成式\n\n```python\nt=(i for i in range(4))\nprint(t)\n\n# t=tuple(t)\n# print(t)\n\n# for item in t:\n#     print(item)\n\nprint(t.__next__())\nprint(t.__next__())\nprint(t.__next__())\nprint(t.__next__())\n\nt=tuple(t)\nprint(t)\n```\n\n\n\n\n\n### 1.34 字典\n\n```python\nd={10:'cat',20:'dog',30:'pet',40:'zoo'}\nprint(d)\n\nlst1=[10,20,30,40]\nlst2=['cat','dog','pet','zoo','car']\nZipObj=zip(lst1,lst2)\nprint(ZipObj)\nd=dict(ZipObj)\nprint(d)\n\nd=dict(cat=10,dog=20)\nprint(d)\nprint('max', max(d))\nprint('min', min(d))\nprint('len', len(d))\n\ndel d\n# print(d)\n\nt=(10,20,30)\nprint({t:10})\n\n# lst=[10,20,30]\n# print({lst:10}) # TypeError: unhashable type: 'list'\n```\n\n\n\n#### 字典访问与遍历\n\n```python\nd={'hello':10 , 'world':20 , 'python':30}\nprint(d['hello'])\nprint(d.get('hello'))\n\n# print(d[java]) # NameError: name 'java' is not defined\nprint(d.get('java'))\nprint(d.get('java','不存在'))\n\nfor item in d.items():\n    print(item)\n\nfor key,value in d.items():\n    print(key,'---\u003e',value)\n```\n\n\n\n\n\n#### 字典操作方法\n\n```python\nd={1001:'李梅',1002:'张展',1003:'华生'}\nprint(d)\n\nd[1004]='张丽丽'\nprint(d)\n\nkeys=d.keys()\nprint(keys)\n\nprint(list(keys))\nprint(tuple(keys))\n\nvalues=d.values()\nprint(values)\nprint(list(values))\nprint(tuple(values))\n\nlst=list(d.items())\nprint(lst)\ns1=tuple(d.items())\nprint(s1)\n\nd=dict(lst)\nprint(d)\n# d=dict(s1)\n# print(d)\n\n\nprint(d.pop(1001))\nprint(d.pop(2009,'None'))\nprint(\"--删除之前--\")\nprint(d)\nprint((d.popitem()))\nprint(\"--删除之后--\")\nprint(d)\n\nprint(bool(d))\nd.clear()\nprint(d)\n\nprint(bool(d))\n```\n\n\n\n#### 字典生成式\n\n```python \nimport random\nd={item: random.randint(1,100) for item in range(4)}\nprint(d)\n\nlst=[1001,1002,1003]\nlst2=['陈美娜','王康建','左秋兰']\nd={key:value for key,value in zip(lst,lst2)}\nprint(d)\n```\n\n\n\n### 1.35 集合\n\n```python\ns={10,20,30,40}\nprint(s,type(s))\n\n# s={[10,20],[30,40]}\n# print(s) # TypeError: unhashable type: 'list'\n\ns=set()\nprint(s,type(s),bool(s))\n\ns={}\nprint(s,type(s))\n\ns=set('helloworld')\nprint(s)\n\ns2=set([10,20,30])\nprint(s2)\ns3=set(range(1,10))\nprint(s3)\nprint('max:',max(s3))\nprint('min:',min(s3))\nprint('len:',len(s3))\n\nprint('9在集合中存在吗？',(9 in s3))\nprint('9不存在集合中吗？',(9 not in s3))\ndel s3\n# print(s3) #NameError: name 's3' is not defined. Did you mean: 's'?\n```\n\n\n\n#### 集合操作符\n\n```python\nA={10,20,30,40,50}\nB={30,50,88,75,20}\n\nprint('并集',A|B)\nprint('交集',A\u0026B)\nprint('差集',A-B)\nprint('补集',A^B)\n```\n\n\n\n#### 集合相关操作\n\n```python\ns={10,20,30}\ns.add(199)\nprint(s)\ns.remove(20)\nprint(s)\n# s.clear()\n# print(s)\nfor item in s:\n    print(item)\nfor index,item in enumerate(s):\n    print(index,'----\u003e',item)\nfor index,item in enumerate(s,start=10):\n    print(index,'----\u003e',item)\ns={i for i in range(1,10)}\nprint(s)\ns={i for i in range(1,10) if i%2==1}\nprint(s)\n```\n\n\n\n#### python3.11 新特性\n\n```PYTHON\n# 同步迭代\n# fruits={'apple','orange','pear','grape'} # 集合是无序的\nfruits=['apple','orange','pear','grape']\ncounts=[10,3,5,8]\nfor f,c in zip(fruits,counts):\n    match f,c:\n        case 'apple',10:\n            print('10个苹果')\n        case 'orange',3:\n            print('3个橘子')\n        case 'pear',5:\n            print('5个梨子')\n        case 'grape',8:\n            print('8个葡萄')\n# 集合合并\nd1={'a':10,'b':20}\nd2={'c':30,'d':40,'e':50}\nmerged_dict=d1|d2\nprint(merged_dict)\n```\n\n\n\n\n\n#### 实战1: 千年虫\n\n```python\nlst=[88,89,90,00,90]\nprint(lst)\nprint('200'+str(00)) # 00 字符串之后会变0\n\n# for index in range(len(lst)):\n#     if str(lst[index])!='0':\n#         lst[index]='19'+str(lst[index])\n#     else:\n#         lst[index]='200'+str(lst[index])\n# print('修改后的年份列表：',lst)\n\nfor index,value in enumerate(lst):\n    print(index,'---\u003e',value)\n\nfor index,value in enumerate(lst):\n    if str(value)!='0':  # 注意单引号\n        lst[index]='19'+str(value)\n    else:\n        lst[index]='200'+str(value)\nprint('修改后的年份列表：',lst)\n```\n\n\n\n#### 实战2：购物车\n\n```PYTHON\nlst=[]  # 空列表，相当于空库房\nfor i in range(5): # 模拟需求，让用户操作5次\n    goods=input('请输入商品的四位数编号和商品名称进行入库操作，每次只允许一件商品：') # 接收用户输入\n    lst.append(goods) # 追加到列表，添加到购物车\n\nfor item in lst: # 循环展示列表中所有元素，库房中所有商品都展示出来\n    print(item)\nprint(lst)\n\nwares=[] # 空列表，用于存储购物车中的商品\nwhile True:\n    flag=False # 当前购物车中还没有商品的情况，默认值为False\n    num=input('请输入要购买的商品编号：')  # 输入商品编号\n    for item in lst: # 遍历下库房列表，查看所有元素\n        if num==item[0:4]: # 截取元素的首四位，即数字编号\n            flag=True # 设置当前购物车状态\n            wares.append(item) # 添加商品编号到购物车\n            print(num,'已成功添加到购物车')\n            break # 退出当前if判断\n    if not flag and num!='q':\n        print('商品不存在')\n    if num=='q':\n        break\n\nprint('-'*50)\nprint('您购物车里已选的商品为：')\nwares.reverse()\nfor item in wares:\n    print(item)\n```\n\n\n\n#### 实战3：12306买票\n\n```python\n# 车次字典\ndict_ticket={\n    'G1568': ['北京南-天津南','18:06','18:39','00:33'],\n    'G1567': ['北京南-天津南','18:15','18:49','00:35'],\n    'G8917': ['北京南-天津西','18:20','18:19','00:59'],\n    'G2029': ['北京南-天津南','18:35','19:08','00:35']\n}\n\nprint('车次   出发站-到达站      出发时间      到达时间     历时时长')\n\n# 遍历\nfor key in dict_ticket:\n    print(key,end=' ') # 不换行，因为车次和其他信息在同一行展示\n    for item in dict_ticket.get(key): # 根据键获得值\n        print(item,end='\\t\\t')\n    print()\n\ntrain_num=input('请输入要购买的车次：')\ninfo=dict_ticket.get(train_num,'车次不存在')\nif info!='车次不存在':\n    person=input('请输入乘车人，多人请使用逗号分隔：')\n    s=info[0] +' '+info[1]+'开'\n    print('您已购买了'+train_num+' '+s+',请'+person+'尽快换取纸质车票。【12306铁路客服】')\nelse:\n    print('对不起，您选择的车票可能不存在')\n```\n\n\n\n#### 实战4：通讯录\n\n```python\n# 创建空集合\ns=set()\n# 设置循环次数\nfor i in range(1,6):\n    info=input(f'请输入第{i}位好有的手机号：')\n    s.add(info)\n# 遍历集合\nfor item in s:\n    print(item)\n```\n\n\n\n### 1.36 字符串\n\n#### 字符串操作1\n\n```python\ns='HelloWorld'\n# 字符串的替换\nnet_s=s.replace('o','你好',1)\nprint(net_s)\n\n# 字符串在指定的宽度范围内居中\nprint(s)\nprint(s.center(20))\nprint(s.center(20,'*'))\n\ns='    Hello    World  '\nprint(s.strip()) # 去除字符串左右的空格\nprint(s.lstrip()) # 去除字符串左侧空格\nprint(s.rstrip()) # 去除右侧空格\n\ns3='dl-Helloworld'\nprint(s3.strip('ld'))  # 去除指定字符串,与顺序无关\nprint(s3.lstrip('ld')) # 去除左侧指定字符串\nprint(s3.rstrip('ld')) # 去除右侧指定字符串\n```\n\n\n\n#### 字符串操作2\n\n```python\ns1='HelloWorld'\nnew_s2=s1.lower() # 小写\nprint(new_s2)\n\nnew_s3=s1.upper() # 大写\nprint(new_s3)\n\ne_mail='good@gmail.com'\nname=e_mail.split('@')  # 字符串中的分隔符\nprint('邮箱名称：',name[0],'邮箱域名：',name[1])\n\nprint('s1 中字符o出现的次数：',s1.count('o'))\nprint('s1 中字符o首次出现的索引编号位：',s1.find('o'))\nprint(s1.find('p'))  # 查找不存在的字符时，没有找到就是-1\nprint(s1.index('o'))\n# print(s1.index('p')) # ValueError: substring not found\n\nprint(s1.startswith('H'))\nprint(s1.startswith('P')) # 判断前缀\nprint('demo.py'.endswith('.py')) # 判断后缀\nprint('demo.txt'.endswith('.txt'))\n```\n\n\n\n\n\n#### 字符串的格式化操作\n\n```python\nage=18\nname='马冬梅'\nscore=98.5\n# 通过占位符进行格式化\nprint('姓名：%s,年龄：%d,成绩：%.1f' % (name,age,score))\nprint('姓名：%s,年龄：%d,成绩：%f' % (name,age,score))\n# 通过f-string进行格式化\nprint(f'姓名：{name},年龄：{age},成绩：{score}')\n# 通过字符串的format方法\nprint('姓名：{0},年龄：{1}，成绩：{2}'.format(name,age,score)) # 0,1,2 对应format 中的参数顺序\nprint('姓名：{2},年龄：{1}，成绩：{0}'.format(score,age,name))\n```\n\n\n\n\n\n#### 字符串format详细格式控制\n\n```python\ns='helloworld'\nprint('{0:*\u003c20}'.format(s)) #0,format起始位 : 引导符号 *填充符号，只能是单个 \u003c左对齐\u003e右对齐^居中对齐 20 长度\nprint('{0:*\u003e20}'.format(s))\nprint('{0:*^20}'.format(s))\nprint(s.center(20,'*')) # 居中对齐\n\nprint('{0:.2f}'.format(312345552323.23)) # 保留2位小数\nprint('{0:.4}'.format('312345552323')) #保留4位整数\n\na=242 # 整数类型\nprint('二进制:{0:b},十进制:{0:d},八进制:{0:o},十六进制:{0:x},十六进制:{0:X}'.format(a))\n\nb=3.1415926 # 浮点类型\nprint('{0:.2f},{0:.2E},{0:2e},{0:.2%}'.format(b))\n```\n\n\n\n\n\n#### 字符串的编码与解码\n\n```python\ns='伟大的中国梦'\nucode=s.encode(errors='replace')  # utf8 18个字节长度，1中文在gbk中占3个字节\nprint(ucode)\n\ngcode=s.encode(encoding='gbk',errors='replace') # gbk 12个字节长度，1中文在gbk中占2个字节\nprint(gcode)\n\ns2='耶✌'\n# ecode=s2.encode(encoding='gbk',errors='strict') #  can't encode character '\\u270c'  #无法编码就报错\n# ecode=s2.encode(encoding='gbk',errors='ignore') # 自动忽略无法编码的问题\necode=s2.encode(encoding='gbk',errors='replace') # 自动替换无法编码的字节为问号\nprint(ecode)\n\ndcode=bytes.decode(gcode,encoding='gbk') # 解码所用类型要与编码一致\nprint(dcode)\nd2code=bytes.decode(ucode,encoding='utf-8')\nprint(d2code)\nd3code=bytes.decode(ucode,encoding='gbk') # 不一致就乱码\nprint(d3code)\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","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreemankevin%2Fpythonbasis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffreemankevin%2Fpythonbasis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreemankevin%2Fpythonbasis/lists"}