Python面试题一

基础部分

1.列出 5 个常用 Python 标准库?

os:提供了不少与操作系统相关联的函数

sys: 通常用于命令行参数

re: 正则匹配

math: 数学运算

datetime: 处理日期时间

2.Python 内建数据类型有哪些?

int、bool、 str、 list、 tuple、 dict

3.简述 with 方法打开处理文件帮我我们做了什么?

打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open

写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close

(当然还有其他自定义功能,有兴趣可以研究with方法源码)

4.列出 Python 中可变数据类型和不可变数据类型,为什么?

(1)可变类型(mutable):变量进行append、+=等这种操作后 == 改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

  • list
  • dict
  • set
  • bytearray
  • user-defined classes (除非是特别定义的不可变)

(2)不可变类型(immutable):改变了变量的值 == 新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址), python的id() 方法让你明白

  • int
  • float
  • decimal
  • complex
  • bool
  • string
  • tuple
  • range
  • frozenset
  • bytes

例子:

``` # -- coding: utf-8 --

# 不可变类型 a = 3 b = 3 print(id(a)) print(id(b))

# 可变类型 c = [1,2,3] d = [1,2,3] print(id(c)) print(id(d)) ```

5.Python 获取当前日期?

print(datetime.datetime.now())

6.统计字符串每个字符出现的次数

# -*- coding: utf-8 -*-

 

str = 'taodejintaodejinjjdsinad'

result = {}

for i in str:

    result[i] = str.count(i)

print(result)

7.用 python 删除文件和用 linux 命令删除文件方法

python:os.remove(文件名)

linux: rm 文件名

8.写一段自定义异常代码

# -*- coding: utf-8 -*-

 

# 自定义异常 需要继承Exception

class MyException(Exception):

    def __init__(self,*args):

        self.args = args

 

# 先定义异常基类,然后派生不同类型的异常

class loginError(MyException):

    def __init__(self,code =100, message = '登录异常',args = ('登录异常',)):

        self.args = args

        self.message = message

        self.code = code

 

 

class loginountError(MyException):

    def __init__(self):

        self.args = ('退出异常',)

        self.message = '退出异常'

        self.code = 200

 

 

try:

    raise loginountError()

except loginountError as e:

    print(e)

    print(e.code)

    print(e.message)

9.举例说明异常模块中 try except else finally 的相关意义

try..except..else没有捕获到异常,执行else语句

try..except..finally不管是否捕获到异常,都执行finally语句

 

10.遇到 bug 如何处理

百度,问人

语言特性

1.谈谈对 Python 和其他语言的区别

三个方面:

语言特点: 简洁优雅,省略了各种大括号和分号,还有一些关键字,类型说明

语言类型: 解释型语言,运行的时候是一行一行的解释并运行,所以调试代码很方便,开发效率高

第三方库: python是开源的,并且python的定位时任由其发展,应用领域很多比如Web,运维,自动化测试,爬虫,数据分析,人工智能.Python具有非常完备的第三方库

一句话概括:Python是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库的一门弱类型的可移植,可扩展,可嵌入的解释型编程语言

2.简述解释型和编译型编程语言

解释型:就是边解释边执行 编译性:编译后再执行

3.Python 的解释器种类以及相关特点?

CPython

由C语言开发的 使用最广的解释器,在命名行下运行python,就是启动CPython解释器.

IPython

基于cpython之上的一个交互式计时器 交互方式增强 功能和cpython一样

PyPy

目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率

JPython

运行在Java上的解释器 直接把python代码编译成Java字节码执行

IronPython

在微软 .NET 平台上的解释器,把python编译成. NET 的字节码

4.说说你知道的Python3 和 Python2 之间的区别?

  • print

py2:print语句,语句就意味着可以直接跟要打印的东西,如果后面接的是一个元组对象,直接打印

py3:print函数,函数就以为这必须要加上括号才能调用,如果接元组对象,可以接收多个位置参数,并可以打印

如果希望在 Python2 中 把 print 当函数使用,那么可以导入 future 模块 中的 print_function

下面有个示例:

# py2

>>> print("hello", "world")

('hello', 'world')

# py3

>>> print("hello", "world")

hello world

