python面试_总结02

- 代码题

1、创建一个函数,接收一个字符串参数,判断其做为Python标识符是否合法。

具体要求:

  • 如果合法则输出 True,否则输出 False。
  • 如果该字符串与Python内置的关键字,或Bifs冲突,则打印‘conflict‘
  • 注: Python标识符的规则,关键字和Bifs可搜索得到
import keyword, string
print(keyword.kwlist)
print()
print(string.ascii_letters)
print()
print(string.digits)
[‘False‘, ‘None‘, ‘True‘, ‘and‘, ‘as‘, ‘assert‘, ‘async‘, ‘await‘, ‘break‘, ‘class‘, ‘continue‘, ‘def‘, ‘del‘, ‘elif‘, ‘else‘, ‘except‘, ‘finally‘, ‘for‘, ‘from‘, ‘global‘, ‘if‘, ‘import‘, ‘in‘, ‘is‘, ‘lambda‘, ‘nonlocal‘, ‘not‘, ‘or‘, ‘pass‘, ‘raise‘, ‘return‘, ‘try‘, ‘while‘, ‘with‘, ‘yield‘]

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

0123456789
import keyword, string

def Identifier(s):
    kw = keyword.kwlist # 内置关键字
    # 请用if-else完成检测,打印conflict或者False
    # your code here

    # 标识符命名规范
    # 1.数字,下划线,字母构成
    # 2.避开关键字,这里s != kw
    # 3.不能用数字开头

    # 不能是关键字
    if s in kw:
        print(s, "标识符不能是关键字")
        return False
    # 开头必须是字母或者下划线
    elif s[0] == "_" or s[0] in string.ascii_letters:
        # 除开头以外,必须是数字+下划线+字母
        for i in s[1:]:
            if (i == "_") or (i in string.digits) or (i in string.ascii_letters):
                pass
            else:
                print(s, "既不是关键字,开头也合法,但是后面有非法字符")
                return False
        print(s, "合法的标识符")
        return True
    else:
        print(s, "不是关键字,开头已经不合法(后面不晓得)")
        return False

print("01", Identifier("list"))
print("02", Identifier("abc#"))
print("03",Identifier("1a"))
list 合法的标识符
01 True
abc# 既不是关键字,开头也合法,但是后面有非法字符
02 False
1a 不是关键字,开头已经不合法(后面不晓得)
03 False

2、编写一个函数,能生成包含20个随机整数的列表,然后将前10个元素升序排列,后10个元素降序排列,并分别打印输出

提示:本题考察对列表的切片和排序操作,注意切片下标。

import random
def sort2part():
    # 用random生成20个随机数并完成本题要求
    # your code here
    # 创建一个列表用于保存随机数
    total_list = []
    list_asc = []
    list_dec = []
    # 1、生成20个随机数
    for i in range(20):
        total_list.append(random.randint(1, 20))
    print("生成的随机数列表是这个样子:", total_list)
    # 2、对列表进行切片
    list_asc = total_list[:10]
    list_dec = total_list[10:]
    print("切片后前10的列表:", list_asc)
    print("切片后后10的列表:", list_dec)

    assert len(list_asc) + len(list_dec) == len(total_list), "长度需要满足一致"

    # 3、分别进行排序
    list_asc = sorted(list_asc)
    list_dec = sorted(list_dec, reverse=True)
    print("升序后前10的列表:", list_asc)
    print("降序后后10的列表:", list_dec)

    return 

sort2part()

3、有一分数序列为:2/1,3/2,5/3,8/5,13/8,21/13,  请使用Python代码生成,并打印该数列的前30(演示代码取5项)项,并求和返回

提示:观察分数的分子和分母,每1项都和前2项有关系,也可检索“斐波那契数列”

# 显示分数的包
import fractions
from functools import reduce

def fab(max_num):
    # 完成分子分母的生成并计算求和返回结果
    # your code here

    # 创建列表保存数据
    _list = []

    # 1、首先生成斐波那契数列
    a = 1  # 注意这里a从1开始
    b = 1
    for i in range(max_num):
        # a是分母,b是分子
        a, b = b, a + b
        ‘‘‘
        上式等同于下面3式:
        temp = b
        b = a + b
        a = temp
        ‘‘‘
        # print("a = ", a, "b = ", b)

        # 2、生成分数
        _list.append(fractions.Fraction(b, a))
        # _list.append(b / a)

    print("看一眼生成的列表长啥样:", _list)
    # 分数要遍历才能打印...
    for elm in _list:
        print(elm)

    assert len(_list) == max_num, "长度一致"

    # 3、求前30项的和
    sum_ = reduce(lambda x, y: x + y, _list)
    return sum_

print("该数列的前5项和: ",fab(5))
看一眼生成的列表长啥样: [Fraction(2, 1), Fraction(3, 2), Fraction(5, 3), Fraction(8, 5), Fraction(13, 8)]
2
3/2
5/3
8/5
13/8
该数列的前5项和:  1007/120

