Python练习题——BNUZ

一 、填空题

  1. 若world = “world”,则print(“hello” + world)输出
helloworld
  1. 表达式"[3]in[1,2,3,4]"的值为___ .
False
  1. 表达式 ‘abc’ in (‘abcdefg’) 的值为 ___.
True
  1. 表达式 ‘abc’ in [‘abcdefg’] 的值为___.
False
  1. 在 Python 中 _None__表示空类型.

    None是一个特殊的常量。

    None和False不同。

    None不是0。

    None不是空字符串。

    None和任何其他的数据类型比较永远返回False。

    None有自己的数据类型NoneType。

    你可以将None复制给任何变量,但是你不能创建其他NoneType对象。

  2. bool([0])输出___ .

True
  1. 已知列表x = [1,2],那么表达式list(enumerate(x))的值为___ .
[(0, 1), (1, 2)]
  1. 已知x = [3,2,3,3,4],那么表达式[i for i, v in enumerate(x) if v==3]的值为 ___ .
[0, 2, 3]
  1. 已知x = ‘aa b ccc dddd’,那么表达式’’.join([v for i,v in enumerate(x[:-1]) if v==x[i+1]])的值为___ .
accddd
  1. 已知x = [3,5,7],那么执行语句x[len(x):] = [1,2]之后,x 的值为 ___ .
[3, 5, 7, 1, 2]
  1. 已知x = [[1]]*3,那么执行语句x[0][0] = 5之后,变量 x 的值为___ .
[[5], [5], [5]]
  1. 已知x = {i:i+3 for i in range(3)},那么sum(x)的值为___ ,sum(x.values())的值为___ .
3
12
  1. random 模块中 shuffle() 方法的作用是将列表中的元素随机乱序.

  2. 若string = “happy new year”,则string[3:-3] =___ .

py new y
  1. 已知 lst = [1,2,3,4,5], 则

    • lst[:-1]= [1,2,3,4]. lst[::-1]= [5,4,3,2,1]
    lst[1:3]= [2,3] .

    • lst[:3]= [1,2,3] . lst[1:-1]= [2,3,4]. lst[::-2]= [5,3,1] .

    • lst[-3:-1]= [3,4] . lst[:]= [1,2,3,4,5] . lst[::2]= [1,3,5] .

  2. 语句"Python Crash Courses".split()输出 .

['Python', 'Crash', 'Courses']
  1. 语句list(map(int, “1,2,3,4,5”.split(’,’)))输出 .
[1, 2, 3, 4, 5]
  1. 下列 while 循环执行的次数_10__ .

    k = 1000
    while k:
    print(k) k //= 2