# py2

>>> print("hello", "world")

('hello', 'world')

>>> from __future__ import print_function

>>> print("hello", "world")

hello world

  • 输入函数

py2:input_raw()

py3:input()

  • 在使用super()的不同

py2:必须显示的在参数中写上基类

py:直接无参数调用即可

  • 1/2的结果

py2:返回0

py3:返回0.5,没有了int和long的区别

  • 编码

py2:默认编码ascii

py3:默认编码utf-8

而且为了在py2中使用中文,在头部引入coding声明,不推荐使用

  • 字符串

py2:unicode类型表示字符串序列,str类型表示字节序列

py3::str类型表示字符串序列,byte类型表示字节序列

  • True和False

py2:True 和 False 在 Python2 中是两个全局变量,可以为其赋值或者进行别的操作,初始数值分别为1和0,虽然修改是违背了python设计的原则,但是确实可以更改

py3:修正了这个变量,让True或False不可变

  • 迭代器

py2:当中许多返回列表的方法,如range,字典对象的 dict.keys()、dict.values() 方法, map、filter、zip;并且迭代器必须实现next方法

py3:将返回列表的方法改为了返回迭代器对象,内置了next,不用特意去实现next

  • nonlocal

py2:没有办法在嵌套函数中将变量声明为一个非局部变量,只能在函数中声明全局变量

py3:nonlocal方法实现了,示例如下:

def func():

 c = 1

    def foo():

        c = 12

    foo()

    print(c)

func()    #1

def func():

    c = 1

    def foo():

        nonlocal c

        c = 12

    foo()

    print(c)

func()   # 12

 

5.Python3 和 Python2 中 int 和 long 区别?

python2中有long类型 python3中没有long类型,只有int类型

 

6.xrange 和 range 的区别?

两种用法介绍如下: 1.range([start], stop[, step]) 返回等差数列。构建等差数列,起点是start,终点是stop,但不包含stop,公差是step。 start和step是可选项,没给出start时,从0开始;没给出step时,默认公差为1。 例如:

>>> range(10)                             #起点是0,终点是10,但是不包括10

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(1,10)                           #起点是1,终点是10,但是不包括10