4、BMI编写

身体质量指数(BMI)是根据人的体重和身高计算得出的一个数字,BMI是可靠的身体肥胖指标,其计算公式:BMI = Weight / High2,其中体重单位为公斤,身高单位为米。

  • 计算公式为:BMI=体重(kg)÷ 身高2(m)
  • 提示用户输入体重(kg)和身高的数字(m)(注意单位),然后计算BMI。
  • 根据BMI指数范围,定义当前健康状态。BMI指数在18至25之间定义为健康的标准体重, 小于该范围定义为偏瘦,超过该范围定义为偏重。
  • 将BMI指数和其所代表状态输出
weight = float(input(‘请输入您的体重:‘))
high = float(input(‘请输入您的身高:‘))
# 完成BMI计算并返回结果提示信息
# your code here
high = high / 100
BMI = weight / (high ** 2)

if 18 <= BMI <= 25:
    print("您的身体质量指数是:%.2f, 很健康哦" % BMI)
elif BMI < 18:
    print("您的身体质量指数是:%.2f, 有些偏瘦哦" % BMI)
else:
    print("您的身体质量指数是:%.2f, 你这个胖纸" % BMI)
请输入您的体重:65
请输入您的身高:173
您的身体质量指数是:21.72, 很健康哦

5、字符统计

  • 创建一个函数,接收字符串输入,分别统计出其中英文字母、空格、数字和其它字符的个数后打印。
  • 提示:
    • ord(‘a‘) 能将字符 ‘a‘ 转化为 ASCII 码表上对应的数值
    • 例如,空格为32
    • 数字 0-9 对应的码值为 48-57
    • 大写字母 A-Z 对应 65-90
    • 小写字母 a-z 对应 97-122
    • 比122高的都是其它。
def str_count(s):
    # 完成对应要求的统计,并返回对应的数量
    # your code here

    # 初始化计数变量
    count_s, count_z, count_a, count_o = 0, 0, 0, 0
    for i in s:
        # 得到对应ASCII码的数值
        num_asc = ord(i)
        if num_asc == 32:
            count_s += 1
        elif 48 <= num_asc <= 57:
            count_z += 1
        elif 65 <= num_asc <= 90 or 97 <= num_asc <= 122:
            count_a += 1
        elif num_asc > 122:
            count_o += 1
#     assert (count_s + count_z + count_a + count_o) == total_num, "最终个数相符"

    print("空格个数:%d个" % count_s)
    print("数字个数:%d个" % count_z)
    print("英文字母个数:%d个" % count_a)
    print("其他字符个数:%d个" % count_o)  

str_count("我是xiao ming ming, 今年27岁")
空格个数:3个
数字个数:2个
英文字母个数:12个
其他字符个数:5个

6、创建一个函数,可以将去除给定列表中中相邻且重复的元素(只保留一个)后,打印输出结果。

  • 说明

    • 输入参数为 l1 = [1,2,3,4,4,4,4,4,4,5,6,6,8,8,12,12,12,12,13]
    • 操作后,保证原有整体排序不变,仅处理相邻且重复的元素
    • 请勿使用set。
def remove_same(ll):
    # 完成题目要求的任务,并返回结果
    # your code here
    # 逆序,这样就不会出现下标溢出的情况
    for i in range(len(ll) - 1, 0, -1):
        # print("现在到了第%d步" % i)
        print(ll)
        if ll[i] == ll[i-1]:
            # 删除相邻且重复的元素
            del ll[i]
    return ll

lst = [4,4,5,6,5,6,6,8,7,8,12,12]
# lst = [1,1,2,3,4,4,4,4,4,4,5,6,6,8,8,12,12,12,12,13]
# lst1 = [1,2,3,4,4,4,4,4,4,5,6,6,8,8,12,12,12,12,13, 4, 8, 4, 12, 13, 13, 17, 3, 3, 3]

print(remove_same(lst))
[4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12, 12]
[4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12]
[4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12]
[4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12]
[4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12]
[4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12]
[4, 4, 5, 6, 5, 6, 8, 7, 8, 12]
[4, 4, 5, 6, 5, 6, 8, 7, 8, 12]
[4, 4, 5, 6, 5, 6, 8, 7, 8, 12]
[4, 4, 5, 6, 5, 6, 8, 7, 8, 12]
[4, 4, 5, 6, 5, 6, 8, 7, 8, 12]
[4, 5, 6, 5, 6, 8, 7, 8, 12]

7、创建一个函数,接收一个由整数组成的列表(需对输入列表做检查,长度最少为2, 数据类型为整型),并检验后下列条件后输出:

  • 如列表是升序排列的,则输出"ASC";
  • 如列表是降序排列的,则输出"DESC";
  • 如列表无序,则输出"WRONG"。
