Python一练

一、单选

1.下面选项说法错误的是 A

A. 函数可以不传参数,但必须有返回值(可以有也可以没有,没有return时是隐匿return 返回值是None)
B.函数的参数个数是不固定的(可变参数)
C.函数实现了代码的封装
D.函数的返回值可以不用赋值

2.关于面向对象的三大特性说法错误的是 A

A.这种用法与函数的用法一样
B.三大特性指封装、继承、多态、面对对象
C.这三大特性能够更好的帮助开发者进行快速开发
D.一个类可以继承父类中的特性

3.下列关于linux命令说法正确的是 B

A. touch可以修改文件内容 (创建文件命令)
B. rm可以删除文件
C. mv是拷贝文件 (移动、剪切文件命令,复制是cp)
D. reboot是关机命令 (是重启命令 ,关机是poweroff)

4.下列描述中正确的是 A

A. 协程是依赖于线程的 (协程是一个线程的执行) 进线协
B. 线程不依赖进程
C. 线程之间必须要用queue才能通信(只是其中之一)
D. 协程占用资源最大

5.已知x = [1,2,3], 执行语句x.append(4)之后,x的值为什么 A

A. [1,2,3,4]
B. [4]
C. [1,2,3]
D. 4

6.下列说法不正确的是 D

A. 函数内部定义的局部变量当函数调用结束后被自动删除
B. pass表示的是空语句
C. 列表对象的pop()方法默认删除并返回最后一个元素,没有则抛出异常
D. 面向对象中类是可以直接使用的(有需要实例化和不需要实例化的)

7.正则表达式中.*?能匹配多少字符 D

A. 有多少匹配多少
B. 1 个
C. 0 个
D. 满足要求的个数

8.以下关于 Python 字符串的描述中,错误的是 C

A. 字符串是字符的序列,可以按照单个字符或者字符片段进行索引
B. 字符串包括两种序号体系:正向递增和反向递减
C. Python 字符串提供区间访问方式,采用 [N:M] 格式,表示字符串中从 N 到 M 的索引子字符串(包含 N 和 M)(正向是左闭右开)
D. 字符串是用一对双引号" "或者单引号’ '括起来的零个或者多个字符

9.关于Python的全局变量和局部变量,以下选项中描述错误的是 A

A. 局部变量指在函数内部使用的变量,当函数退出时,变量依然存在,下次函数调用可以继续使用
B. 使用global保留字声明简单数据类型变量后,该变量作为全局变量使用
C. 简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放
D. 全局变量指在函数之外定义的变量,一般没有缩进,在程序执行全过程有效

10.下面代码的输出结果是()A

print( 0.1 + 0.2 == 0.3)
A. False (float类型,结果是近似值)
B. –1
C. 0
D. True (print(1+2==3))

11.ls = [3.5, “Python”, [10, “LIST”], 3.6],ls[2][ –1][1]的运行结果是 B

A. P
B. I
C. Y
D. L

12.关于Python语句P = –P,以下选项中描述正确的是()C

A. P和P的负数相等
B. P和P的绝对值相等
C. 给P赋值为它的负数
D. P的值为0

13.下列说法中不正确的是 A

A. 函数不能被当做模块进行导入 (可以导入包,模块,方法等)
B. 面向对象是专门用来应对复杂开发的编程方式
C. 一个.py结尾的可以当做模块进行导入
D. 面向对象对于函数是一个更大的封装

14.给出如下代码:D

DictColor = {“seashell”:“海贝色”,“gold”:“金色”,“pink”:“粉红色”,“brown”:“棕色”, “purple”:“紫色”,“tomato”:“西红柿色”}
以下选项中能输出“海贝色”的是
A. print(DictColor.keys())
B. print(DictColor[“海贝色”])
C. print(DictColor.values())
D. print(DictColor[“seashell”])

15.以下关于字典类型的描述,正确的是 D

A. 字典类型可迭代,即字典的值还可以是字典类型的对象 (因果倒置)
B. 表达式 for x in d: 中,假设d是字典,则x是字典中的键值对 (只是键值)
C. 字典类型的键可以是列表和其他数据类型 (键具有唯一性,不可变)
D. 字典类型的值可以是任意数据类型的对象

