悠悠_python_interview

前言

收集了100多道 Python 基础练习题,面试题,笔试题,练完这些题 Python 内功大增!适合python初学者和基础不牢的同学练手。
想刷面试题的也可以多看看,答案在网易云平台课程上https://study.163.com/course/courseMain.htm?courseId=1211387804&share=2&shareId=480000002230338

目录

第1章 字符串练习题

1.1交换

已知 a的值为"hello",b的值为"world",如何交换a和b的值?
得到a的值为"world",b的值为"hello"

1.2回文

回文的定义:"回文" 就是正读倒读都一样的。
如奇数个:"98789",这个数字正读是"98789" 倒读也是"98789"。
偶数个数字"3223"也是回文数。
字母 "abcba" 也是回文。
判断一个字符串是否是回文字符串,是打印True, 不是打印False

重点 [::-1]   反向

1.3字符串切割

已知一个字符串为 "hello_world_yoyo", 如何得到一个队列 ["hello","world","yoyo"]   

.split('_')

1.4拼接字符串

有个列表 ["hello", "world", "yoyo"]如何把把列表里面的字符串联起来,
得到字符串 "hello_world_yoyo"

"".join(list)

1.5替换字符

把字符串 s 中的每个空格替换成"%20"
输入:s = "We are happy."
输出:"We%20are%20happy."

replace(' ','%')

1.6九九乘法表

打印99乘法表

1.7字符下标

找出单词 "welcome" 在 字符串"Hello, welcome to my world." 中出现的位置,找不到返回-1
从下标0开始索引

"".find('welecome')

"".index("welecome") 找不到则报错

1.8 统计字符出现的次数

统计字符串“Hello, welcome to my world.” 中字母w出现的次数
统计单词 my 出现的次数

.count("my")

1.9 统计每个字符出现的次数

题目:输入一个字符串str, 输出第m个只出现过n次的字符,如在字符串 gbgkkdehh 中,
找出第2个只出现1 次的字符,输出结果:d

from collections import Counter
def mn(m,n):

    q1='gbgkkdehh1'
    a = Counter(q1)
    print(a)
    b = dict(a)
    print(b)
    s = []
    for k,j in b.items():
        if j==n:
            s.append(k)
    c = s[m-1]
   print(s)
return c 15 if __name__ == '__main__': 16 print(mn(2,1))

1.10 判断字符a含b

判断字符串a="welcome to my world" 是否包含单词 b="world"
包含返回True,不包含返回 False

1.11 查找字符首次出现位置

输出指定字符串A在字符串B中第一次出现的位置,如果B中不包含A,则输出-1
从 0 开始计数
A = "hello"
B = "hi how are you hello world, hello yoyo !"

B.find(A)

1.12 查找字符串最后一次出现位置

输出指定字符串A在字符串B中最后出现的位置,如果B中不包含A,则输出-1
从 0 开始计数
A = "hello"
B = "hi how are you hello world, hello yoyo !"

B.rfind(A)

1.13判断奇数偶数

给定一个数a,判断一个数字是否为奇数或偶数
a1 = 13
a2 = 10

% 取余数

/取所有

//取整数

可以用两个return

1.14判断一个姓名是否姓王

输入一个姓名,判断是否姓王
a = "王五"
b = "老王"

.

print("姓王" if a[:1]=="王" else "不姓王")

1.15判断是不是数字

如何判断一个字符串是不是纯数字组成
a = "123456"
b = "yoyo123"

print( "sdf".isalnum() )  # 纯字母
print( "sdf".isdigit() )  # 纯数字

1.16字符串大小写转换

将字符串 a = "This is string example....wow!" 全部转成大写
字符串 b = "Welcome To My World" 全部转成小写

1.17字符串去掉首尾空格

将字符串 a = " welcome to my world "首尾空格去掉

1.18字符串去掉左边指定空格或字符

将字符串a = " welcome to my world !"左边的空格去掉

1.19字符串去掉右边指定空格或字符

将字符串a = " welcome to my world ! "右边的空格去掉

