文章目录
Python 基础学习笔记
一、列表基础
# 定义变量
# message = 'Hello Jydr World!'
# print(message);
# 将单词开头大写 输出 Love About Bank
# msg = "love aBouT BANK"
# print(msg.title())
# 将单词全部大写 或者全部小写LOVE ABOUT BANK love about bank
# print(msg.upper())
# print(msg.lower())
# 合并字符串
# first_name = "JiuYang"
# last_name = "DaoRen"
# myname = first_name + last_name
# print(myname)
# print("Hello" + myname.upper() + "!")
# msg = "Hello" + myname.upper() + "!" # 也可以赋值给变量
# 制表符和换行符
# print("\nHello")
# print("\tHello")
# print("your information\n\tname:Xiaoming\n\tValue:998\n\tSB:ShiNi")
# 删除右边空格rstrip 左边空格lstrip
# jydr = 'python '
# print(jydr)
# jydr = jydr.rstrip() # 赋值后才能永久,否则就是临时
# print(jydr)
# jydr = ' python'
# print(jydr.lstrip())
# 数字转字符用 str()
# age = 23
# msg = "happy" + str(23) + "HEIHEI"
# print(msg)
# 列表
# addr = [1,2,3,4]
# print(addr)
# addr = ["you","world","name","hello","32","哈哈","mamade"]
# print(addr)
# print(addr[2].title())
# 在索引中,-1 表示最后一个元素 ,-2第二个,-3第三个……
# print(addr[-1])
# print(addr[-2])
# 列表元素拼接
# message = "I am your " + addr[3].title() + " father"
# print(message)
# 修改列表元素
# addr[0] = "madegebibi"
# print(addr)
# addr.append("nobody")
# print(addr)
# 创建空列表
addr = []
addr.append('hello')
addr.append("vheihei")
addr.append("wudi")
addr.append('aoslu')
# 插入元素
# addr.insert(2,"data")
# 删除元素
# del addr[1]
# addr.pop()
# name = addr.pop(1)
# print(name)
# 用值移除元素
# addr.remove('wudi')
# sort将列表按字母排序
# addr.sort(reverse=True)
# 临时排序显示
# print(sorted(addr))
# 倒着打印列表(反转)
# addr.reverse()
# print(addr)
# len 计算列表长度
# print(len(addr))
二、操作列表
for 循环
magicians = ['alice', 'david', 'carolina']
# for i in magicians:
# print(i)
for i in magicians:
print(i.title() + ", the was bigmom!")
range 创建数字列表
for i in range(1, 10):
print(i)
# list 输出数字列表
lists = list(range(1, 10))
print(lists)
# list 输出递增数值
lists = list(range(1, 100, 20))
print(lists)
# 输出1-10的平方
se = []
for i in range(1, 11):
square = i**2
se.append(square)
print(se)
解析列表
# 一行表示,等价于上面的列子
se = [i**2 for i in range(1, 11)]
print(se)
切片
se = ['one', 'two', 'thr', 'for', 'fiv']
# 打印前三个元素
print(se[0:3])
print(se[:3])
# 打印2到4对元素
print(se[1:4])
# 打印3到最后个元素
print(se[2:])
# 打印3到倒数第二个个元素
print(se[2:-1])
# 最后2个元素
print(se[-2:])
遍历切片
se = ['one', 'two', 'thr', 'for', 'fiv']
# 打印后三个元素
for i in se[-3:]:
print(i.title())
复制列表
se = ['one', 'two', 'thr', 'for', 'fiv']
se2 = se[:]
for i in se2:
print(i)
元组 [tuple]
元组就是值不可变的列表
core=(200, 50, 112)
print(core)
三、if 语句
1、简单打印案列
se = ['one', 'two', 'thr', 'for', 'fiv']
# 筛选相等
for i in se:
if i == 'thr':
print(i.upper())
else:
print(i)
# 筛选不等
for i in se:
if i != 'thr':
print(i.upper())
else:
print(i)
2、数值对比赋值
# 可用= < > <= >= !=
>>> age=18
>>> age==19
False
>>> age==18
True
3、条件检测
# and 且
>>> ag1 >= 10 and ag2 >= 20
True
>>> ag1 >= 10 and ag2 > 20
False
# or 或
>>> ag1 > 15 or ag2 < 25
True
# in 检查元素是否在列表或元组当中
se = ['one', 'two', 'thr', 'for', 'fiv']
if 'one' in se:
print("zai zai zai")
# not in 检测不再其中
if 'one1' not in se:
print("zai zai zai")
4、if 语句案列
age = 5
if age < 4:
print("less")
elif age >=4 and age < 10:
print("mid")
else:
print("big")
四、字典
1、简单案列
# 创建空字典
age = {}
age = {'name':'xiaoming', 'age':18}
print(age['age'])
2、添加键值对
age['xpos'] = 10
print(age)
# {'name': 'xiaoming', 'age': 18, 'xpos': 10}
3、删除一个键值对
del age['name']
print(age)
4、长字典的写法
类似于结构体或者二维数组
love = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
5、遍历字典
love = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for key, value in love.items():
print(key + " love \"" + value + "\" programming language")
# 遍历字典所有的键
for key in love.keys():
print(key)
# 按字母顺序遍历所有key
for key in sorted(love.keys()):
print(key.title())
# 遍历字典所有值
for key in love.values():
print(key.title())
# set 可以除去重复的值
for key in set(love.values()):
print(key.title())
6、字典列表
al0 = {'color': 'green', 'points': 5}
al1 = {'color': 'yellow', 'points': 10}
al2 = {'color': 'red', 'points': 15}
al = [al0, al1, al2]
for i in al:
print(i)
7、嵌套
通常将列表套入字典,字典也可以嵌入字典
五、用户输入和while循环
1、input() 接收输入
msg = input("Please input char: ")
print(msg)
python2 的接收输入是raw_input()
2、int() 转化为整数
msg = input("Please input char: ")
if int(msg) > 10:
print("Hello")
3、% 求模
msg = 9 % 2
print(msg)
4、while 循环
num = 0
while num < 10:
print("I am is " + str(num))
num += 1
5、在while中退出输入
msg = ""
while msg != "quit":
msg = input("Input your char: ")
print(msg)
6、break 退出 while 循环
7、continue 跳过一次循环
8、列表之间的提取移动
old_user = ['Jane', 'Tom', 'Jiry']
new_user = []
while old_user:
user = old_user.pop()
print(user)
new_user.append(user)
print(new_user)
9、删除列表中所有的某一元素
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
while 'cat' in pets:
pets.remove('cat')
print(pets)
10、输入填充字典
exam = {}
keep = 1
while keep <= 3:
name = input("Input student name: ")
sorce = input("Please enter score: ")
exam[name] = sorce
keep += 1
print(exam)
六、函数
1、定义函数
def show_info():
print("You are pig!")
show_info()
2、传参
def show_info(name):
print(name + " are pig!")
show_info('XiaoMing')
3、传实参
def show_info(name, animal='dog'):
print(name + " likes " + animal)
show_info('XiaoMing')
4、return 返回值
def show_info():
return 1
print(show_info())
5、可选实参
人名为列,两个字和三个字
def show_name(first, last, mid=""):
if mid:
print('name is "' + first + last + mid + '"')
else:
print('name is "' + first + last + '"')
show_name('zhang', 'yi', 'de')
6、传递列表
def hello_list(names):
for i in names:
print("Hello " + i + "!!!")
names_list = ['Jine', 'Tom', 'Marya', 'Jikc']
hello_list(names_list)
7、切片传递一个副本列表
def show_list(lists):
while lists:
element = lists.pop()
print(element)
names = ['Jane', 'hah', 'Tom']
# 下面如果不切片,则原列表会被修改
show_list(names[:])
print(names)
8、*号元组 传递任意数量的实参
# *name 意思是创建一个名为name的元组,它收录所有参数
def show_name(*name):
for i in name:
print(i)
show_name('ZhangFei', 'LiuBei')
show_name('GuanYu', 'ZhangFei', 'LiuBei')
# 结合参数时,任意形参放在最后
def show_name(age, *name):
9、**号字典,传递任意字典
def build_profile(first, last, **user_info):
"""创建一个字典,其中包含我们知道的有关用户的一切"""
profile = {}
profile['first_name'] = first
profile['last_name'] = last
for key, value in user_info.items():
profile[key] = value
return profile
user_profile = build_profile('albert', 'einstein',
location='princeton',
field='physics')
print(user_profile)
10、import 创建导入模块
创建show.py
def show_name(*name):
for i in name:
print(i)
在test.py中导入show并且调用
import show
show.show_name('Liubei', 'ZhangFei')
1)导入模块中的某一个或某几个函数
# from 导入模块 import 函数名1,函数名2...
from show import show_name
show_name('Liubei', 'ZhangFei')
2)as 给导入的函数建立别名
from show import show_name as mp
mp('Liubei', 'ZhangFei')
3)导入模块所有函数 (不推荐使用)
from module_name import *
七、类
1、创建一个狗类
定义类名默认用大写,对象用小写,self类似this指针
class Dog():
def __init__(self, name, age):
# 初始化小狗名称和年龄
self.name = name
self.age = age
# 趴下
def prone(self):
print(self.name.title() + " already prone!")
# 叫喊
def yap(self):
print(self.name.title() + " being yap!")
# 显示信息
def show_info(self):
print("This dog name: " + self.name.title())
print("This dog age: " + str(self.age))
my_dog = Dog('Huangma', 10)
print(my_dog.show_info())
print(my_dog.prone())
print(my_dog.yap())
2、类继承
疯狗也是狗,狗类作为父类
super()是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用Mad_dog的父类的方法__init__(),让Mad_dog实例包含父类的所有属性。父类也称为超类(superclass),简称super
# 疯狗
class MadDog(Dog):
def __init__(self, name, age):
super().__init__(name, age)
def virus(self):
print("你被疯狗 " + self.name + " 传染了狂犬病")
mad_dog = MadDog('BY', 10)
mad_dog.virus()
3、从一个模块中导入多个类
from dog import Dog, MadDog
八、文件操作
1、读取文件案列
with 相当与一个自动的close,obj就是文件描述符或者句柄
使用with时,open返回的对象只能在with代码块可用
with open('/root/pi.txt') as obj:
buf = obj.read()
print(buf)
# 去掉空行
print(buf.rstrip())
2、逐行读取
file_name = '/root/pi.txt'
with open(file_name) as obj:
for line in obj:
print(line.rstrip())
3、操作文件内容
file_name = '/root/pi.txt'
with open(file_name) as obj:
lists = obj.readlines()
buf = ''
for i in lists:
buf += i.rstrip()
print(buf)
4、检测生日号码是否在文件数字中
file_name = '/root/pi.txt'
with open(file_name) as obj:
lists = obj.readlines()
buf = ''
for i in lists:
buf += i.rstrip()
birthday = input("Enter your birthday: ")
if birthday in buf:
print("yes! contain!")
else:
print("no! without!")
5、写入文件
第二个参数可选 r w a r+
注意 ‘w’ 会清空原有数据
file_name = '/root/pi.txt'
with open(file_name, 'w') as obj:
obj.write("I love you!")
# 写入多行
with open(file_name, 'w') as obj:
obj.write("I love you!\n")
obj.write("I love you!\n")
# 在最后行附加 a
with open(file_name, 'a') as obj:
obj.write("She love you!\n")
obj.write("He love you!\n")
# 加读写锁案列
import threading
class RWlock(object): def __init__(self):
self._lock = threading.Lock()
self._extra = threading.Lock()
self.read_num = 0
def read_acquire(self):
with self._extra:
self.read_num += 1
if self.read_num == 1:
self._lock.acquire()
def read_release(self):
with self._extra:
self.read_num -= 1
if self.read_num == 0:
self._lock.release()
def write_acquire(self):
self._lock.acquire()
def write_release(self):
self._lock.release()
九、异常
print(5/0) 会报错 ZeroDivisionError
使用 try except 解决这种情况
try:
print(5/0)
except ZeroDivisionError:
print("Zero divisor")
1、try-except-else 除法计算器
# 对一个除法计算器进行异常处理
print("Enter two numbers, divede!")
print("Enter 'q' to quit!")
while True:
one_num = input("\none num is: ")
if one_num == 'q':
break
two_num = input("two num is: ")
if two_num == 'q':
break
try:
result = int(one_num) / int(two_num)
except ZeroDivisionError:
print("Zero divisor")
else:
print(result)
2、计算一个文件大约有多少单词
split() 是将一个字符串以空格分隔来创建一个链表的函数
file_name = '/root/man.txt'
try:
with open(file_name) as obj:
content = obj.read()
except FileNotFoundError:
print("Sorry '" + file_name + "' does not exist!")
else:
# 计算文件大约含有多少个单词
word_list = content.split()
number = len(word_list)
print(file_name + ' has about ' + str(number) + " words")
3、异常时不提示
try:
print(5/0)
except ZeroDivisionError:
pass
十、json 存储读取数据
json可以存储列表和字典,很方便
# 存储一个列表
import json
file_name = 'man.json'
numbers = [1, 3, 1, 4, 5, 2, 0]
with open(file_name, 'w') as obj:
json.dump(numbers, obj)
# 读取一个列表
import json
file_name = 'man.json'
with open(file_name) as obj:
numbers = json.load(obj)
print(numbers)
# 显示wife名字,没有就创建一个
import json
file_name = 'wife.json'
try:
with open(file_name) as obj:
wife_name = json.load(obj)
except FileNotFoundError:
wife_name = input("You don't have a wife.\nCreate your wife name: ")
with open(file_name, 'w') as obj:
json.dump(wife_name, obj)
else:
print("Your wife is " + wife_name)
十一、测试代码
写完后测试代码由其重要, 一定要检测bug。
工作的项目关键功能一定要测试代码
加载unittest模块,然后测试
十二、获取shell的输出
python中获取shell命令输出的方法:
import subprocess
output = subprocess.Popen(['ls','-l'],stdout=subprocess.PIPE,shell=True).communicate()
print output[0]
import commands
return_code, output = commands.getstatusoutput('ls -l')
import os
process = os.popen('ls -l') # return file
output = process.read()
process.close()
项目
一、数据可视化
# 首先安装软件
apt install -y python3 python3-pip
pip3 install matplotlib
1、绘制平方数折线图
import matplotlib.pyplot as plt
squares = [1, 4, 9, 16, 25]
plt.plot(squares)
plt.show()
2、修改标签名字和线条粗细
上面的案列图示对应是错误的,需要校正,输入如下
import matplotlib.pyplot as plt
number = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
# 传入列表,设置线的粗细度
plt.plot(number, squares, linewidth=5)
# 设置标题和字体大小
plt.title("Square Numbers", fontsize=24)
# 设置x轴名称
plt.xlabel("Number", fontsize=14)
# 设置y轴名称
plt.ylabel("Square", fontsize=14)
# 设置刻度对大小
plt.tick_params(axis='both', labelsize=14)
plt.show()
二、Web应用程序
# 首先创建一个项目文件夹,然后再创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 安装Django
pip3 install Django
# 用Django创建项目在project目录下
django-admin.py startproject project .
# 创建一个移植的数据库
python3 manage.py migrate
# 启动服务,测试是否成功,浏览器输入127.0.0.1:8000
python3 manage.py runserver
# 不关闭上面,再打开一个终端重新进入虚拟环境创建应用程序项目
root@K-ON:web_notes# source venv/bin/activate
(venv) root@K-ON:web_notes# python3 manage.py startapp appname
进入appname 编辑models.py
from django.db import models
# Create your models here.
class Topic(models.Model):
# 定义一个长度最大200对字符变量
text = models.CharField(max_length=200)
# 自动获取当前事件
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.text
# 进入project 修改settings.py 在元组最后添加自己的应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'appname',
]
# 返回最上层目录,更改数据库(虚拟环境)
python3 manage.py makemigrations appname
python3 manage.py migrate
三、库记录
1、 os 模块
# 执行系统指令
os.system("指令")
# 执行系统指令,并获取打印的数据
obj = os.popen("cat /etc/*release")
print(obj.read())
list_data = obj.split('\n') # 通过换行符将数据切分为列表