[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(1,10,2)                         #起点是1,终点是10,步长为2

[1, 3, 5, 7, 9]

>>> range(0,-10,-1)                       #起点是1,终点是10,步长为-1

[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

>>> range(0,-10,1)                        #起点是0,终点是-10,终点为负数时,步长只能为负数,否则返回空

[]

>>> range(0)                              #起点是0,返回空列表

[]

>>> range(1,0)                            #起点大于终点,返回空列表

[]

2.xrange([start], stop[, step]) xrange与range类似,只是返回的是一个"xrange object"对象,而非数组list。 要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。 例如:

 

>>> lst = xrange(1,10)

>>> lst

xrange(1, 10)

>>> type(lst)

<type 'xrange'>

>>> list(lst)

[1, 2, 3, 4, 5, 6, 7, 8, 9]

 

区别如下: 1.range和xrange都是在循环中使用,输出结果一样。 2.range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。 3.xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,因而性能非常好。

 

编码规范

7.什么是 PEP8?

《Python Enhancement Proposal #8》又称之为Python 代码格式而编订的风格指南

8.了解 Python 之禅么?

Beautiful is better than ugly.

# 优美胜于丑陋(Python以编写优美的代码为目标)

 

Explicit is better than implicit.

# 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)

 

Simple is better than complex.

# 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)

 

Complex is better than complicated.

# 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)

 

Flat is better than nested.

# 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)

 

Sparse is better than dense.

# 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)

 

Readability counts.

# 可读性很重要(优美的代码是可读的)

 

Special cases aren't special enough to ``break` `the rules.

Although practicality beats purity.

# 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)

 

Errors should never pass silently.

Unless explicitly silenced.

# 不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写except:pass风格的代码)

 

In the face of ambiguity, refuse the temptation to guess.

# 当存在多种可能,不要尝试去猜测

 

There should be one-- ``and` `preferably only one --obvious way to ``do` `it.

# 而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法

 

Although that way may not be obvious at first unless you're Dutch.

# 虽然这并不容易,因为你不是 Python 之父(这里的Dutch是指Guido)

 

Now is better than never.

Although never is often better than *right* now.

# 做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)

 

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

# 如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)

 

Namespaces are one honking great idea -- let's ``do` `more of those!

# 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)

开交互界面 输入import this 回车就OK了。

9.了解 docstring 么?

DocStrings 文档字符串是一个重要工具,用于解释文档程序,其实就是对程序方法的一些说明信息。我们可以在函数体的第一行使用一对三个单引号"或者一对三个双引号""" 来定义文档字符串。

你可以使用函数名.__doc__

"(注意双下划线)调用函数中的文档字符串属性。DocStrings 文档字符串使用惯例:它的首行简述函数功能。

 

简单来说,就是出现在模块、函数、类、方法里第一个语句的,就是docstring。会自动变成属性doc

def foo():    

""" This is function foo"""

可通过foo.__doc__访问得到’ This is function foo’.

 

10.了解类型注解么?

类型注解介绍 我们知道 Python 是一种动态语言,变量以及函数的参数是不区分类型。 Python解释器会在运行的时候动态判断变量和参数的类型,这样的好处是编写代码速度很快,很灵活,但是坏处也很明显,不好维护,可能代码写过一段时间重新看就很难理解了,因为那些变量、参数、函数返回值的类型,全都给忘记了。 而且当你在读别人的代码的时候,也无法一眼看出变量或者参数的类型,经常要自己推敲,这样给学习带来了很大的障碍。 所以Python3里有了这个新特性,可以给参数、函数返回值和变量的类型加上注解,不过这个仅仅是注释而已,对代码的运行来说没有任何影响,变量的真正类型还是会有Python解释器来确定,你所做的只是在提高代码的可读性,仅此而已。

def add(x: int, y: int) -> int:

    return x + y

 

没用过类型注解(Type Annotations)的同学可能咋一看有点迷糊,其实上面这段代码和下面这个代码是一样的。

def add(x, y):

    return x + y

11.例举你知道 Python 对象的命名规范,例如方法或者类等

module_name, 模块

package_name, 包

ClassName, 类

method_name, 方法

ExceptionName, 异常

function_name, 函数

GLOBAL_VAR_NAME, 全局变量

instance_var_name, 实例

function_parameter_name, 参数

local_var_name. 本变量

12.Python 中的注释有几种?

1.python单行注释符号(#)

2.批量、多行注释符号。多行注释是用三引号''' '''包含的

3.对于函数还有文档注释

为函数添加文档注释,需要在函数头(包含def关键字的那一行)的下一行用一对单引号或双引号将注释括起来。

13.如何优雅的给一个函数加注释?

见12文档注释

def add (x,y):

    "计算两个数的和"

    return x + y

 

print(add.__doc__)

#输出结果:计算两个数的和

14.如何给变量加注释?

变量的声明同一行加上#的注释

15.Python 代码缩进中是否支持 Tab 键和空格混用。

在Python中,官方推荐使用4个空格作为缩进,而不是使用Tab键。不过,实际上你可以在你的代码中混用Tab和空格,但这可能会导致一些混乱,尤其是在跨不同编辑器或者查看代码时。

如果你想确保你的代码中只使用空格作为缩进,你可以在你的编辑器中设置将Tab自动转换为相应数量的空格。大多数现代编辑器和IDE都支持这种设置。

以下是一个Python代码示例,它混用了Tab和空格作为缩进:

def hello_world():

print("Hello")  # 使用了Tab作为缩进

print("World")  # 使用了4个空格作为缩进

尽管这样的代码是可以运行的,但最好还是遵循一种缩进风格,并在你的编辑器或IDE中设置对应的规则。

16.是否可以在一句 import 中导入多个库?

支持,但是不推荐。

因为一次导入多个模块可读性不是很好,所以一行导入一个模块会比较好。同样的尽量少用 from modulename import *,因为判断某个函数或者属性的来源有些困难,不方便调试,可读性也降低了。

17.在给 Py 文件命名的时候需要注意什么?

1.模块名和包名采用小写字母并且以下划线分隔单词的形式; 如:regex_syntax,py_compile,_winreg

2.类名或异常名采用每个单词首字母大写的方式; 如:BaseServer,ForkingMixIn,KeyboardInterrupt

3.全局或者类常量,全部使用大写字母,并且以下划线分隔单词; 如:MAX_LOAD

4.其余变量命名包括方法名,函数名,普通变量名则是采用全部小写字母,并且以下划线分隔单词的形式命名。 如:my_thread

5.以上的内容如果是内部的,则使用下划线开头命名。 如:init,new

18.例举几个规范 Python 代码风格的工具

PyCharm,vscode

数据类型

19.列举 Python 中的基本数据类型?

Python 语言中包含以下几种基本数据类型:

  1. int (整数):可以是正数、零或负数。例如,1, -1, 0。
  2. float (浮点数):浮点数是一个数字,包含一个小数点。例如,1.23, -0.12。
  3. bool (布尔):布尔数据类型通常用于比较和逻辑运算,只有两个值:True 或 False。
  4. str (字符串):字符串是字符的序列,可以是引号内的任何文本。例如,'Hello', "World"。
  5. list (列表):列表是一个顺序存储多个值的集合,可以修改。例如,[1, 2, 3]。
  6. tuple (元组):元组与列表类似,但是不可变。例如,(1, 2, 3)。
  7. dict (字典):字典是一个无序的键-值对集合。例如,{'name': 'Alice', 'age': 25}。

20.如何区别可变数据类型和不可变数据类型

可变数据类型:在id不变的情况下,value可改变(列表和字典是可变类型,但是字典中的key值必须是不可变类型)

不可变数据类型:value改变,id也跟着改变。(数字,字符串,布尔类型,都是不可类型)

21.将"hello world"转换为首字母大写"Hello World"

str = 'hello,world'

a = str.title()

print(a)

22.如何检测字符串中只含有数字?

a = '12121212'.isdigit()

print(a)

b = 'dsa1212121'.isdigit()

print(b)

23.将字符串"ilovechina"进行反转

s1 ='ilovechina'[: :-1]

print(s1)

24.Python 中的字符串格式化方式你知道哪些?

1、最传统的用%格式化字符串

“Hello, %s. You are %s.” % (name, age)

2、string.format ()

“Hello,{}. You are {}”.format(name,age)

3、f-string python3.6诞生的新方法

该方法叫做“F字符串方法”,又称为“格式化字符串文字”。F字符串是开头有一个f的字符串文字,以及包含表达式的大括号将被其值替换。表达式在运行时进行渲染,然后使用format协议进行格式化。

f’his name is {name}’

25.有一个字符串开头和末尾都有空格,比如“ adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。

a = ' asdf '

b = a.replace(' ','')

print(a)

print(b)

26.获取字符串”123456“最后的两个字符。

#获取字符串最后两个字符

def getLastTwo(s):

    return s[-2:]

27.一个编码为 GBK 的字符串 ,要将其转成 UTF-8 编码的字符串,应如何操作?

str.encode("GBK") str.encode("UTF-8")

 

 

(1)、s="info:xiaoZhang 33 shandong",用正则切分字符串输出['info', 'xiaoZhang', '33', 'shandong']
```
-- coding: utf-8 --
import re

s="info:xiaoZhang 33 shandong"
def reStr1(s): return re.split(r'[\s\:\:]+', s)
print(reStr1(s)) ```

(2)、a = "你好 中国 ",去除多余空格只留一个空格。

(3)、怎样将字符串转换为小写

s2.upper()

29.单引号、双引号、三引号的区别?

(1)单引号和双引号平时使用时候,是没有太多区别的。但是在定义字符串时候,可以单双引号混用来避免转义问题。

(2)三引号作用:

-可以作为格式化输出

-可以作为多行注释

列表

30.已知 AList = [1,2,3,1,2],对 AList 列表元素去重,写出具体过程。

list(set(list)) --先将列表转化为set,再转化为list就可以实现去重操作

31.如何实现 "1,2,3" 变成 ["1","2","3"]

str = "1,2,3"

print(str.split(","))

32.给定两个 list,A 和 B,找出相同元素和不同元素

利用集合:

A=[1,2,3,4,5,6,7,8,9]

B=[1,3,5,7,9]

print('A、B中相同元素:')

print(set(A)&set(B))

print('A、B中不同元素:')

print(set(A)^set(B))

33.[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]

l1 = [[1,2],[3,4],[5,6]] l = [j for t in l1 for j in t]

34.合并列表[1,5,7,9]和[2,2,6,8]

a1 = [1,5,7,9]

a2 = [2,2,6,8]

print(a1+a2)

35.如何打乱一个列表的元素?

import random

l = [1,2,3,4,5,6]

random.shuffle(l)

print(l)

字典

36.字典操作中 del 和 pop 有什么区别?

del 可以删除指定key的键值对,并且没有返回。用法:del dict[key]; 也可以使用del来清空整个字典 pop是从字典中取走指定key的键值对,并且返回键值。是字典的一个方法。用法:dict.pop(key)

37.按照字典的内的数值排序

dict1={'a':2,'e':3,'f':8,'d':4}

# 正向排序

dict2 = sorted(dict1)

# 反向排序

dict3 = sorted(dict1,reverse=True)

print(dict2)

print(dict3)

38.请合并下面两个字典 a = {"A":1,"B":2},b = {"C":3,"D":4}

def dictMerge1():

    a = {"A":1,"B":2}

    b = {"C":3,"D":4}

    a.update(b)

    print(a)

dictMerge1()

39.如何使用生成式的方式生成一个字典,写一段功能代码。

list4 = [('name','zhangsan'),('age',22),('phone',110)]

# for 循环遍历列表,将列表中小元组的key和value取出,作为字典中的key:value

dict_1 = {key:value for key,value in list4}

print (dict_1)

40.如何把元组("a","b")和元组(1,2),变为字典{"a":1,"b":2}

a = ("a","b")

b = (1,2)

z = zip(a,b)

print(dict(z))

41.Python 常用的数据结构的类型及其特性?

一、基础数据类型

  标准数据类型:

    ·不可变数据类型

      Number(数字):int、float、bool、complex(复数)

      String(字符串)

      Tuple(元祖):不可变,无法通过下标来修改值

    ·可变数据类型

      List(列表):[ ]

      Set(集合):{ }

      Dictionary(字典):{ key:value}

  可变数据类型:当值改变时,id编号不变化【可以使用id()函数来查看】

  不可变数据类型:当值改变时,会产生新的id编号

二、基本数据结构(列表、集合、字典、元祖):

  · 列表(list):

    特点:是一个可变集合,不仅结构可变,里面还可以放不同类型的对象:num = [1,2,3,‘123’,True,321]

     常规操作:

      ·获取元素:可以通过下标获取:num[0],输出:1

            可以通过切片获取:num[3:5],输出:'123',321

      ·添加元素:

        num.append(3):在列表后方添加元素

        num.insert(index,value):插入到列表的指定位置
        num + [1,2,3] 或 num.extend([1,2,3]):连接两个列表

  ·元祖(tuple)

    特点:不可变

    常规操作:

      ·可以通过下标取值,但无法修改

      ·可以通过 index(value1,value2) 来获取制定元素在元祖中出现的位置

      ·可以通过count(value) 来统计指定元素在元祖中出现的个数

  ·集合({ })

    特点:集合是一个无序不重复元素的集

    常规操作:

      推导式:

 

42.如何交换字典 {"A":1,"B":2}的键和值?

mydict={"a":1,"b":2,"c":3}

mydict_new={}

for key,val in mydict.items():

    mydict_new[val]=key

print(mydict_new)

43.Python 里面如何实现 tuple 和 list 的转换?

list(tup) tuple(list)

44.我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?

这个题目考察了 Python 标准库的itertools模快的掌握情况,该模块提供了操作生成器的一些方法。 对于生成器类型我们使用islice方法来实现切片的功能。例子如下

from itertools import islice

gen = iter(range(10)) #iter()函数用来生成迭代器

#第一个参数是迭代器,第二个参数起始索引,第三个参数结束索引,不支持负数索引

for i in islice(gen,0,4):

    print(i)

45.请将[i for i in range(3)]改成生成器

直接将中括号改成小括号就行了

(i for i in range(3))

46.a="hello"和 b="你好"编码成 bytes 类型

a="hello"

c=a.encode(encoding='utf-8')

a = b'hello'

 

b="世界"

b = b.encode(encoding='utf-8')

 

print(a,b,c)

47.下面的代码输出结果是什么?

 

 

48.下面的代码输出的结果是什么?

a = (1,2,3,[4,5,6,7],8)

# a[2] = 2

a[3][0] = 2

print(a)

(1, 2, 3, [2, 5, 6, 7], 8)

49.Python 交换两个变量的值

a,b =b,a

50.在读文件操作的时候会使用 read、readline 或者 readlines,简述它们各自的作用

1)read([size])方法从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止,输出的结果是字符串对象

2)readline():每次读出一行内容,所以,读取时占用内存小,比较适合大文件,输出的结果也是一个字符串对象。

3)readlines():读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存。