1.20 去除字符串里面所有的空格

将字符串a = " welcome to my world ! "里面的所有空格都去掉

" welcome to my world ! ".replace( " ", "" )

1.21字符串去重后排序

s = "ajldjlajfdljfddd",去重并从小到大排序输出  "adfjl"

print(dict.fromkeys(s))
print(sorted(dict.fromkeys(s)))
print("".join(sorted(dict.fromkeys(s))))
{'a': None, 'j': None, 'l': None, 'd': None, 'f': None}
['a', 'd', 'f', 'j', 'l']
adfjl

1.22字符串去重保留顺序

s = "ajldjlajfdljfddd",去重保留原来的顺序,输出"adfjl"

print("".join([x for x in dict.fromkeys(s)]))

1.23画菱形

题目 打印出如下图案(菱形):

#myself
import  copy
quare = list( 2 * i - 1 for i in range( 1, 7 ) )
quare_sec=copy.deepcopy(quare)
quare_sec.reverse()
quare_sec=quare_sec[1:]
print(quare)
for j in quare:
    print( (j * "*").center( quare[-1], " " ) )
for m in quare_sec:
    print( (m * "*").center( quare[-1], " " ) )
其他人的
line = 7
lines = (line+1) // 2
print(lines)

stars = [x*2+1 for x in range(lines)] + [x*2-1 for x in range(lines-1,0,-1)]
# print(a)
for star in stars:
kong = (line - star) // 2
print(" "*kong + "*" * star)

1.24 输入一个正整数,判断是几位数

题目 给一个不多于5位的正整数,要求:
一、求它是几位数,
二、逆序打印出各位数字。
a = 12345

a = 12345
a = str( a )
print( len( a ) )
print( a[::-1] )

第2章 小学数学题

2.1.水仙花数

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。
例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数
那么问题来了,求1000以内的水仙花数(3位数)

for i in range( 100, 1000 ):
    m = str( i )
    one = m[0]
    two = m[1]
    three = m[2]
    if i == int( one ) ** 3 + int( two ) ** 3 + int( three ) ** 3:
        print( i )
# ----------
# anothre
import math

for i in range( 100, 1000 ):
    m = str( i )
    sum = 0
    for j in m:
        sum += math.pow( int( j ), 3 )
    if i == sum:
        print( i )

2.2完全数

如果一个正整数等于除它本身之外其他所有除数之和,就称之为完全数。
例如:6是完全数,因为6 = 1+2+3;
下一个完全数是28 = 14+7+4+2+1。
求1000以下的完全数

empty_lis = []
for i in range( 1, 1001 ):
    sum = 0
    for j in range( 1, i ):
        if i % j == 0:
            sum += j
    if sum == i:
        empty_lis.append( sum )
print(empty_lis)

2.3 数字1-100求和

求1+2+3…+100和

print( sum( [x for x in range( 101 )] ) )

2.4计算求1-2+3-4+5-…-100的值

计算求1-2+3-4+5-…-100的值

m = sum( x for x in range( 101 ) if x % 2 == 1 ) - sum( y for y in range( 101 ) if y % 2 == 0 )

2.5计算求1+2-3+4-5... ...100 的值

计算求1+2-3+4-5... ...100 的值

2.6计算 1-n 之间的所有 5 的倍数之和

定义一个函数:计算 1-n 之间的所有 5 的倍数之和,默认计算 1-100 ( n 是 一个整数)

# def fun(n=101):
#     result_sum = 0
#     empty_lis=[]
#     for i in range( 1,n ):
#         if i % 5 == 0:
#             result_sum += i
#             empty_lis.append(i)
#     print(empty_lis)
#     print(result_sum)
# fun()
result = sum( x for x in range( 1,101 ) if x % 5 == 0 )
print(result)

2.7 n个自然数的立方和

计算公式 13 + 23 + 33 + 43 + …….+ n3
实现要求:
输入 : n = 5
输出 : 225
对应的公式 : 13 + 23 + 33 + 43 + 53 = 225