16.下面代码的输出结果是()D

s =[“seashell”,“gold”,“pink”,“brown”,“purple”,“tomato”]
print(s[1:4:2]) A. [‘gold’, ‘pink’, ‘brown’]
B. [‘gold’, ‘pink’]
C. [‘gold’, ‘pink’, ‘brown’, ‘purple’, ‘tomato’]
D. [‘gold’, ‘brown’]

17.关于Python循环结构,以下选项中描述错误的是 C

A. 遍历循环中的遍历结构可以是字符串、文件、组合数据类型和range()函数等
B. break用来跳出最内层for或者while循环,脱离该循环后程序从循环代码后继续执行
C. 每个continue语句只有能力跳出当前层次的循环 (当前档次循环)
D. Python通过for、while等保留字提供遍历循环和无限循环结构

18.以下程序的输出结果是()D

for i in reversed(range(10, 0, -2)):(reversed 反转)
print(i,end=" ")
A. 0 2 4 6 8 10
B. 12345678910
C. 9 8 7 6 5 4 3 2 1 0
D. 2 4 6 8 10

19.字符串 s = “I love Python”,以下程序的输出结果是()D

s = “I love Python”
ls = s.split()
ls.reverse()
print(ls)
A. ‘Python’, ‘love’, ‘I’
B. Python love I
C. None
D. [‘Python’, ‘love’, ‘I’]

20.关于程序的异常处理,以下选项中描述错误的是 B

A. 程序异常发生经过妥善处理可以继续执行
B. 编程语言中的异常和错误是完全相同的概念
C. 异常语句可以与 else 和 finally 保留字配合使用
D. Python 通过 try、except 等保留字提供异常处理功能

二、代码题:

21.

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方

li=[]
for i in range(100,1000):
    g=i%10
    s=i//10%10
    b=i//100
    if g**3+s**3+b**3==i:
        li.append(i)
print(f'水仙花数为:{li}')

22.题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

#方法一
li=['x','y','z']
for a in li:
    if a!='x':
        for c in li:
            if c!='x' and c!='z' and a!=c:
                for b in li:
                    if a!=b and c!=b:
                        print(f'比赛名单为:a:{a},b:{b},c:{c}')
# 方法二
a=set(['x','y','z'])
b=set(['x','y','z'])
c=set(['x','y','z'])
a-=set('x')
c-=set(['x','z'])
for i in a:
    for k in b:
        if i!=k:
            for j in c:
                if i!=j and k!=j:
                    print(f'比赛名单为:a:{i},b:{k},c:{j}')

23.题目:求1+2!+3!+…+20!的和。

#方法一
n1=1
sum=0
for i in range(1,21):
    n1*=i
    sum+=n1
print('1+2!+3!+...+20!和为:{}'.format(sum))
#方法二

def jc(n):
    if n==1:
        return 1
    return n*jc(n-1)
sum=0
for i in range(1,21):
    sum+=jc(i)
print(f"1+2!+3!...+20!和为:{sum}")

24.判断有效日期
用户可以输入"20170327"等三种格式的日期
判断是否是有效日期,如"20170229"不是有效日期,
"20171345"不是有效日期

while True:
    userI=input('请输入你的日期,q键退出 (如:20170302 样式):')
    if userI=='q':
        break
    elif len(userI)==8:
        year=int(userI[:4])
        mon=int(userI[4:6])
        data=int(userI[6:8])
    else:
        print('请重新输入')
        continue
    if year >1000:
        if mon in [1,3,5,7,8,10,12]:
            if data<=31:
                print('此日期为有效日期')
            else:
                print('此日期为无效日期')
        elif mon in [4,6,9,11]:
            if data<=30:
                print('此日期为有效日期')
            else:
                print('此日期为无效日期')
        elif mon==2:
            if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
                if data <= 29:
                    print('此日期为有效日期')
                else:
                    print('此日期为无效日期')
            else:
                if data<=28:
                    print('此日期为有效日期')
                else:
                    print('此日期为无效日期')
        else:
            print('月份有误,请检查你的月份')
    else:
        print('年份有误,请检查你的年份')

