Python 刷题笔记

本文记录了我在使用python刷题的时候遇到的知识点。

选择、填空题

  1. Python3 中,布尔型只有 True 和 False 两个值,但它们的值本质上是 1 和 0,因此它们可以和数字进行数学运算。 正确 e.g. True+1 == 2

  2. 在Python 3.X版本中,整除运算符产生的结果的数据类型可能为浮点型 正确 e.g. 33.2 // 3 == 11.2

  3. 要将3.1415926变成00003.14,如何进行格式化输出 "%08.2f"% 3.1415926

  4. 如果一句Python代码过长,可在行末写下符号"/",然后换行继续写 错误 分行是\或者()

  5. 字典的键可以是字符串常量也可以是整型常量,甚至还可以是列表 错误 列表不能作为字典的键

  6. 对于数字n,如果表达式 0 not in [n%d for d in range(2, n)]的值为True,则说明n是素数 正确

    列出了所有的 n% 2~n的数字值 如果0不在就说明是素数

  7. for循环结束后,循环变量i不存在,导致程序错误 错误

    i变量会是最后的值

  8. 表达式(i**2 for i in range(100))的结果是个元组 错误! 这是一个生成器 e.g.

(i**2 for i in range(10))
> for i in a:
... print(i)
0 1 4 9 16 25 ...
  1. 正则表达式'\d{5}'可用来检查字符串是否为5个数字字符组成的字符串 错误

    可匹配5个数字的模式 但是一串可能有多个这样的子串?

  2. 下面不能严格匹配YYYY-MM-DD这样日期格式的正则表达式是

A.\d{4}-\d{2}-\d{2}
B.[0-9]-[0-9]-[0-9]
C.[0-9]{4}-[0-9]{2}-[0-9]{2}
D.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
  1. 如果递归函数没有递归结束的语句,将会导致无穷递归,从而执行时出现“死循环” 错误

    解释:递归是不断有函数进入栈,就像翻不完的书,不是死循环。

  2. write方法用于把字符串写入文本文件并在最后添加换行符。 错误

  3. 如果首先以读模式打开一个文件,然后用seek方法把文件指针定位到文件的最后,再通过tell方法就可以得到一个文件的长度。 ** 正确**

  4. 异常 a undefined

def main():
a,b=eval(input())
try:
s=a/b
print(s)
except: 
print("Divide 0!")main()

基本输入输出

待消化sys.stdout

sys.stdininput

sys.stdin.readlines() or readline

前者一次读入多行,返回一个行列表,每个元素为输入的每行内容。

结束输入Linux: ctrl+d+enter, Windows: ctrl+z+enter

import sys

#实现和input一样的功能
print("please input something\n")
s = sys.stdin.readline()
print(s, end='') #会读入\n, input不会 #文件作为整体的输入
for line in sys.stdin.readlines():
if not line:
break
else:
print (line) C:\> python test.py < 123.txt

对输入结束的判断

sys.stdin
for lin in sys.stdin: input()
try:
...
except EOFError:
pass

运行脚本时传入参数

  • sys.argv

argv[0] 是被调用的脚本的文件全名或全路径,argv[1]和一会的就是传入的数据

python filename.py 1,2,3 10
import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]
print(arg1, type(arg1), type(arg2))
1,2,3 str str
  • argparse

import argparse
parser = argparse.ArgumentParser(description='manual to this script') parser.add_argument('--gpus', type=str, default = None)
parser.add_argument('--batch-size', type=int, default=32) args = parser.parse_args() print(args.gpus, type(args.gpus))
print(args.batch_size, type(args.batch_size)) D:\>python argv_test.py --gpus=0,1,2 --batch-size=20 0,1,2 <class 'str'>
20 <class 'int'>