def func(n):
    result_sum = 0
    for i in range( 1, n + 1 ):
        result_sum += math.pow( i, 3 )
    print( result_sum )
func(3)

2.8 阶乘10!

阶乘的意思: 10!=10x9x8x7x6x5x4x3x2x1
求10!

# result_sum=1
# for i in range(1,11):
#     result_sum *= i
# print(result_sum)
# 递归计算
# def func(n):
#     if n == 1:
#         return 1
#     return  n * func( n - 1 )

2.9求1+2!+3!+...+10!的和

求1+2!+3!+...+10!的和

for j in range( 1, 11 ):
    last_resut = 0
    result_sum = 1
    for i in range( 1, j ):
        result_sum *= j
    last_resut += result_sum
    print( last_resut )

2.10求s=a+aa+aaa+aaaa+aa...a的值

求s=a+aa+aaa+aaaa+aa...a的值

如:n = 5  a = 3
33333 = 3x10**4+ 3x10**3+ 3x10**2 + 3x10**1 +3x10**0

2.11 斐波那契数列1、1、2、3、5、8、13 .....

已知一个数列:1、1、2、3、5、8、13、。。。。的规律为从 3 开始的每一项都等于其前两项的和,这是斐波那契数列。
求满足规律的 100 以内的所有数据

第3章 列表练习题

3.1 反转(判断对称)

如何判断一个数组是对称数组:
要求:判断数组元素是否对称。例如[1,2,0,2,1],[1,2,3,3,2,1]这样的都是对称数组
用Python代码判断,是对称数组打印True,不是打印False,如:
x = [1, "a", 0, "2", 0, "a", 1]

3.2列表切片

如果有一个列表a=[1,3,5,7,11]
问题:1如何让它反转成[11,7,5,3,1]
2.取到奇数位值的数字,如[1,5,11]

3.3列表大小排序

问题:对列表a 中的数字从小到大排序
a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 7, 8]

3.4 取出最大值最小值

L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
找出列表中最大值和最小值

3.5 找出列表中单词最长的一个

a = ["hello", "world", "yoyo", "congratulations"]
找出列表中单词最长的一个

3.6 切片取出列表中最大的三个数

取出列表中最大的三个值
L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]

3.7列表按绝对值排序

a = [1, -6, 2, -5, 9, 4, 20, -3] 按列表中的数字绝对值从小到大排序

3.8按字符串长度排序

b = ["hello", "helloworld", "he", "hao", "good"]
按list里面单词长度倒叙

3.9去重与排序

L1 = [1, 2, 3, 11, 2, 5, 3, 2, 5, 33, 88]
如何用一行代码得出[1, 2, 3, 5, 11, 33, 88]
L2 = [1, 2, 3, 4, 5] ,L[10:]结果是多少(报错?还是None,还是[])

3.10 去重保留顺序

将列表中的重复值取出(仅保留第一个),要求保留原始列表顺序
如a=[3, 2, 1, 4, 2, 6, 1] 输出[3, 2, 1, 4, 6]

3.11 列表合并

a = [1, 3, 5, 7]
b = ['a', 'b', 'c', 'd']
如何得到[1, 3, 5, 7, 'a', 'b', 'c', 'd']

3.12 生成列表(列表推导式)

用一行代码生成一个包含 1-10 之间所有偶数的列表

3.13 列表成员的平方

列表a = [1,2,3,4,5], 计算列表成员的平方数,得到[1,4,9,16,25]

3.14 找出列表大于0的数

使用列表推导式,将列表中a = [1, 3, -3, 4, -2, 8, -7, 6]
找出大于0的数,重新生成一个新的列表

3.15统计列表有多少大于0

统计在一个队列中的数字,有多少个正数,多少个负数,如[1, 3, 5, 7, 0, -1, -9, -4, -5, 8]

3.16列表排除筛选

a = ["张三","张四","张五","王二"] 如何删除姓张的

3.17列表过滤(filter)

题1:有个列表a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8] 使用filter 函数过滤出大于0的数
题2:列表b = ["张三", "张四", "张五", "王二"] 过滤掉姓张的姓名