25.题目:利用递归方法求5!

#方法一
def jc(n):
    if n==1:
        return 1
    return n*jc(n-1)
print(jc(5))

#方法二
n1=1
for i in range(1,6):
    n1*=i
print(n1)

26.使用while,完成以下图形的输出。(每一行的星星不能用*乘以星星的数量来完成,须使用while嵌套)(较难)

在这里插入图片描述

#方法一
#确定每行打印个数
li=[]
s=0
n=int(input('请输入总层数(为奇数层):'))
s = n // 2 + 1
for i in range(0,n):
    if s+i<=n:
        li.append(s+i)
    elif n+s-i-1>=s:
        li.append(n+s-i-1)
# print(li)
# 打印
for i in range(0,n):
    for j in range(1,li[i]+1):
        if j<= abs(i-s+1):
             print(' ',end='')
        else:
            print('*',end='')
    print()

27.完成字符串的逆序以及统计。
设计一个程序,
要求只能输入长度低于31的字符串,否则提示用户重新输入,
打印出字符串长度,使用切片逆序打印出字符串

while True:
    str1=input('请输入字符串(q键退出)')
    if str1=='q':
        break
    elif len(str1)<31:
        print('字符串长度:{},逆序为:{}'.format(len(str1),str1[::-1]))
    else:
        print('请重新输入!')

28.定义函数findall,实现对字符串find方法的进一步封装,要求返回符合要求的所有位置的起始下标,
如字符串"helloworldhellopythonhelloc++hellojava",需要找出里面所有的"hello"的位置,
最后将返回一个元组(0,10,21,29),即将h的下标全部返回出来,而find方法只能返回第一个

#重新定义findall
#方法一
def findall(s,f):
    li = []
    id = 1
    if f in s:
        s=s.replace(f'{f}','@')
        for i in range(len(s)):
            if s[i]=='@':
                if  li==[]:
                    li.append(i)
                else:
                    li.append(i+(len(f)-1)*id)
                    id+=1
        print(tuple(li))
    else:
        print(f'此字符串中没有{f}')
s,f=input("请输入元字符串与要查找的字符(以’,‘隔开):").split(',')
# print(findall(s,f))
findall(s,f)
#方法二
def findall(s,f):
    if f in s:
        li=[]
        while True:
            if li==[]:
                index=s.find(f'{f}')
                li.append(index)
            else:
                index = s.find(f'{f}', index + 1)
                if index == -1:
                    break
                else:
                    li.append(index)
        print(tuple(li))
    else:
        print(f'此字符串中不存在{f}')
s,f=input('请输入字符串(用,隔开):').split(',')
findall(s,f)

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

# 一个不多于5位的正整数,求他是几位数,并打印出各位数字

while True:
    str1=input('请输入一个长度小于5位的正整数数(q键退出):')
    if str1=='q':
        break
    elif len(str1)<=5:
        print(f'它是一个{len(str1)}数,逆序:{str1[::-1]}')
    else:
        print('请重新输入!')

30.题目:打印出杨辉三角形(要求打印出10行如下图)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

# 杨辉三角
n=int(input('请输入行数:'))
li = [1, 1]
for i in range(n):
    if i==0:
        print('1')
    elif i==1:
        print('1 1')
    else:
        li1 = []
        for j in range(len(li)-1):
            li1.append(li[j]+li[j+1])
        li=[1]+li1+[1]
        print(' '.join([str(i) for i in li]))

方法二

def yhs(n):
    print(''.join('1'))
    li1=[1,1]
    print(' '.join(map(str,li1)))     #将列表转换为字符串
    for i in range(2,n):
        li=[]
        for j in range(0,len(li1)-1):
            li.append(li1[j]+li1[j+1])
        li1=[1]+li+[1]
        print(' '.join([str(i) for i in li1]))
yhs(10)
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值