提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
经过较长时间的学习,有了长进,但是在考核中还是遇到了不少问题
一、考核内容
python,正则表达式,csv文件与matplotlib
二、题目
1.解答题
1、简述你所理解的机器学习,并说明目前学过的知识与机器学习的关系。(10 points)
答案:
参考回答方向:数据处理及其在机器学习中的地位。数据处理是机器学习的前期重要步骤,机器学习就是从数据中学到“知识”。数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
2、关于正则表达式,回答以下问题:(5 × 4 = 20 points)
正则表达式的概念及知识点
正则表达式是由一些具有特殊含义的字符组成的字符串,多用于查找、替换符合规则的字符串。在表单验证、Url映射等处都会经常用到。
1.元字符
代码 | 作用 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思 |
$ | 匹配字符串的结束 |
[1-2] | 匹配1~2的整数 |
2.反义字符
反义字符:多用于查找除某个字符以外其他任意字符均可以的情况
\W 匹配除字母、数字、下划线、汉字以为的字符形如 +,-,*
\S 匹配除空格以外的任意字符形如:1,* ,)
[^abcde]匹配除abcde以为的其他字符 如 e,f,g,h
限定字符多用于重复匹配次数
*
重复零次或更多次
+
重复一次或更多次
?
重复零次或一次
{n}
重复n次
{n,}
重复n次或更多次
{n,m}
重复n到m次
正则表达式的题目
1)什么是正则表达式,它有什么作用;
答案:
正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配。正则表达式一定是对字符串进行操作,方便于有效数据信息的提取。
2). * + ?
分别是什么含义,如果将他们进行组合呢?
答案
.
任意字符 *
重复零次或更多次
+
重复一次或更多次
?
重复零次或一次(非贪婪匹配)
*?
重复任意次,但尽可能少重复
+?
重复 1 次或更多次,但尽可能少重复
??
重复 0 次或 1 次,但尽可能少重复
3)python re 模块中,findall、search 和 match 有什么区别;
答案
findall:返回所有满足匹配条件的结果, 放在列表里
search:会在字符串内查找模式匹配, 只到找到第一个匹配然后返回一个包含匹配信息的对象, 该对象可以通过调用 group() 方法得到匹配的字符串, 如果字符串没有匹配,则返回 None
match:同 search, 不过尽在字符串开始处进行匹配
4)写出匹配手机号的正则表达式(手机号共 11 位,且以 13、14、15、18 开头)
答案:∧(13|14|15|18)[0-9]{9}$
3、python 和 C 语言的区别和优缺点,它们分别适用于什么场合。(10 points)
答案:
参考回答方向:
翻译方式来看,python 是解释型语言,不需要预先编译,边解释边执行;C 是编译型语言,需要通过预先编译变成机器语言,再执行,所以 C 执行语言效率比 python高;
C 语言是面向过程的,python 可以面向对象;
C 语言更适合底层开发,直接与操作系统打交道;python 更适合于脚本编写、数据科学、机器学习等方向的应用(库函数的强大功能)。
面向对象
4、关于面向对象,回答以下问题:(5 + 5 + 4 = 14 points)
(1)什么是面向对象(面向对象的特性),它与面向过程有什么区别;
答案
参考回答方向:
- 一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模;
- 主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在整个解决问题的步骤中的行为;
- 三大特性:
封装(封装是将过程和数据包围起来, 数据只能通过定义的接口访问)
继承(建立一个新的派生类,从一个或多个先前定义的类中继承数据和函数,可以重新定义或加进新数据和函数,从而建立了类的层次或等级)
多态(同一操作作用与不同类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,将得到不同的结果)
(2)类、对象、实例、实例化之间的关系;
答案:
- 一切皆为对象,类是一种类型,一种更高层次的抽象
- 实例是根据类创建出来的一个一个对象
- 用类创建对象的过程就是实例化
(3)说明”__init__”
函数的作用,一定要有这个函数吗?
答案:
该函数为构造函数,类实例化时会自动调用,一般用于参数的初始化;可以没有这个函数(如果不需要参数初始化的话)。
5、关于 csv 操作,回答以下问题:(4 × 2 = 8 points)
(1)csv 文件一定是逗号分隔的吗?pandas 如何读取 csv 文件,读入后是什么格式?
答案:
- csv:逗号分隔值(Comma-Separated Values)有时也称为字符分隔值,因为分隔字符也可以不是逗号。其文件以纯文本形式存储表格数据(数字和文本)
- pandas 通过 read_csv() 函数读入 csv 文件,读入后是 DataFrame 格式。
(2)写出关键语句:将以逗号 ( , ) 分隔的文件 test.csv 读入,并将分隔符改为横线 (-),覆盖原文件。
答案
import pandas as pd
data = pd.read_csv('test.csv', sep=',', header=None)
data.to_csv('test.csv', sep='-', index=False , header=False)
6、python 中,如何对字典、列表、字符串之间进行两两转换?(10 points)
[’a’, ’b’, ’c’] ⇐⇒ ’abc’
k = [’a’, ’b’, ’c’], v = [1, 2, 3] ⇐⇒ {’a’: 1, ’b’: 2, ’c’: 3}
{’a’: 1, ’b’: 2, ’c’: 3} ⇐⇒ ’{”a”:1, ”b”:2, ”c”:3}’
# 列 表 转 字 符 串
''.join(['a', 'b', 'c']) # 'abc'
#字 符 串 转 列 表
list('abc') # ['a', 'b', 'c']
# 两 个 列 表 转 成 字 典
k = ['a', 'b', 'c']
v = [1, 2, 3]
dict(zip(k, v)) # {'a': 1, 'b': 2, 'c': 3}
#字 典 转 列 表
d = {'a': 1, 'b': 2, 'c': 3}
list(d.keys()) # ['a', 'b', 'c']
list(d.values()) # [1, 2, 3]
# 字 符 串 转 字 典
import json
s = '{"a":1, "b":2, "c":3}'
json.loads(s) #{'a': 1, 'b': 2, 'c': 3}
# 字 典 转 字 符 串
import json
d = {'a': 1, 'b': 2, 'c': 3}
json.dumps(d) # '{"a": 1, "b": 2, "c": 3}'
# str(d) 也 能 实 现
2.代码题
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-100,100)
y1=x**2+18
plt.subplot(1,1,1)
plt.plot(x, y1,'b-',label='f(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.title('picture')
plt.legend()
plt.show()
def f(x):
a=1
for i in range(2,int(x**0.5)+1):
if x%i==0:
a=0
return a
c=1
b=int(input())
if f(b)==0:
print('0')
else:
for i in range(2,b):
if f(i)==1:
c+=1
print(c)
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1,4)
y1,y2,y3,y4= np.sin(x),np.cos(x),np.tan(x),np.cos(x)*np.cos(x)
plt.subplot(2,2,1)
plt.plot(x, y1,'b-', label='sinx')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.subplot(2,2,2)
plt.plot(x, y2, 'y-',label='cosx')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.subplot(2,2,3)
plt.plot(x, y3, 'g-',label='tanx')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.subplot(2,2,4)
plt.plot(x, y4, 'r-',label='cosx^2')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
c=[]
d=[]
a=list(input().split())
b=list(input().split())
for i in b:
d.append(i.lower())
for i in a:
c.append(i.lower())
for i in range(0,len(c)):
if c[i] not in d:
print(a[i],end=' ')
附加题
1、说明 #include<filename.h> 和 #include”filename.h” 的区别。
答案:
- 对于 #include<filename.h>, 编译器先从标准库路径开始搜索 filename.h,使得系统文件调用比较快;
- 对于 #include”filename.h”,编译器先从用户的工作路径开始搜索 filename.h,后去寻找系统路径,使得自定义文件较快。
2、说明 with 语句的原理,以及 with 和文件操作结合的好处。
答案:
上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了__enter__()
和 __exit__()
方法。上下文管理器定义执行 with 语句时要建立的运行时上下文,负责执行 with 语句块上下文中的进入与退出操作。通常使用 with 语句调用上下文管理器,也可以通过直接调用其方法来使用。对于语句:with EXPR as VAR: BLOCK
- 执行 EXPR,生成上下文管理器 context_manager;
- 获取上下文管理器的
__exit__()
方法,并保存起来用于之后的调用; - 调用上下文管理器的
__enter__()
方法;如果使用了 as 子句,则将__enter__()
方法
的返回值赋值给 as 子句中的 VAR; - 执行 BLOCK 中的表达式;
- 不管是否执行过程中是否发生了异常,执行上下文管理器的
__exit__()
方法,__exit__()
方法负责执行“清理”工作。
对于 with 与文件操作的结合,可以自动执行__exit__()
方法关闭文件,防止编程人员忘
记关闭。若文件打开后未使用 close() 进行关闭,则被打开的文件会一直被占用,其它进
程无法对该文件进行读写,直到该程序运行结束。
3、分别简述你所了解的机器学习算法
总结
感觉平时对一些基础的概念性的东西了解还不是特别深,就是自己感觉自己懂了,但是实战的时候又发现有很多不会的,以后要重视这方面的学习,还有再每次实战后总结经验,继续努力