3.18过滤列表中不及格学生(filter)

过滤掉列表中不及格的学生
a = [
{"name": "张三", "score": 66},
{"name": "李四", "score": 88},
{"name": "王五", "score": 90},
{"name": "陈六", "score": 56},
]

3.19找出列表中最大数出现的位置

有个列表 a = [1, 2, 3, 11, 2, 5, 88, 3, 2, 5, 33]
找出列表中最大的数,出现的位置,下标从0开始

3.20找出列表中出现次数最多的元素

a = [
'my', 'skills', 'are', 'poor', 'I', 'am', 'poor', 'I',
'need', 'skills', 'more', 'my', 'ability', 'are',
'so', 'poor'
]
找出列表中出现次数最多的元素

3.21分别统计列表中每个成员出现的次数

a = [
'my', 'skills', 'are', 'poor', 'I', 'am', 'poor', 'I',
'need', 'skills', 'more', 'my', 'ability', 'are',
'so', 'poor'
]

3.22 列表查找元素位置

给定一个整数数组A及它的大小n,同时给定要查找的元素val,
请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。
若该元素出现多次请返回第一个找到的位置
如 A1=[1, "aa", 2, "bb", "val", 33]
或 A2 = [1, "aa", 2, "bb"]

3.23列表查找两数之和

给定一个整数数组nums 和一个目标值target ,请你在该数组中找出和为目标值的那两个整数,并返回他
们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定nums=[2,7,11,15],target=9
因为nums[0] + nums[1] =2+7 = 9
所以返回[0, 1]

3.24二维数组取值(矩阵)

有 a = [["A", 1], ["B", 2]] ,如何取出 2

3.25 二维数组拼接

a = [[1,2],[3,4],[5,6]] 如何一句代码得到 [1, 2, 3, 4, 5, 6]

3.26 列表转字符串

L = [1, 2, 3, 5, 6],如何得出 '12356'?

3.27 两个列表如何得到字典

a = ["a", "b", "c"]
b = [1, 2, 3]
如何得到 {'a': 1, 'b': 2, 'c': 3}

3.28列表按age从小到大排序

如下列表
people = [
{"name":"yoyo", "age": 20},
{"name":"admin", "age": 28},
{"name":"zhangsan", "age": 25},
]
按年龄age从小到大排序

3.29列表插入元素

现有 nums=[2, 5, 7] ,如何在该数据最后插入一个数字 9 ,如何在2后面插入数字0

3.30打乱列表顺序随机输出

有个列表a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
如何打乱列表a的顺序,每次得到一个无序列表

第4 章 元祖字典集合

4.1 输出1-100除3余1 的数,结果为tuple

输出1-100除3余1 的数,结果为tuple

4.2 把2个元祖转字典

将('a', 'b', 'c', 'd', 'e') 和 (1,2, 3, 4, 5)两个tuple转成
(1, 2, 3, 4, 5)为key, ('a', 'b', 'c', 'd', 'e') 为value的字典

4.3 把字典的value值转成str

将字典里的值是数值型的转换为字符串,如a = {'aa': 11, 'bb': 222}
得到{'aa': '11', 'bb': '222'}

4.4 (1)和(1,)区别,[1]和[1,]

a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 c = [(1,),(2,),(3,) ] 的区别?

4.5 map函数将[1,2,3,4]处理成[1,0,1,0]

map函数,有个列表a = [1, 2, 3, 4] 计算列表中每个数除以2 取出余数 得到 [1,0,1,0]

4.6 map函数将列表[1,2,3,4,5]转变成[1,4,9,16,25]

map函数将列表 [1,2,3,4,5] 使用python方法转变成 [1,4,9,16,25]

4.7 map函数a=[1,3,5],b=[2,4,6]相乘得到[2,12,30]

map函数对列表a=[1,3,5],b=[2,4,6]相乘得到[2,12,30]

4.8 reduce函数计算1-100的和

reduce函数计算1-100的和

4.9 reduce函数计算10!

