目录
- 一、前言
- 二、笔记
- 1. 从hello world开始
- 2. 正则表达式
- 3. 斐波那契数列
- 4. 求一个区间内的质数
- 5. 获得文件夹内所有的文件名
- 6. 阶乘
- 7. 打印九九乘法表
- 8. 阿姆斯特朗数 / 水仙花数
- 9. ASCII码和字符的转换
- 10. 求最大公约数
- 11. 最小公倍数
- 12. 打印日历
- 13. 字符类型的判断
- 14. 大小写转换
- 15. 判断输入字符的长度
- 16. 列表推导式
- 17. scrapy爬虫框架
- 18. element object 转 str
- 方向
一、前言
在整理之前的一些笔记的时候,发现了这个文件,之前是保存在本地,但是经常忘记放在哪了,主要是一些基础,现在就想记录在博文里。
都是一些简单的基础题,还有一些容易遗忘的知识点,稍微记录以下。
二、笔记
1. 从hello world开始
各种print字符串的方法,format的用法,以及简便的使用方法
s = 'hello world'
print(s) #输出字符
print (s[2]) #输出字符的第三个字母
print (s[2:5]) #输出字符的第三个到第六个字符
print (s[2:]) #输出字符的第三个以后的字符
print (s * 2) #输出字符两次
print (s + 'text') #连接字符
print('我叫 %s,今年 %d 岁 '%('xiaoming',10))
print("我叫 {},今年 {} 岁".format("小明",10))
print(f"我叫{'小明'},今年 {10} 岁")
print("let's go!")
print('"life is short,you need python"')
print("\"life is short,let's learn python.\"")
print("I love python\nI love food!")
print("D:\\three\\two\\one\\now")
print(r"D:\three\two\one\now")
2. 正则表达式
一些常用的正则使用方法,还有一些常用的匹配方式和一些字符的匹配,之后在继续补充。
import re
re.search(pattern,string,flag)
re.I 可以忽略大小写,及大小写都会被查找到。
re.M 把每个字符串的每行的起始位置当作匹配起点。
re.S .一般情况点号操作符可以表示除换行符以外的所有操作符,使用re.S可以匹配所有的包括换行符的所有字符。
re.match(pattern,string,flag) 从字符串的起始位置开始匹配,没有则返回空。
re.findall(pattern,string,flag) 搜索字符串,返回以列表类型的所有可匹配的子串。
re.split(pattern,string,maxsplit = 0,flag,) 将字符串按照正则表达式匹配的结果进行分割,返回列表类型。
maxsplit 表示为最大分割数,剩余部分作为最后一个元素输出。
pat = re.compile(r'[1-9]\d{5}')
rst = pat.search('BIT10081') 使用面向对象的形式编译,可以多次编译
3. 斐波那契数列
斐波那契数列就是后一个数是前两个数的和,具体怎么解释,百度搜索以下哈。
写法很多,能实现就行。
a,b = 0,1
while b < 1000:
print(b,end=',')
a,b = b,a+b
输出:
4. 求一个区间内的质数
质数是指只能被1和自己整除的数,所以,就用这个原理,来求质数。
for n in range(2,100):
for x in range(2,n):
if n%x == 0:
# print(n,'=',x,'*',n//x)
break
else: #表示穷尽了一组循环后,任然是false,执行else
print(n,'is zhishu')
输出:
5. 获得文件夹内所有的文件名
可以获得带有后缀的文件名称列表
# 得到文件夹下的所有文件名称,注意:带后缀的文件名称
filenames = os.listdir(path)
for file in filenames:
6. 阶乘
使用阶乘的定义来写,具体怎么表述的,还是百度哈
def jiecheng(x = 1):
s = 1
for i in range(1,x+1):
s = i * s
return s
for i in range(1,10):
print(jiecheng(i))
输出:
7. 打印九九乘法表
这个比较简单哈,稍微看看就好,关键在于输出的占位符,让他们一样长。
负号表示左对齐,没写或者写 + 表示右对齐,3表示占三个字符,大家可以试一下输出是什么样子的。
for i in range(1,10):
for j in range(1,10):
s = i * j
print('%d*%d = %-3d' %(i, j, s), end= '\t')
print('\n')
输出:
8. 阿姆斯特朗数 / 水仙花数
阿姆斯特朗数又叫做水仙花数,如果一个数各个位置上的数的三次方之和等于其本省,这个数就是阿姆斯特朗数。
这里写成了输入一个三位数,判断是否为水仙花数,如果要写成查找一定范围的水仙花数,可以稍微改写一下,这里我就不改了,有点懒了,哈哈哈。
关键就是使用地板除("//")来分解出各个位数,然后判断一下即可。
times = 5
list = []
while True:
try:
if times > 1:
a = int(input('please input a number(1-999):'))
if a > 99 and a < 1000 :
bw = a // 100
sw = a //10 % 10
gw = a % 10
else:
print('请输入一个三位数:')
continue
else:
break
if bw**3 + sw**3 + gw**3 == a:
list.append(a)
print('阿姆斯特数:',list[:])
else:
print('不是阿姆斯特数')
times -=1
except ValueError as reason:
print('输入错误',str(reason))
continue
9. ASCII码和字符的转换
chr:把ASCII码转换成字符
ord:把字符转换成ASCII码
chr别和str啥的看岔了
a = 97
chr(a)
b = 'a'
ord(b)
10. 求最大公约数
最大公约数是最大的能被两个数同时整除的数,具体怎么解释,百度哈
a = int(input('please input a number:'))
b = int(input('please input another number:'))
for i in range(2,a+1):
if a % i == 0 and b % i == 0:
num = i
print(num)
输出:
11. 最小公倍数
最小公倍数就是最小的能同时整除两个数的数,具体百度哈!
最小公倍数肯定是在这两个数的任意一个数,至这两个数的积之间,找到一个能同时整除这两个数,就退出循环。
a = int(input('please input a number:'))
b = int(input('please input a number:'))
for i in range(a,a*b+1):
if i % a == 0 and i % b == 0:
num = i
break
print(num)
输出:
12. 打印日历
我觉得没什么用哈,看看就好,要是有啥用,可以评论补充下。
import calendar
#mm = int(input('输入月份:'))
calendar.setfirstweekday(firstweekday = 6 )
while True:
try:
yy = int(input('输入年份:'))
for i in range(1,13):
print(calendar.month(yy,i))
except (NameError,KeyError) :
print('谢谢使用!!!')
13. 字符类型的判断
可以用作判断条件
print("-----测试实例-----")
str = "Hello World"
print('是否都是数字或者字母:',str.isalnum())
print('是否所有字符都是字母:',str.isalpha())
print('是否所有字符都是数字:',str.isdigit())
print('是否所有字符都是小写:',str.islower())
print('是否所有字符都是小写:',str.isupper())
print('是否所有单词都是首字母大写,像标题:',str.istitle())
print('是否所有字符都是空白字符',str.isspace())
输出:
14. 大小写转换
str = "Hello World"
print('把所有字符中的小写字母转换成大写字母:',str.upper())
print('把所有字符中的大写字母转换成小写字母:',str.lower())
print('把第一个字母转化为大写字母,其余小写:',str.capitalize())
print('把每个单词的第一个字母转化为大写,其余小写:',str.title())
输出:
15. 判断输入字符的长度
while True:
num = 0
s = input ('输入字符:')
for i in s:
if i != '':
num += 1
print(num)
if s == '':
break
输出:
有点小bug,就是字符串中有引号的时候,有时会出错,可以讨论一下怎么改合适。
16. 列表推导式
同理,还有元组推导式和字典推导式。
a = [i for i in range(100) if i%2 ==0 and i%3==0]
输出:
17. scrapy爬虫框架
之后会详细写scrapy,这里就简单提一下。
第一,更改目录,改成要建立爬虫工程的文件目录,创建爬虫。
-- cd pycodes (创建一个目录,存放工程文件)
-- scrapy startproject python123demo (创建工程,工程名称)
-- cd python123demo (转移到工程目录中)
-- scrapy genspider demo python123.io (生成一个爬虫,叫demo,最后一个为域名,只能爬取这个域名一下的相关链接)
第二,修改demo的代码,完善爬虫的功能,配置爬虫文件。和常规爬虫的代码类似。
--sitting相关配置,
-- ROBOTSTXT = FALSE
-- 任意位置加上:LOG_LEVEL = 'ERROR'
-- 改use-agent: 复制粘贴,该游览器代理
-- 开启管道,可以多通道处理: 'taobao.pipelines.TaobaoPipeline': 300,数值表示的是优先级,数值越小,优先级越高
--parse解析response
-- 直接使用response.xpath()方法,xpath语法和正常的一样处理
-- xpath返回的是列表,列表元素是selector类型,使用'.extract()'方法转换成字符串,列表则是转换每一个列表元素转换成字符串,还有extract_first()方法
-- 使用content= ''.join(content),用空白字符连接content中的元素,实现一个链接的功能。
--item,每次yield item就会调用一次item类
-- spider中导入item类
-- items创建管道: # name = scrapy.Field()
-- 在parse中引入管道:
-- item = Python1Item()
-- 把数据提交给item: item['title'] = a.xpath('p/text()').extract()
-- 将item提交给管道:
-- yield item
--pipelines操作:持久化处理,多个管道类似操作,新建一个管道类,打开文件一次,写入N次,关闭一次:
-- 初始有一个process_item方法,用来处理item对象
-- 承接item对象的数据: movie = item['movie']
-- 打开操作:
-- 重写一个父类的方法,只会被爬虫调用一次:
-- def open_spider(self,spider):
-- 关闭文件操作:
-- 重写一个父类方法:
-- def close_spider(self,spider):
第三,运行爬虫:scrapy crawl demo(这个为爬虫的名字)
18. element object 转 str
etree.tostring(each)
直接将each(element object)解析成str对象
方向
在看完基础之后,就可以进阶看一些别的了,这里稍微记录一下,我用到的一些东西。
科学计算类:
numpy、pandas、scipy、sympy、matplotlib等
图像处理类
PIL(Python Imaging Library)、CV2(OpenCV-Python)等
爬虫类
Requests、Seleinum、Scrapy等
表格处理类
pandas、openpyxl、xlrd、xlwt等
正则匹配定位类
re、xpath、css、bs4等选择器
深度学习类
pytorch、TensorFlow、Keras、Sklearn(Scikit-Learn)等