python典型面试题

一、有个学生成绩的列表[15,58,99,28,78,67,83,57],需要对列表按照标准分组计数。

1)分组标准为[(0,59),(60,79),(80,89),(90,100)]

2)输出结果[(0,59):数量4,(60,79):数量2,(80,89):数量1,(90,100):数量1]

分析:

1、字典的理解和使用,字典可通过字典推导式、zip函数、字典的fromkeys函数生成

2、分组区间作为key,value统计数量,满足要求的计数+1

scores = [15, 58, 99, 28, 78, 67, 83, 57]
group = [(0, 59), (60, 79), (80, 89), (90, 100)]

# 字典生成1-字典推导式
dct = {k: 0 for k in group}

# 字典生成2-zip函数
# count = [0,0,0,0]
# dct = dict(zip(group, count))

# 字典生成3-字典的fromkeys函数, 需要初始化value为0
# dct = dict.fromkeys(group)
# for k in dct: dct[k] = 0

for i in scores:
    for k in group:
        if k[0] <= i <= k[1]:
            dct[k] += 1
            break
dct1 = {str(k):"数量"+str(v) for k,v in dct.items()}
print(dct1)

二、输入字符串,输出字符串中出现次数最多的字母及其出现次数

分析:字典的特性去重、字典推导式的使用

def find_max_str(str):
    # 集合字典去重,查找所有字母数量
    dct = {k: 0 for k in str}
    for i in str:
        for k in dct.keys():
            if i == k:
                dct[k] += 1
    # 查找字典中value最大的
    max = 1
    alphamax = ""
    for k, v in dct.items():
        if v > max:
            max = v
            alphamax = k
        else:
            pass
    return {alphamax:max}
print(find_max_str("hello hello lala"))

三、现有一个list,里面所有的元素都是字符串,编写一个函数对它实现一个大小写无关的排序,然后打乱这个排好序的list,再查找其中是否有某元素a

分析:

1、列表排序,不区分大小写,元素均转换成大写或小写,用sorted()函数

2、随机排序,导入random,使用random.shuffle(l)

3、列表的查找元素方式index(),不区分大小写的话可先转换后查找;也可直接用any()函数和列表推导式

import random
def list_handle1(lst, find_element):
    newlist = sorted(lst, key=lambda i: i.upper())
    random.shuffle(newlist)
    # 方法一:使用index()完全匹配,注意未找到元素时抛出ValueError异常
    try:
        idx = newlist.index(find_element)
        print("已找到对应元素")
    except ValueError:
        print("未找到对应元素")

def list_handle2(lst, find_element):
    newlist = sorted(lst, key=lambda i: i.upper())
    random.shuffle(newlist)
    flag = False
    # 不区分大小写,先转换成大写再判断
    # 方法一:for循环判断,找到元素设置flag为True
    # for i in newlist:
    #     if i.upper() == find_element.upper():
    #         flag = True
    # 方法二:使用any函数+列表推导式
    flag = any(i.lower() == find_element.lower() for i in newlist)
    if flag == True:
        print("已找到对应元素")
    else:
        print("未找到对应元素")

list_handle1(['a', 'Z', 'C', 'g'], 'a')
list_handle2(['b', 'Z', 'C', 'g'], 'a')
list_handle2(['yes', 'Why', 'change', 'Python'], 'Python')

四、写一段程序,逐行读取一个文本文件(每行均为字符串),并在屏幕上打印文件每行的内容,打印每行内容的首字母要求大写。

分析:文件读取,并处理文件内容,首字母大写函数capitalize(),字符串去空strip()

def file_handle(filename):
    # 实现一
    # file = open(filename, 'r')
    # for line in file.readlines():
    #     print(line.strip().capitalize())
    # file.close()
    # 实现二
    with open(filename, 'r') as file:
        for line in file:
            print(line.strip().capitalize())
file_handle("text.txt")

五、生成一个字典,将字典内容写入到一个csv文件之中,首先生成csv文件首行的表头,再将字典中的内容写入到表头对应的列。

分析:

1、csv文件写入,导入包csv ,csv.DictWriter(csvfile, fieldnames=headers)

2、针对单字典或者列表字典,选择指定字典的keys()作为csv文件的表头

3、csv写入文件,writeheader()写入表头,writerow()写入一行数据,writerows()写入多行数据

4、newline=‘’,避免写入空行;含中文时指定encoding='utf-8-sig'进行编码处理

import csv
def dict_handle(dct, file):
    # 键作为表头
    headers = dct.keys()
    # 写入csv文件
    with open(file, 'w', newline='', encoding='utf-8-sig') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=headers)
        writer.writeheader()
        writer.writerow(dct) # 写入一行数据

def list_dict_handle(lst, file):
    # 获取表头
    headers = lst[0].keys()
    # 写入csv文件
    with open(file, 'w', newline='', encoding='utf-8-sig') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=headers)
        writer.writeheader()
        writer.writerows(lst)  # 写入多行数据

if __name__ == "__main__":
    # 写入字典,单行数据
    # sample_dict = {"姓名": "张三","年龄": 25,"城市": "北京","职业": "工程师"}
    # dict_handle(sample_dict, "output.csv")
    # 写入字典列表,多行数据
    sample_dict = [
        {"姓名": "张三","年龄": 25,"城市": "北京","职业": "工程师"},
        {"姓名": "王五","年龄": 31,"城市": "深圳","职业": "设计师"}
    ]
    list_dict_handle(sample_dict, "output.csv")
    print("字典已成功写入output.csv文件")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值