reduce函数计算1!+2!+3!+。。。+10!

4.10 两个字典合并a={"A":1,"B":2},b={"C":3,"D":4}

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

4.11 {'a':1,'b':2,'c':1} 得到 {1:['a','c'],2:['b']}

m1={'a':1,'b':2,'c':1} # 将同样的value的key集合在list里,输出{1:['a','c'],2:['b']}

4.12 字典按key排序d={"name":"zs","age":18,"}

d={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
字典根据键从小到大排序

4.13 集合(交集、差集、并集)

a = [2, 3, 8, 4, 9, 5, 6]
b = [2, 5, 6, 10, 17, 11]
1.找出a和b中都包含了的元素
2.a或b中包含的所有元素
3.a中包含而集合b中不包含的元素

第5章 综合练习题(上机考试)

5.1 有1、2、3、4组成无重复数的三位数(排列组合)

有1、2、3、4数字能组成多少互不相同无重复数的三位数?
分别打印这些三位数的组合

5.2 冒泡排序

a = [11, 2, 33, 1, 5, 88, 3]

冒泡排序:
依次比较两个相邻的元素,如果顺序(如从小到大、首字母从A到Z)
错误就把他们交换过来

5.3文本中每行中长度超过3的单词

在以下文本中找出 每行中长度超过3的单词:
Call me Ishmael. Some years ago - never mind how long precisely - having
little or no money in my purse, and nothing particular to interest me
on shore, I thought I would sail about a little and see the watery part
of the world. It is a way I have of driving off the spleen, and regulating
the circulation. - Moby Dick

python的预期结果(尽量不超过3行搞定):
[['Call', 'Ishmael.', 'Some', 'years', 'never', 'mind', 'long', 'precisely', 'having'],
['little', 'money', 'purse,', 'nothing', 'particular', 'interest'],
['shore,', 'thought', 'would', 'sail', 'about', 'little', 'watery', 'part'],
['world.', 'have', 'driving', 'spleen,', 'regulating'],
['circulation.', 'Moby', 'Dick']]]

5.4 列表数据写入txt(open读写)

有一个数据list of dict如下
a = [
{"yoyo1": "123456"},
{"yoyo2": "123456"},
{"yoyo3": "123456"},
]
写入到本地一个txt文件,内容格式如下:
yoyo1,123456
yoyo2,123456
yoyo3,123456

5.5 判断邮箱程序(正则)

写一个小程序:控制台输入邮箱地址(格式为 username@companyname.com), 程序识别用户名和公司名后,将用户名和公司名输出到控制台。
要求:

  1. 校验输入内容是否符合规范(xx@yy.com), 如是进入下一步,如否则抛出提 示"incorrect email format"。注意必须以.com 结尾
  2. 可以循环“输入--输出判断结果”这整个过程
  3. 按字母 Q(不区分大小写)退出循环,结束程序

5.6判断一个字符串的括号自否闭合(栈)

判断一个字符串的括号自否闭合(包括大小中括号)
左括号和右括号必须是一一对应

比如:{[{()}]()}  就是一个闭合的字符串
{[{()}]([)]} 这个里面 ([)] 这种就是不闭合

5.7 计算纯数字子串组成的单一数字(子串)

有一个纯数字组成的字符串, 返回连续单一数字子串的个数
输入字符串: “22252”
只含单一数字的子串是
1个字符:2出现4次,5出现1次
2个字符 22 出现2 次
3个字符 222 出现1 次
4个子串 0次
5个字符 0次
总共 4+1+2+1 =8
输出结果:8

示例:
输入:22252
输出: 8

5.8 移除字符串里面的'ab'

有一个字符串列表['aababbc', 'badabcab'] 将字符串中的'ab' 移除
比如'aababbc' 移除里面的ab后得到abc 需继续移除ab,得到c,直到字符串中不会出现连续的ab

5.9看代码得结果(join用法)

x="abc",y="def",z=["d","e","f"],
分别求出x.join(y) 和x.join(z)返回的结果

5.10 看代码得结果(类和继承)

阅读以下代码,打印结果是什么?

class A(object):

    def __init__(self):
        self.__Gender()
        self.Name()

    def __Gender(self):
        print("A.__Gender()")

    def Name(self):
        print("A.Name()")

class B(A):

    def __Gender(self):
        print("B.__Gender()")

    def Name(self):
        print("B.Name()")
b = B()

5.11 看代码得结果(闭包)

阅读以下代码,得到的结果是什么

def fun():
    temp = [lambda x: i*x for i in range(4)]
    return temp

for everyLambda in fun():
    print(everyLambda(2))

5.12看代码得结果(列表推导式)

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))