总结:read和readline返回的是字符串,而readlines返回的是列表,其中每行是作为列表的一个元素。

51.json 序列化时,可以处理的数据类型有哪些?如何定制支持 datetime?

1、可以处理的数据类型是 string、int、list、tuple、dict、bool、null

2、自定义时间序列化转换器

import json

from json import JSONEncoder

from datetime import datetime

class ComplexEncoder(JSONEncoder):

    def default(self, obj):

        if isinstance(obj, datetime):

            return obj.strftime('%Y-%m-%d %H:%M:%S')

        else:

            return super(ComplexEncoder,self).default(obj)

d = { 'name':'alex','data':datetime.now()}

print(json.dumps(d,cls=ComplexEncoder))

# {"name": "alex", "data": "2018-05-18 19:52:05"}

52.json 序列化时,默认遇到中文会转换成 unicode,如果想要保留中文怎么办?

import json

a = json.dumps({"ddf":"你好"},ensure_ascii=False)

b = json.dumps({"ddf":"你好"})

print(a) #{"ddf": "你好"}

print(b)

53.有两个磁盘文件 A 和 B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件 C 中。

# -*- coding: utf-8 -*-

 

with open("F:/Scrapy_test/test/A") as A:

    content_a = A.read() #用read结果可以对A、B中的字母都排序好,如果用readlines()就只会把A、B整个文件的字母排序

 