Python语言基础

  1. Python的浮点数常量也有十进制、二进制、八进制和十六进制等表示方式 X 十进制, 科学计数法

  2. pow(x,y,z) -> x**y%z

  3. type(1+8.0//4) == float 整除的结果取决于被除数和除数的类型

序列

列表

  • 只能通过切片访问列表中的元素,不能使用切片修改列表中的元素 错误

  • 两个列表相加 newlist = [x+y, for x,y in zip(list1, list2)]

  • 现有列表 k = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0],那么Python3解释器执行 k.insert(-2, 'b')后执行k[-2]的结果是 9 b插入在9的位置 9 0 向后移动

元组

  • 创建只包含一个元素的元组时,必须在元素后面加一个逗号,例如 a = (3,)正确

    如果是a = (3) 或者a = ('a') 类型分别为int和str,只有一个元素的元组一定要加上,

  • 列表可以是元组内的元素,可以改变元组内列表的值

字典

  • 合并两个字典
a={'a':1,'b':2}
b={'a':3,'c':4}
a.update(b) c = dict(a,**b)
  • 字典中的“键”必须是可哈希对象,不能是列表,可以是元组,字符串,数值

集合

  • 集合中的元素必须是不可变类型,即列表不可以是集合内的元素

选择与循环

  1. a = range(100) 哪些操作合法:a[-3],a[2:13], a[::3]

    • a[a️c] range(a, b, c)
  2. s

字符串与正则表达式

字符串

  1. 要一次去掉字符串中的 , . 等符号,可以使用maketranstranslate方法

  2. 'GUN's Not %s %%' % 'UNIX' >> "GUN's Not UNIX %"

  3. 表达式'a' + 1 的值为 'b' 错误

    chr(ord('a') + 1)

  4. s

正则

  • 假设re模块已成功导入,并且有pattern = re.compile('^'+'\.'.join([r'\d{1,3}' for i in range(4)]) + '$'),那么表达式pattern.match('192.168.1.103')的值为None

  • 'back' match 'backup'√ match 'text.back' X

函数

在函数中修改传入参数的值

  • 整数,浮点数等不会因函数内变化而变
  • 列表对象在id不变的时候会影响到外部的
  1. 输出结果 F f C ls是全局变量
ls = ["F", "f"]
def fun(a):
ls.append(a)
return
fun("C")
print(ls)
  1. 输出结果10 None ss比函数迟声明 函数内的ss为局部变量
def hub(ss, x=2.0, y=2.0):
ss += x*y
ss = 10
print(ss, hub(ss, 3))
  1. 对于组合数据类型的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部不可以直接使用并修改全局变量的值 错误 类似上述1 的情况

  2. Python函数支持可变数量的参数,实参用“ *参数名 ”表示 错误 形参用*参数名表示

面向对象

文件

参数encoding是指明对文件编码,仅适用于文本文件。如果不明编码方式,默认是使用locale.getpreferredencoding()函数返回的编码方式。

seek(offset, from)方法

offset 文件指针偏移量, from: 0 文件开头 1当前位置 2文件末尾 默认为0 可以通过seek(0,2)定位到文件末尾

  • 用python删除文件和用linux命令删除文件

    os.remove(path) rm file_path

异常

  1. Python中,对于代码中的每个try,必须至少有一个except与它匹配 错误可以只有try finally

未分类

常见数学

3.5题目※

  1. 因数 i%n ==0 且n!=i n!=1 n是i的因数
  2. 素数 大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
  3. 完全数
  4. 真因子
  5. 完全平方数: 2 * 2 = 4 8 * 8 =64
  6. 互质:互质是公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数,后者是前者的特殊情形。
  7. 完数
  8. 水仙花数

欧几里得(辗转相除法)求两个正整数a, b的最大公约数

1)如果a<b,交换a,b的值2)r=a mod b(即r是a÷b的余数),若 r = 0,算法结束,b即为答案3)否则,互换:a ← b,b←r,并返回第一步。

快速判断是否是素数

原理:所有自然数可以用集合A = { 6n, 6n+1, 6n+2, 6n+3, 6n+4, 6n+5 }表示,其中 n >= 0,显然,子集B = {6n, 6n+2, 6n+3, 6n+4}内的元素都不是素数,所以只有6n+1和6n+5可能是素数,素数一定可以用6n+1和6n+5其中的一个形式表示,即大于等于5的素数与6的倍数相邻