500
250
125
62
31
15
7
3
1
  1. 下列程序输出 .

    num = 2
    def change():
    num = 3; print(num, end=’ ')
    change() print(num)

3 2
  1. 表达式 1//4 + 2.75的值是 .
2.75
  1. 若*a, b = [1,2,3,4],则 a = [1,2,3] , b = 4 .
  2. 若a, *b = [1,2,3,4],则 a = 1, b = [2,3,4].
  3. 若x = [1,2],那么经过x.extend([3,4])之后,x = [1, 2, 3, 4].
  4. 若x = [1,2],那么经过x.append([3,4])之后,x = [1, 2, [3, 4]].
  5. 若x = [1,2],那么连续执行命令 y = x和 y.append(3) 之后,x 的值为 [1, 2, 3].
  6. 若x = [1,2],那么连续执行命令 y = x[:]和 y.append(3)之后,x 的值为 [1, 2].
  7. 若x = [1,2],执行语句 y = x[:] 后,表达式 id(x) == id(y)的值为 False.
  8. 若x = [1,2],执行语句 y = x 后,表达式 id(x) == id(y)的值为 True.
  9. 若x = [1,2],执行语句 y = x 后,表达式 x is y的值为 True .
  10. 若x = [1,2],执行语句 y = x[:] 后,表达式 x is not y的值为 True.
  11. 表达式 [i for i in range(10) if i>8] 的值为 [9] .
  12. 已知 f = lambda x: x+5,那么表达式 f(3) 的值为 8 .
  13. 已知g = lambda x, y=2, z=3: x+y+z,那么表达式 g(5) 的值为 10.
  14. 已知x = range(1,4) 和 y = range(4,7),那么表达式 sum([i*j for i,j in zip(x,y)]) 的值为 32.
  15. 表达式 dict(zip([1, 2], [3, 4]))的值为.
{1: 3, 2: 4}
  1. 已知列表 x = [1, 3, 2],那么执行语句 a, b, c = map(str, sorted(x)) 之后,c 的值为 3 .
  2. 已知列表 x = list(range(5)),那么执行语句 x.remove(3)之后,表达式 x.index(4)的值为 3 .
  3. Python 标准os.path中用来判断指定文件是否存在的方法是 _os.path.exists()__.
  4. Python 标准库os.path中用来判断指定路径是否为文件的方法是 os.path.isfile() .
  5. Python 标准库os.path中用来判断指定路径是否为文件夹的方法是os.path.exists.

二、简答题

  1. 简要叙述列表和元组之间的区别,以及两者之间如何相互转换.

    相同点:
    	都是序列
    	都可以存储任何数据类型
    	可以通过索引访问
    不同点:
    	列表是可变的,而元组是不可变的,这标志着两者之间的关键差异。
    	元组无法复制。 原因是元组是不可变的。 如果运行tuple(tuple_name)将返回自己。
    	对于列表则分配小内存块。 与列表相比,元组的内存更小。
    	我们可以修改列表的值,但是不修改元组的值。
        由于列表是可变的,我们不能将列表用作字典中的key。 但可以使用元组作为字典key。
    

摘自元组合列表

一般情况下

colors = ['红', '绿', '黄']
print(tuple(colors))

nums=(1,2,3)
print(list(nums))

输出

(‘红’, ‘绿’, ‘黄’)
[1, 2, 3]

摘自 Python 列表与元组之间,如何相互转换

2. 简要叙述 Python 中定义函数的规则.

		1.创建名称具有可辨识性。
		
		2.定义的函数参数也应该具有可辨识性。
		
		3.形参可以设置默认参数。
		
		4.必须按照正确的顺序输入参数,同时数量要与创建时的参数一致。

摘自百度经验

3. 简要叙述函数参数 *args, **kwargs 的意义.

首先,解释星号的作用,一个星号的作用是将tuple或者list中的元素进行unpack,分开传入,作为多个参数;两个星号**的作用是把dict类型的数据作为参数传入。
kwargs是keyword argument的缩写,args就是argument。我们知道,在Python中有两种参数,一种叫位置参数(positional argument),一种叫关键词参数(keyword argument),关键词参数只需要用 keyword = somekey 的方法即可传参,而位置参数只能由参数位置决定。这也就决定了位置参数一定要在前面,否则关键词参数数量的变化(比如有些kwargs有默认值因此没有传参或者在后面传参的),都会使得位置无法判断。因此常见的也是
args 在 **kwargs 前面。

def this_fun(a,b,*args,**kwargs):
    print a
    print b
    print args
    print kwargs


this_fun(0,1,2,3,index1=11,index2=22)
0
1
(2, 3)
{'index2': 22, 'index1': 11}

摘自*arg和**kwargs区别

4. 简述面向对象中 new 和 init 区别.

init 通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后。它是实例级别的方法。
new 通常用于控制生成一个新实例的过程。它是类级别的方法,注意new一定需要返回值
返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例

在这里插入图片描述

摘自_ inti and new__

5. 简要叙述可变与不可变对象的概念.

不可变对象:int,string,float,tuple
可变对象 :list,dictionary

不可变对象: 由于Python中的变量存放的是对象引用,所以对于不可变对象而言,尽管对象本身不可变,但变量的对象引用是可变的。
在这里插入图片描述

可变对象:当对象的内容发生变化时,变量的对象引用是不会变化的。

在这里插入图片描述

摘自Python中的可变对象和不可变对象

6. 解释在 Python 中,实例方法 (instance method),类方法 (class method) 与静态方法 (static method) 的区别.

	普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。
	如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。
	而对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。
class Foo(object):
    """类三种方法语法形式"""
 
    def instance_method(self):
        print("是类{}的实例方法,只能被实例对象调用".format(Foo))
 
    @staticmethod
    def static_method():
        print("是静态方法")
 
    @classmethod
    def class_method(cls):
        print("是类方法")
 
foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print('----------------')
Foo.static_method()

输出结果:

是类<class '__main__.Foo'>的实例方法,只能被实例对象调用
是静态方法
是类方法
----------------
是静态方法
是类方法

摘自python类的实例方法、静态方法和类方法区别及其应用场景

7. 将字符串s = “ajclcdjlabbjfdljbfdded”,去掉重复并从小到大排序输出.

s = "ajclcdjlabbjfdljbfdded"
s=list(set(s))
s.sort()
print(s)
输出结果:['a', 'b', 'c', 'd', 'e', 'f', 'j', 'l']
  1. 写出用 filter 方法求出列表所有奇数并构造新列表,例如,输入 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 输出b = [1,3,5,7,9]
def is_odd(n):
    return n % 2 == 1
 
print(list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])))

输出结果:[1, 3, 5, 7, 9]
  1. 写出字典根据键从小到大排序的语句. 例如dic={“name”:“ymj”,“age”:18,“city”:“zhuhai”,“tel”:“1590000”}, 排序后 dic = {“age”:18,“city”:“zhuhai”,“name”:“ymj”,“tel”:“1590000”}.