A1 = range(10)
A2 = [i for i in A1 if i in A0]
A3 = [A0[s] for s in A0]
A4 = [i for i in A1 if i in A3]
A5 = {i:i*i for i in A1}
A6 = [[i,i*i] for i in A1]

5.13 看代码得结果(函数)

阅读以下代码,得到什么结果

def f(x,l=[]):
    for i in range(x):
        l.append(i*i)
    print l
 
f(2)
f(3,[3,2,1])
f(3)

5.14 看代码得结果(深拷贝和浅拷贝)

写出以下程序的输出结果

from copy import deepcopy, copy

li = [1, 2, [3, 4]]
li_sliced = li[:]
li_copied = copy(li)
li_deep_copied = deepcopy(li)

li[0] = 888
li[2][0] = 666
print(li_sliced, li_copied, li_deep_copied)

5.15 map reduce filter的使用

分别使用map reduce filter 函数完成下面的任务

1.计算 1- 100 的和
2.1-10,对每个数字的平方
3. ["a", "ab", "abc", "bc", "cd"] 输出含有c字符的元素,返回值是list

5.16 通过切片操作完成以下任务(切片)

有个字符串为"abcdefg.exe" 通过切片完成下面的任务
1.输出前3个字符
2.输出后2个字符
3.倒叙输出
4.间隔1个字符串输出

5.17 根据列表数字出现次数排序去重(排序)

a=[1,2,1,2,2,2,3,4,5,6,56,7,1,3,4]
按列表中数字出现的次数,从高到低排序,并去除重复的
比如2出现了4次,排第一个位置。1出现了3次,于是可以得到:[2, 1, 3, 4, 5, 6, 7, 56]

5.18 补缺失的代码-给个路径查找文件(递归)

def print_directory_contents(sPath):
"""
这个函数接受文件夹的名称作为输入参数,
返回该文件夹中文件的路径,
以及其包含文件夹中文件的路径。
"""

5.19 如何判断一个字符串有没有重复字符

判断一个字符串是否包含重复字符。例如:“hello”就包含重复字符‘l’,而“world”就不包含重复字符, 有重复打印True, 没重复打印False

5.20 找出一个字符串中子串不含有重复字符的最长子串(子串)

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例1:
输入:" abcabcbb" 输出: 3
解释:因为无重复字符的最长子串是"abc", 所以其长度为3。
示例2:
输入: "bbbbb"" 输出: 1
解释:因为无重复字符的最长子串是"b", 所以其长度为1。
示例3:
输入: " pwwkew" 输出: 3
解释:因为无重复字符的最长子串是"wke"', 所以其长度为3。
请注意,你的答案必须是子串的长度,"pwke"是一个子序列,不是子串。

5.21 一个字符串中所有子串是回文的次数(子串)

回文是指正序(从左向右)和倒序(从右向左)读都是一样的。
例如:121 ,abcdedcba,123321等都是回文
这种的字符串“ABCABADCSABBAUYIIYU”找出回文出现的次数
子串回文是:'BB', 'II','ABA','ABBA', 'YIIY','UYIIYU' 总共有6个

5.22 找出列表中连续的数字,只取首尾(栈)

找出列表中连续的数字,然后只取首尾
有一个列表[1,2,3,4,8,6,7,11,15]
输出[(1,4),(6,8)]

 
 
原文地址:https://www.cnblogs.com/pythonwork/p/15772847.html