判断一个数num是否是素数时,需要判断num是否有除1和自身之外的因子。这时只需要判断x是否是num的因子,其中1 < x <= int(sqrt(num)),而x的范围又可以用集合{ 6i, 6i+1, 6i+2, 6i+3, 6i+4, 6i+5 }表示。当num与6的倍数相邻时,num才可能是素数,因为num(奇数)和{6i, 6i+2, 6i+3, 6i+4}(偶数)互素,也就是{6i, 6i+2, 6i+3, 6i+4}不可能是num的因子,此时只需判断x = 6i+1和x = 6i+5是否是num的因子即可,如果都不是,则num是素数。

————————————————

原文链接:https://blog.csdn.net/qq_36963214/article/details/90490364


def is_prime_fast(num):
    if num <= 1:
        return False
    elif num == 2 or num == 3:
        return True
    elif num % 6 in (0, 2, 3, 4):
        return False
    else:
        half = int(sqrt(num)) + 1
        for i in range(5, half, 6):
# 只需判断6i+1 和6i+5是不是num的因子即可
            if num % i == 0 or num % (i+2) == 0:
                return False
        else:
            return True

性能评估

from time import perf_counter
start = perf_counter() print(perf_counter()-start)

numpy

import numpy as np
a = np.repeat(np.arange(5).reshape([1,-1]),10,axis = 0)+10.0 b = np.random.randint(5, size= a.shape)
c = np.argmin(a*b, axis=1)
b = np.zeros(a.shape)
b[np.arange(b.shape[0]), c] = 1
print b

random

random()不需要参数 返回0~1随机小数

random.sample(pop, k) 从pop类型中随机宣区k各元素构成的列表

  1. is 和 ==的区别 前者比较对象的id 后者比较 对象的value

  2. 列举几个你用过的第三方库 简单介绍一下用途

  3. 函数的可变长度参数 有什么形式(*arg, *kwarg)

    • 前者接收任意个实参并放到一个元组
    • 后者类似 关键参数 一样显示赋值多个实参 并放入字典
  4. 列表对象的复制 非拷贝方法(直接赋值) 拷贝方法(浅拷贝 深拷贝)

    https://www.cnblogs.com/Black-rainbow/p/9577029.html

  5. 能否举出几个 Python2 和 3不同的地方

    • print语法 print "xxx" -> print("xxx")
    • 2的字符串是ascii类型 unicode是单独的 3中有字符串类(unicode)以及字节类byte和bytearrays 且源码默认utf-8
    • 除法运算 3中的/是真除法 (整数之间的相除,结果也会是浮点数) //是整除 2/是整除
    • 2中有xrange()和range() 前者像生成器 惰性求值 后者返回整个列表 3中只有range类似2的xrange
    • 3 bin() 整数转二进制
    • x进制数写法 0?111 e.g. 二0b111 八0o777
    • 不等运算符 2有 != 和 <> 3只有前者
  6. python的垃圾回收机制 https://www.cnblogs.com/ajianbeyourself/p/11151498.html

    • 引用计数 每个对象含一个ob_ref字段 计算被引用次数 清0立刻回收
    • 标记清除 解决对象的循环引用问题 e.g. AB 相互引用 但是AB都del了 ; 阶段1给活动对象打标记 阶段2 回收非活动对象
    • 分代回收 将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代;垃圾收集频率与对象的存活时间的增大而减小
  7. 函数和方法有什么区别 如何判断一个对象是函数还是方法 https://www.cnblogs.com/xcsg/p/10551114.html

    • 函数:FunctionType 直接def的是函数 类中的函数 通过类的方式调用 也是函数 <function Work.show at 0x000001CC55BC5268>
    • 方法:MethodType 类中的函数 通过实例化对象调用 为方法 <bound method Work.show of <__main__.Work object at 0x000001CC55C2F240>>
    • 判别方式 1.直接print会得到上面的描述 2. isinstance(对象, FunctionType) isinstance(对象, MethodType)