dic={"name":"ymj","age":18,"city":"zhuhai","tel":"1590000"}

lis=sorted(dic.items(), key=lambda x: x[0], reverse=False)
dict_new = dict(lis)
print(dict_new)

输出结果:{'age': 18, 'city': 'zhuhai', 'name': 'ymj', 'tel': '1590000'}

  1. 分别根据年龄和姓名排序列表嵌套字典foo = [{“name”:“zs”,“age”:19},{“name”:“ll”,“age”:54}
    ,{“name”:“wa”,“age”:17},{“name”:“df”,“age”:23}]

按照名字排序:

foo = [{"name":"zs","age":19},
       {"name":"ll","age":54},
       {"name":"wa","age":17},
       {"name":"df","age":23}]

foo=sorted(foo,key=lambda x : x["name"])
print(foo)

输出结果:[{'name': 'wa', 'age': 17}, {'name': 'zs', 'age': 19}, {'name': 'df', 'age': 23}, {'name': 'll', 'age': 54}]

根据年龄排序:

foo = [{"name":"zs","age":19},
       {"name":"ll","age":54},
       {"name":"wa","age":17},
       {"name":"df","age":23}]

foo=sorted(foo,key=lambda x : x["age"])
print(foo)


输出结果:[{'name': 'wa', 'age': 17}, {'name': 'zs', 'age': 19}, {'name': 'df', 'age': 23}, {'name': 'll', 'age': 54}]

三、程序设计题

  1. 利用条件运算符实现输出成绩等级:成绩 >=90 分用 A 表示,80-89 分之间的用 B 表示,70-79 分之间的用 C 表示,60-69 分之间的用 D 表示,<60 分用 F 表示.
ymj=89
aaa=55
www=79

def grade(n):
    if(n>=90):
        return "A"
    elif(n>=80 | n<=89):
        return "B"
    elif(n>=70 | n<=79):
        return "C"
    elif(n>=60 | n<=69):
        return "D"
    elif(n<60):
        return "F"
    else:
        print("Wrong input!")
    

print(grade(ymj))
print(grade(aaa))
print(grade(www))
Out:
b
f
c
  1. 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
tmpStr = input('请输入字符串:')
alphaNum=0
numbers=0
spaceNum=0
otherNum=0
for i in tmpStr:
    if i.isalpha():
        alphaNum +=1
    elif i.isnumeric():
        numbers +=1
    elif i.isspace():
        spaceNum +=1
    else:
        otherNum +=1
print('字母=%d'%alphaNum)
print('数字=%d'%numbers)
print('空格=%d'%spaceNum)
print('其他=%d'%otherNum)
Out:
请输入字符串:asdqwrqwt asdagf 065
字母=15
数字=3
空格=2
其他=0
  1. 编写程序,创建一个文本文件 test.txt,并向其中写入字符串 hello world.
fp=open(r'D:\test.txt','a+') 
print('helloworld',file=fp) 
fp.close()

结果:
在这里插入图片描述

  1. 假设一个文本文件 input.txt 的内容如下,编写程序读取文件,并构成字典形式,如
    [{‘id’:‘1’,‘name’:‘Sam’,‘age’:‘22’,‘phone’:‘13651054608’,‘job’:‘IT’}, ]
    id name age phone job
    1 Sam 22 13651054608 IT
    2 Tom 23 13304320533 Tearcher
    3 Jack 18 1333235322 IT
dic = {}
f = open('D:\\test.txt')

lis=f.readline().split()

for line in f.readlines():
    line=line.split()
    dic=dict(zip(lis,line))
    print(dic)

f.close()

Out:
{'id': '1', 'name': 'Sam', 'age': '22', 'phone': '13651054608', 'job': 'IT'}
{'id': '2', 'name': 'Tom', 'age': '23', 'phone': '13304320533', 'job': 'Tearcher'}
{'id': '3', 'name': 'Jack', 'age': '18', 'phone': '1333235322', 'job': 'IT'}
  1. 定义一个学生类。有下面的类属性:

    • 姓名

    • 年龄

    • 成绩 (一个列表,包含多门课程的成绩,都是整数)

    类方法:

    • 获取学生的姓名:get_name() 返回类型:str

    • 获取学生的年龄:get_age() 返回类型:int

    • 返回所有课程中的

class Student:
    def __init__(self,name,age,grade):
        self.name=name
        self.age=age
        self.grade=grade
    def get_name(self):
        return self.name
    def get_age(self):
        return self.age
    def get_course(self):
        return max(self.grade)

s=Student('ymj',20,[90,80,100])
print(s.get_name(),s.get_age(),s.get_course())

实验结果:`ymj 20 100`

谏言

本篇文章为本人的处女作,有的地方说不定不够严谨、可能有误,希望大家经供参考,有问题建议百度,问题解法不一定是最优。
在这里插入图片描述

  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值