#方法一:
import re
str1 = input("请输入一行字符串: ")
str_digit = re.findall(r"[0-9]",str1)
str_e = re.findall(r"[a-zA-Z]",str1)
str_blank = re.findall(r"s",str1)
str_other = (len(str1)-len(str_digit)-len(str_e)-len(str_blank))
print(f"您输入字符串中数字的个数是:{len(str_digit)},您输入字符串中英文字母的个数是:{len(str_e)},您输入字符串中空格的个数是:{len(str_blank)},您输入字符串中其他字符的个数是:{str_other}")
#方法二:
count_digit = 0
count_str = 0
count_blank = 0
count_other = 0
for i in str1:
if i.isdigit():
count_digit += 1
elif i.islower() or i.isupper():
count_str += 1
elif i.isspace():
count_blank += 1
else:
count_other += 1
print(f"您输入字符串中数字的个数为:{count_digit},英文字母的个数为:{count_str},空白的个数为:{count_blank},其他字符的个数为:{count_other}")
2、将随机输入的"2021-05-06 12:00" 这种类型的时间格式字符串转化成"05/06/2021:12:00"此种形式
import time
time1 = input("请输入一个'2021-05-06 12:00'这种格式的时间:")
timeArray = time.strptime(time1,"%Y-%m-%d %H:%M") #将字符串的时间格式转换成为数据结构的时间格式
time2 = time.strftime("%m/%d/%Y:%H:%M",timeArray) #将数据结构的时间格式转换成为字符串的时间格式
print(time2)
3、python装饰器是什么?有什么作用?
4、迭代器和生成器有什么区别?他们有什么作用?装饰器就是在不改变函数或者类本身源代码的基础之上,添加额外的功能,如给登录添加一个验证功能,或者是统计某个功能的执行时间等 装饰器的本质就是闭包,闭包是发生函数嵌套,外层函数的返回值为内层函数的函数名,外层函数要有参数,往往被内层函数使用 在函数定义上方@装饰器函数的名字,即可以直接使用装饰器对下面的函数进行装饰 函数名记录的是空间地址,加小括号是调用
5、如何跨模块共享全局变量?任何实现了__iter__()和__next__()都是迭代器,其中__iter__() 返回自身,__next__() 返回下一个值 任何迭代器对象都是可迭代对象 迭代器是一个懒加载模式,用的时候才生成 生成器是一种特殊的迭代器,就是为了写迭代器更加优雅方便,不需要手动实现__iter__和__next__方法 生成器有两种表达形式,一种是函数生成器,另一种是生成器表达式
6、简述python内存管理采用general import方法 在单个程序中跨模块共享信息的规范方法是创建一个特殊模块(通常称为config或cfg)。只需在应用程序的所有模块中导入配置模块,然后该模块可用作全局名称,因为每个模块只有一个实例,所以对模块对象所做的任何更改都会反映在任何地方。 config.py x = 0 mod.py import config config.x = 1 main.py import config import mod print(config.x)
7、简述pep8的5个规则, 简述python数据类型以引用计数为主,分代回收、标记清除为辅的垃圾回收方式进行内存回收,并且还引入小整数缓冲池和常见简单字符串驻留区的内存缓冲池机制 引用计数 python每个对象都维护一个引用计数字段,记录该对象被引用的次数 当有新的引用指向的时候,引用计数+1 当有无效的引用发生的时候,引用计数-1 当对象的引用计数为0的时候,销毁对象 循环引用 内存泄露: (占着茅坑不拉屎) 有一部分内存无法被回收释放,程序又无法访问
8、python中有哪些数据类型是可变数据类型,有哪些数据类型是不可变数据类型pep8规则: 每个import语句只导入一个模块,尽量避免一次导入多个模块 不要在行尾添加分号,也不要用分号将两条命令放在同一行 建议每行不超过 79 个字符,如果超过,建议使用小括号将多行内容隐式的连接起来,而不推荐使用反斜杠 进行连接。例如,如果一个字符串文本无法实现一行完全显示,则可以使用小括号将其分开显示 使用四个空格表示每个缩进级别 包导入时,尽量使用绝对路径,移植性和阅读性更高 Python的数据类型: 数字类型:整型、浮点型、复数类型 字符串类型:str 逻辑类型:布尔类型(TRUE FALSE) 列表类型 元组类型 集合类型 字典类型
9、有一个文本内容格式如下,每行个字段用空白隔开,假设你不知道它里面的具体内容这个可变和不可变是针对内存地址而言的 可变数据类型:变量引用的数据类型,在更改数值的时候,存在不开辟新内存的行为,此数据类型为可变数据类型。 不可变数据类型 :变量引用的数据类型,在更改数值的时候,不存在不开辟新内存的行为,此数据类型为不可变数据类型。 可变数据类型:列表、字典、集合 不可变数据类型:数字、字符串、元组
# a a1 a2 a3
# b xx
# c 123 yy
# 请将它们的每一行内容按照如下格式输出:
# a
# a1
# a2
# a3
# b
# xx
# c
# 123
# yy
###在同级目录下创建一个a.txt文件,内容如下 a a1 a2 a3 b xx c 123 yy
filepath = 'a.txt'
with open(filepath,'r',encoding='UTF-8') as file:
for line in file:
line1 = line.split()
i = 0
for string in line1:
r1 = ' '*i + string
print(r1)
i += len(string)
10、请用python实现冒泡排序、快速排序
# 冒泡排序
def bubble_sort(array):
for i in range(1,len(array)):
for j in range(0,len(array)-i):
if array[j] > array[j+1]:
array[j],array[j+1] = array[j+1],array[j]
return array
if __name__ == '__main__':
array = [10,23,54,6,7,5,32,56,23,64,76]
print(bubble_sort(array))
# 快速排序
def partition(arr, low, high):
i = (low - 1) # 最小元素索引
pivot = arr[high]
for j in range(low, high):
# 当前元素小于或等于 pivot
if arr[j] <= pivot:
i = i + 1 arr[j] = arr[j], arr[i]
arr[i],
arr[i + 1], arr[high] = arr[high], arr[i + 1]
return (i + 1)
# arr[] --> 排序数组
# low --> 起始索引
# high --> 结束索引
# 快速排序函数
def quickSort(arr, low, high):
if low < high:
pi = partition(arr, low, high)
quickSort(arr, low, pi - 1)
quickSort(arr, pi + 1, high)
arr = [10, 7, 8, 9, 1, 5]
n = len(arr)
quickSort(arr, 0, n - 1)
print(arr)
11、有如下python脚本, a.py# 它执行时,可以接受命令行参数。比如:python3 a.py -name sc -age 5 应该如何实现
###在Linux中新建.py文件,然后按照题目方式执行,可以传入预期参数
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-name',type=str,default="None")
parser.add_argument('-age',type=int,default=18)
args = parser.parse_args()
print(args.name)
print(args.age)
12、如何判断字符串中是否有重复字符串
string = input("请输入一个字符串: ")
set1 = set(string)
dic = dict()
if len(string) == len(set1):
print("您输入的字符串中没有重复的")
else:
print("您输入的字符串中有重复的")
for i in string:
dic[i] = string.count(i)
print(dic)