Python 刷题笔记的更多相关文章

  1. PTA刷题笔记

    PTA刷题记录 仓库地址: https://github.com/Haorical/Code/tree/master/PTA/GPLT 两周之内刷完GPLT L2和L3的题,持续更新,包括AK代码,坑 ...

  2. 《Data Structures and Algorithm Analysis in C》学习与刷题笔记

    <Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...

  3. PAT-甲级刷题笔记和总结

     本帖主要记录一些自己在刷题过程中的一些笔记,包括: 1.常用的函数 2.STL中常用方法 3.常见错误 4.其他常用方法 5.刷题过程中的常见算法:https://www.cnblogs.com/M ...

  4. 18.9.10 LeetCode刷题笔记

    本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...

  5. LeetCode刷题笔记和想法(C++)

    主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...

  6. 《剑指offer》刷题笔记

    简介 此笔记为我在 leetcode 上的<剑指offer>专题刷题时的笔记整理. 在刷题时我尝试了 leetcode 上热门题解中的多种方法,这些不同方法的实现都列在了笔记中. leet ...

  7. LeetCode刷题笔记 - 12. 整数转罗马数字

    学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...

  8. python刷题第二周

    1: 第3章-5 字符转换 (15 分) 本题要求提取一个字符串中的所有数字字符('0'--'9'),将其转换为一个整数输出. 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串. ...

  9. python刷题第四周

    本周有所收获的题目: 第一题: 第4章-17 水仙花数(20 分) (20 分) 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身. 例如:153=1×1×1+5×5×5 ...

随机推荐

  1. centons 7 安装mysql

    1      CentOS 7 yum安装mysql 1.1    Yum 安装mysql CentOS用yum安装相对省事,省去很多配置环节 安装mysql 源 yum localinstall h ...

  2. Crossing River 题解(贪心)

    题目链接 题目大意 t组数据(t<=20) 给你n个人(n<=1000)过河,每个人都有权值,一条船,每次船最多运2个人,每次的花费为两个人的较大花费 求所有人都过河需要的最小花费 题目思 ...

  3. 多态,向上转型,向下转型,final关键字

    多态 概述   多态封装性,继承性之后,面向对象的第三大特性. 定义   多态:是指同一种行为,具有多个不同的表现形式.   生活中,比如跑的动作,猫,狗,大象跑起来的动作都是不一样的,再比如飞的动作 ...

  4. Spring beanDefinition载入

    @Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.st ...

  5. Beta——代码规范与计划

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 代码规范 此次代码规 ...

  6. 【常见踩坑】】USB调试安装失败(Installation failed with message INSTALL_CANCELED_BY_USER)

    [参考]http://www.cnblogs.com/liushilin/p/6553918.html 问题:在USB安装调试(小米手机),出现如下错误 解决:1.小米手机解决办法见参考.登录小米账号 ...

  7. pthread 互斥量

    参考文献: [1] https://computing.llnl.gov/tutorials/pthreads/ 温故知新 在 OS 中,每个进程都独立地拥有: Process ID, process ...

  8. Fiddler 4 对app接口抓取

    一.先打开模拟器 二.在Fiddler 4 选项中修改端口号和去掉一个勾选 三.在终端查看ip 输入ipconfig 四.点开模拟器的设置 五.点击WLAN 六.长按网络,修改网络 七.输入ip端口号 ...

  9. 如何自动化你的Excel导入导出(Java)?

    GitHub | 中文 | English | 博客 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发,就一定会遇到.相信很多人会跟我一样选择用Apache P ...

  10. 第2章 Python编程基础知识 第2.1节 简单的Python数据类型、变量赋值及输入输出

    第三节 简单的Python数据类型.变量赋值及输入输出 Python是一门解释性语言,它的执行依赖于Python提供的执行环境,前面一章介绍了Python环境安装.WINDOWS系列Python编辑和 ...