with open("F://Scrapy_test//test//B") as B:

    content_b = B.read()

 

s = ''.join(sorted(content_a+content_b))

C = open("F://Scrapy_test//test//C",'w+')

result = C.write(s)

A.close()

B.close()

C.close()

 

54.如果当前的日期为 20190530,要求写一个函数输出 N 天后的日期,(比如 N 为 2,则输出 20190601)。

def toDate(n):

    if type(n) is not int:

        return;

    from datetime import date

    from datetime import timedelta

    date2 = date.today() + timedelta(days=n)

    print(date2.strftime("%Y%m%d"))

 

toDate(2)

toDate(29)

55.写一个函数,接收整数参数 n,返回一个函数,函数的功能是把函数的参数和 n 相乘并把结果返回。

def lazy_mul(n):

    def mul(m):

        return m*n

    return mul

56.下面代码会存在什么问题,如何改进?

 

无法编译通过。 将函数内的str变量换为其他名称即可

 

57.一行代码输出 1-100 之间的所有偶数。

print(list(even for even in range(100) if (even%2 == 0 )))

58.with 语句的作用,写一段代码?

with open(r'c:\test.txt', 'r') as f:

     data = f.read()

59.python 字典和 json 字符串相互转化方法

在Python中自带json库。通过import json导入。 在json模块有2个方法, loads():将json数据转化成dict数据 dumps():将dict数据转化成json数据 load():读取json文件数据,转成dict数据 dump():将dict数据转化成json数据后写入json文件

60.请写一个 Python 逻辑,计算一个文件中的大写字母数量

import os

os.chdir(r'F://Scrapy_test//test') #os.chdir切换到指定目录

with open('B') as today:

    count=0

    for i in today.read():

        if i.isupper():

            count+=1

print(count)

 

posted @   业余砖家  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
历史上的今天:
2024-02-18 Windows如何在一台电脑访问其他电脑里的虚拟机
点击右上角即可分享
微信分享提示