def check_data(l):
    # 请完成题目要求的任务,并输出对应信息
    # your code here
    # 得到列表的总长度
    count = len(l)
    if count < 2:
        print("长度不够,短拒")
        return None
    # 判断数据类型是否位int
    for i in range(count):
        if not isinstance(l[i], int):
            print("数据类型有非int型")
            return None
    # 判断是否是升序
    if sorted(l) == l:
        print("ASC")
    # 判断是否降序
    elif sorted(l, reverse=True) == l:
        print("DESC")
    # 无序
    else:
        print("WRONG")

check_data([1])
check_data([1,"2"])
check_data([1,2,3,4])
check_data([4,3,2,1])
check_data([1,3,2,4])
长度不够,短拒
数据类型有非int型
ASC
DESC
WRONG


原文地址:https://www.cnblogs.com/kongweisi/p/12095955.html

时间: 2024-11-11 00:14:07

python面试_总结02的相关文章

python学习_处理数据编程实例(一)

目的:用一个实例总结学习到的with语句,函数,列表推导,集合,排序,字符分割等内容 要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式都精确为分秒,时间越短成绩越好,分别输出每个学生的无重复的前三个最好成绩,且分秒的分隔符要统一为"." 数据准备:分别建立四个文本文件 james.txt     2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22 julie.txt        2

Python面试简介及并行并发

今天的分享内容大体如下: 一. 面试 1. 什么是面试 2. 优秀的面试 二. Python综述 1. Python设计哲学及版本变迁 2. Python发展现状及其他语言使用场景 3. GIL 4. 内存管理和垃圾回收 5. 面试示例 三.并发并行 1. 进程 2. 线程 3. 协程 4. 并发编程 一. 面试 什么是面试 面:当面/面谈/面聊, 试:考试,当前社会上各大企业和公司招人环节中最重要的一道流程关卡:目前面试已经衍生了多种操作形式:直面.电面.视频面.在线coding: 一轮面试的

python中_、__和__xx__的区别

python中_.__和__xx__的区别 本文为译文,版权属于原作者,在此翻译为中文分享给大家. 英文原文地址:Difference between _, __ and __xx__ in Python 在学习Python时,很多人都弄不清楚各种下划线的意思,而且在这之前已经给其他人解释过很多遍了,是时候把它记录下来. "_"单下划线 Python中不存在真正的私有方法.为了实现类似于c++中私有方法,可以在类的方法或属性前加一个“_”单下划线,意味着该方法或属性不应该去调用,它并不

python开发_++i,i += 1的区分

python开发_++i,i += 1的区分 在很多编程语言(C/C++,Java等)中我们都会碰到这样的语法: 1 int i = 0; 2 ++ i; // -- i; 这样的语法在上述编程语言中可以实现自增(减),在python中也支持这样的语法,不过在python中 这样的用法不是用来自增(减),而是实现数学中的符号运算操作: 1 i = 2 2 ++ i #输出:2 3 +(+i) #输出:2 4 -(+i) #输出:-2 5 +(-i) #输出:-2 6 -(-i) #输出:2 在p

python面试题目

问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x 答案是 1 1

Python学习_列表解析和Lambda表达式

1.根据要求创建列表threes_and_fives(列表值包括1到15中能够被3或者5正常的数) threes_and_fives=[x for x in range(1,16) if x%3==0 or x%5==0] 2.lambda表达式实例(剔除掉列表中的"X") garbled = "IXXX aXXmX aXXXnXoXXXXXtXhXeXXXXrX sXXXXeXcXXXrXeXt mXXeXsXXXsXaXXXXXXgXeX!XX" message

python练习_购物车(简版)

python练习_购物车(简版) 需求: 写一个python购物车可以输入用户初始化金额 可以打印商品,且用户输入编号,即可购买商品 购物时计算用户余额,是否可以购买物品 退出结算时打印购物小票 以下代码实现的功能与思路: 功能: (1)预算金额控制,只能输入大于0的数字 (2)商品格式化打印 (3)选择完成要买的商品后,提示用户再次确认,确认后开始计算用户余额是否大于等于商品价格,价格正确后则加入购物车 (4)输入q则进行结算,结算时将重复的商品进行合并,显示个数,并计算消费总额和余额 思路:

Python 进阶_生成器 &amp; 生成器表达式

目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & 列表解析 生成器 带有 yield 关键字的的函数在 Python 中被称之为 generator(生成器).Python 解释器会将带有 yield 关键字的函数视为一个 generator 来处理.一个函数或者子程序都只能 return 一次,但是一个生成器能暂停执行并返回一个中间的结果 -- 这就

Python学习_算数运算函数

记录以grades列表为例,分别定义输出.求和.平均值.方差和标准差函数,并输出相应的值 grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90, 85, 50.5] #定义输出函数 def print_grades(grades): for grade in grades: print grade #定义求和函数 def grades_sum(grades): total = 0 for grade in grades: total +=