2023-10-31

Python练习题及答案

1.编写一个程序,找到2000年至3200年(包括在内)中所有可被7整除但不能被5整除的所有数字,得到的数字按逗号分隔,打印在一行上。

Lista =[]

for i in range(2000,3201):

    if(i%7) and (i%5 !=0):

        print(i)

        Lista.append(str(i))

print(','.join(Lista)) #将数组中的元素连接成一行

2.编写一个可以计算给定数阶乘的程序,结果以逗号分隔,打印在一行上。

from functools import reduce

from math import factorial

#Way1:普通for循环

a = int(input('please input a integer:'))

num = 1

if a <0:

    print('负数没有阶乘!')

elif a ==0:

    print('0的阶乘为1!')

else:

    for i in range(1,a+1):

        num *=i

    print(num)

#Way2:使用递归来计算

def num(n):

    if n ==0:

        return 1

    else:

        return n * num(n-1)

print(num(6))

#Way3:reduce函数

#从functools中调用reduce()函数

num = reduce(lambda x,y:x*y,range(1,7))

print(num)

#Way4:factorial()函数

num = factorial(6)

print(num)

3.使用给定的整数n,编写程序生成一个包含(i,ixi)的字典,该字典包含从1到n之间的整数(两者都包含),然后打印字典。假设向程序提供以下输入:8,

则输出为{1:1,2:4,3:9,4:16,5:25,6:36,7:49,8:64}

print(a)

d = dict() #定义一个字典

for i in range(1,a+1):

    d[i] = i*i

print(d)

4.编写一个程序,该程序接受控制台以逗号分隔的数字序列,并生成包含每个数字的列表和元组,假设,向程序提供以下输入:34岁,67岁,55岁,33岁,12日,98年;则输出为:

['34, '67','55','33','12','98'] ('34, '67','55','33','12','98')

import re

#请输入一组数字

a = input('请输入一组数字:') #34岁,67岁,55岁,33岁,12日,98年

List1 = a.split(',')

k = re.findall(r'[0-9]+',a) #findall()需导入re包

Tuple1 = tuple(k)

print(List1)

print(Tuple1)

5.定义一个至少有两个方法的类:以、getString:从控制台输入获取字符串;二、printString:打印大写字母的字符串,并写出简单的测试函数来测试类方法。

class IOString(object):

    # def __int__(self):

    #    self.s = ""

    def getString(self):

        self.s = input('请输入字符串:') #欢迎来学习Python,期待早日成功

    def printString(self):

        print(self.s.upper())

strObj = IOString()

strObj.getString()

strObj.printString()

6.编写一个程序,根据给定的公式计算并打印值:Q=[(2*C*D)/H]的平方根,其中,假设C=50,H=30,D是一个变量,它的值应该以逗号分隔的序列输入到程序中。

例:程序的输入序列为(以逗号分隔):100,150,180;则程序输出为:18,22,24;

import math

C = 50

H = 30

#Q = math.sqrt[(2 * C * D) / H]

Value = []

print('please input numbers:')

items = [x for x in input().split(',')]

for D in items:

    Value.append(str(int(round(math.sqrt(2*C*float(D)/H)))))

print(','.join(Value))

7.编写一个程序,X,Y作为输入,生成一个二维数组,数组的第i行和第j列的元素应该为ixj.

print('请输入两个数字')

input_str = input()

dimensions = [int(x) for x in input_str.split(',')]

rowNum = dimensions[0]

colNUM = dimensions[1]

multilist = [[0 for col in range(colNUM)] for row in range(rowNum)]

for row in range(rowNum):

    for col in range(colNUM):

        multilist[row][col] =row*col

    print(multilist)

8.编写一个程序,以逗号分隔的单词序列作为输入,按照字母顺序对每个单词进行排序,并通过逗号分隔的序列来打印单词。

假设向程序输入:without,hello,bag,world;则输出为:bag,hello,without,world;

print('请输入单词序列:')

# input_str =input()

items = [x for x in input().split(',')]

items.sort()

print(','.join(items))

9.编写一个程序,接收一行序列作为输入,并将句子中的所有字符大写后打印行。

print('请输入字符序列:')

input_str = input()

items = [x for x in input_str.split(',')]

for i in items:

    print(i.upper())

10.编写一个程序,以一系列空格分隔的单词作为输入,并在删除所有重复的单词后,按字母顺序排序后打印这些单词。假设向程序输入:

hello world and practice makes perfect and hello world again,则输出为:again and hello makes perfect practice world.

import numpy as np

# Way1

print('请输入一系列空格分隔的单词序列:')

InputStr = input()

items = [x for x in InputStr.split(' ')]

print(' '.join(sorted(list(set(items))))) #用set删除重复的数据

# Way2 用numpy中的函数unique()

print('请输入一系列空格分隔的单词序列:')

InputStr = input()

items = [x for x in InputStr.split(' ')]

print(' '.join(np.unique(list(items)))) #unique()函数有自动排序功能?

11.编写一个程序,接收一系列以逗号分隔的4位二进制数作为输入,然后检查它们是否可被5整除,可被5整除的数字将以逗号分隔的顺序打印。

from numpy import intp

# 一系列以逗号分隔的4位二进制数

# Way1

Value =[]

print('一系列以逗号分隔的4位二进制数:')

# InputStr = input()

Items = [x for x in input().split(',')]

for i in Items:

    intp= int(i,2)

    if not intp%5:

    #if i%5 == 0:

        Value.append(i)

print(','.join(Value)) #问题出在哪里呢 0100,1011,1000,1010

# Way2

# print(','.join([_ for _ in input('输入一组二制数:').split(',') if int(_,2)%5==0])) #0100,1011,1000,1010

12.编写一个程序,找到1000到3000之间并且所有位数均为偶数的所有数字,比如2000,2002等;获得的数字都以逗号分隔的顺序,打印在一行上。

# Way1

# ListEven = []

# for i in range(1000,3001):

#    s = str(i)

#    if(int(s[0])%2==0) and (int(s[1])%2==0) and (int(s[2])%2==0) and (int(s[3])%2==0):

#        ListEven.append(s)

# print(','.join(ListEven)) #如何实现打印自动换行

# Way2

print([i for i in range(1000, 3001) if all([int(_) % 2 == 0 for _ in str(i)])])

13.问题:编写一个接受句子并计算字母和数字的程序。假设程序输入:Hello world! 123,则输出应该是:字母10 数字3

# Way1

# print('请输入句子:') #Hello world! 123

# s = input()

# judgeCas = {"LETTERS":0, "Digital":0} #定义一个字典

# for c in s:

#    if c.isalpha():

#        judgeCas["LETTERS"]+=1

#    elif c.isdigit():

#        judgeCas["Digital"]+=1

#    else:

#        pass

# print("LETTERS:",  judgeCas["LETTERS"])

# print("Digital:",  judgeCas["Digital"])

# Way2

print('请输入句子:')

s = input()

print('字母的个数为:',sum(1 for _ in s if _.isalpha())) #'_'表示任意元素

print('数字的个数为:',sum(1 for _ in s if _.isdigit())) #'_'表示任意元素

14.问题:编写一个接收句子的程序,并计算大写字母和小写字母的数量。假设为程序提供了以下输入:Hello world!则输出应该是:UPPER CASE 1;LOWER CASE 9

# Way1

# print('请输入句子:')

# s = input()

# judgeCas = {"UPPER CASE":0, "LOWER CASE":0}

# for c in s:

#    if c.isupper():

#        judgeCas["UPPER CASE"]+=1

#    elif c.islower():

#        judgeCas["LOWER CASE"]+=1

#    else:

#        pass

# print("UPPER CASE",  judgeCas["UPPER CASE"])

# print("LOWER CASE",  judgeCas["LOWER CASE"])

# Way2

print('请输入句子:')

s = input()

print('大写字母的个数为:',sum(1 for _ in s if _.isupper())) #'_'表示任意元素

print('小写字母的个数为:',sum(1 for _ in s if _.islower())) #'_'表示任意元素

15.编写一个程序,计算a + aa + aaa + aaaa的值,给定的数字作为a的值。假设为程序提供了以下输入:9;输出应该是:11106

# 1. 对于字符串来说,+ 为直接拼接

# 2. %s的应用

# Way1

# print('请输入一个数字:')

# a = input()

# N1 = int("%s" %a)

# N2 = int("%s%s" %(a,a))

# N3 = int("%s%s%s" %(a,a,a))

# N4 = int("%s%s%s%s" %(a,a,a,a))

# print(N1)

# print(N2)

# print(N3)

# print(N4)

# print(N1+N2+N3+N4)

# Way2

print(eval('a+aa+aaa+aaaa'.replace('a',input('请输入一位数字:')))) #eval()用法

16.使用列表推导输出列表中的每个奇数,该列表由一系列逗号分隔的数字输入。假设程序输入:1,2,3,4,5,6,7,8,9 输出应该是:1,3,5,7,9

# Way1

# ListOddsNum = []

# print('请输入一系列逗号分隔的数字:') #1,2,3,4,5,6,7,8,9

# Nums = input()

# items = [x for x in Nums.split(',')]

# for i in items:

#    if int(i)%2 !=0:

#        ListOddsNum.append(i)

# print(','.join(ListOddsNum)) #1,3,5,7,9

# Way2

print('请输入一系列逗号分隔的数字:') #1,2,3,4,5,6,7,8,9

Values = input()

numbers = [x for x in Values.split(",") if int(x)%2!=0]

print(",".join(numbers))

17.编写一个程序,根据控制台输入的事务日志计算银行帐户的净金额。事务日志格式如下所示:(没懂!!!!!!)

D 100 W 200

D表示存款,而W表示提款。

假设向程序依次输入:D 300;D 300;W 200;D 100;

则输出应该为:500

D = 100 #D表示存款

W = 200 #W表示取款

list = []

print('请输入:')

while True:

    x = input()

    if len(x) == 0:

        break

    list.append(x)

balance = 0

for item in list:

    if 'D' in item:

        balance +=int(item.strip('D'))

    if 'W' in item:

        balance -= int(item.strip('W'))

print(balance)

18.网站要求用户输入用户名和密码进行注册。编写程序以检查用户输入的密码有效性。

以下是检查密码的标准:

1 [a-z]之间至少有1个字母

2 [0-9]之间至少有1个数字

3 [A-Z]之间至少有一个字母

4 [$#@]中至少有1个字符

5 最短交易密码长度:6

6 交易密码的最大长度:12

您的程序接收一系列逗号分隔的密码,并将根据上述标准进行检查,将打印符合条件的密码,每个密码用逗号分隔。

例:如果以下密码作为程序的输入:ABd1234@1,a F1#,2w3E*,2We3345

则程序的输出应该是:ABd1234@1

# Way1

value = []

print("请输入:") #ABd1234@1,a F1#,2w3E*,2We3345

items = [x for x in input().split(',')]

for i in items:

    if len(i)<6 or len(i)>12:

        continue

    else:

        pass

    if not re.search("[a-z]",i):

        continue

    elif not re.search("[0-9]",i):

        continue

    elif not re.search("[A-Z]",i):

        continue

    elif not re.search("[$#@]",i):

        continue

    elif re.search("\s",i):

        continue

    else:

        pass

    value.append(i)

print(",".join(value)) #ABd1234@1

# Way2

pas =['[a-z]','[0-9]','[A-Z]','[$#@]']

password = ['ABd1234@1','a F1#','2w3E*','2We3345']

print([s for  s in password if 6<=len(s)<=12 and all([re.findall(p,s) for p in pas])])

19.问题:您需要编写一个程序,按升序对(名称,年龄,高度)元组进行排序,其中name是字符串,age和height是数字, 元组由控制台输入。

排序标准是:

1:根据名称排序;

2:然后根据年龄排序;

3:然后按分数排序。

优先级是name > age > 得分。

如果给出以下元组作为程序的输入:Tom,19,80;John,20,90;Jony,17,91;Jony,17,93;Json,21,85

然后,程序的输出应该是:[('John','20','90'),('Jony','17','91'),('Jony','17','93'),('Json','21 ','85'),('Tom','19','80')]

from operator import itemgetter

l = []

print("请输入元组:")

while True:

    x = input() #Tom,19,80,John,20,90,Jony,17,91,Joy,17,93,Json,21,85

    if not x:

        break

    l.append(tuple(x.split(",")))

# print(sorted(l, key=itemgetter(0,1,2)))

print(sorted(l,key=itemgetter(0)))

# print()

20.问题:使用生成器定义一个类,该生成器可以在给定范围0和n之间迭代可被7整除的数字。

提示:考虑使用yield.

def InputNums(n):

    i = 0

    while i<n:

        j=i

        i=i+1

        if j%7 ==0:

            yield j

for i in InputNums(100):

    print(i)

21.问题:编写一个程序,来计算每个单词出现的频率,按字母顺序对键进行排序后输出。

假设程序输入:

New to Python or choosing between Python 2 and Python 3? Read Python 2 or Python 3.

则输出应该是:

2:2

3.:1

...

# Way1

freq = {}

print('请输入单词:')

InputStr = input().split(' ')

for word in InputStr:

    freq[word] = freq.get(word,0)+1

words = sorted((freq.keys()))

for w in words:

    print("%s:%d"%(w,freq[w]))

# Way2

x = {}

b = input('enter:')

a = b.split(' ')

c = set(a)

for i in c:

    x[i] = b.count(i)

for k in sorted(x):

    print(k,':',x[k])

# Way3 根据字典的键值进行排序,

# 利用key排序

# d = {'d1':2,'d2':4,'d4':1,'d3':3}

# for k in sorted(d):

#    print(k,':',d[k])

# 利用value排序:__getitem__

# d = {'d1':2,'d2':4,'d4':1,'d3':3}

# for k in sorted(d,key=d.__getitem__):

#    print(k,':',d[k])

22.问题:写一个可以计算数字平方值的方法。

提示:使用**运算符

import math

import numpy as np

# Way1

# def CalQuarter(n): #计算数字平方的方法

#    return n**2

# print(CalQuarter(9))

# Way2 使用函数求平方

# num =5

# square = pow(num,2)

# print(square)

# Way3 使用math模块求平方

num =5

square = math.pow(num,2)

print(square)

# Way4 使用numpy模块求平方

num =5

square = np.square(num)

print(square)

23.问题:Python中有许多内置函数,如果不知道如何使用它,可以在线阅读文档或查找一些书籍。请编写一个程序来打印一些Python内置函数文档,例如abs(),int()

提示:内置文档方法是doc:

print(abs.__doc__)

print(int.__doc__)

print(input.__doc__)

24.问题:定义一个类,它具有类似参数并具有相同的实例参数。

提示:定义一个实例参数,需要在init方法中添加它。您可以使用构造参数初始化对象,也可以稍后设置该值。

from operator import itemgetter,attrgetter

class Student:

    name = '小明'

    age = '年龄'

    stuno = "学号"

    def __int__(self,name,age,stuno):

        self.name = name

        self.age = age

        self.stuno = stuno

claire = Student()

claire.name = "Claire"

claire.age = 18

claire.stuno = "N0231019"

print("%s name is %s" %(Student.name,claire.name),'\n'

    "%s age is %s" %(Student.age,claire.age),'\n'

    "%s stuno is %s" %(Student.stuno,claire.stuno),'\n' #可再优化看看

)

print(f'姓名:{claire.name}\n年龄:{claire.age}\n学号:{claire.stuno}\n')

# sufei = Student()

# sufei.name = "Sufei"

# print("%s name is %s" %(Student.name,sufei.name))

25.问题:定义一个可以计算两个数之和的函数。

提示:定义一个带有两个数字作为参数的函数。可以在函数中计算和并返回值。

def SumofTwoPara(a,b):

    return a+b

print(SumofTwoPara(3,6))

# if __name__ =='__main__':

#    print(SumofTwoPara(9,6))

26.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

for i in range(100,1000): #“水仙花数”是指一个三位数,其各位数字立方和等于该数本身

    a = i%10

    b = i//10%10

    c = i//100

    if(a*a*a+b*b*b+c*c*c == 100*c+10*b+a):

        print(i,end='\n')

27.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

# Way1

# print('请输入数字:')

# score = (int)(input()) #score = int(input('input score:'))

# if score>=90:

#    print('Grade is A')

# elif 60<= score <=89:

#    print('Grade is B')

# elif  score <60:

#    print('Grade is C')

# else:

#    print('不在评判范围!')

# Way2

score = int(input('input score:'))

if score>=90:

    Grade = 'A'

elif 60<= score <=89:

    Grade = 'B'

elif  score <60:

    Grade = 'C'

else:

    print('不在评判范围!')

print('%d belongs to %s' %(score,Grade))

28.定义一个可以将整数转换为字符串并在控制台中打印的函数。

提示:使用str()将数字转换为字符串。

def tt(n):

    print(str(n))

tt(3)

29.输入一串数字,以逗号为分隔符,将其转换成列表和元组输入:34,67,55,33,12,98

输出: ['34', '67', '55', '33', '12', '98'] ('34', '67', '55', '33', '12', '98')

value = input('请输入一串数字:')

a = value.split(',')

print(a)

b = tuple(a) #直接用函数tuple()

print(b)

30.字符串、列表、元组、字典每个常用的5个方法?

字符串:repleace,strip,split,reverse,upper,lower,join.....

列表:append,pop,insert,remove,sort,count,index.....

元组:index,count,__len__(),__dir__()

字典:get,keys,values,pop,popitems,clear,update,items....

31.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

if(value % n==0 and n !=90 and n!=1)

print(n)

32.打印各种三角形和矩形

# for i in range (1,6): #打印5行左下角实心三角形

#    for j in range(1,i+1):

#        print('*',end=' ')

#    print('\n')

# n = int(input()) #打印左下角实心三角形

# for i in range(1,n+1):

#    for j in range(1,i+1):

#        print("*", end=" ")

#    print()

# n = int(input()) #打印左下空心三角形

# for i in range(1,n+1):

#    for j in range(1,i+1):

#        if(i==n or i==j or j==1):

#            print("*",end=" ")

#        else:

#            print(" ",end=" ")

#    print()

# n = int(input()) #打印实心矩形

# for i in range(1,n+1):

#    for j in range(1,n+1):

#        print("*",end=" ")

#    print()

# n = int(input()) #打印空心矩形

# for i in range(1,n+1):

#    for j in range(1,n+1):

#        if(i==1 or j==1 or i==n or j==n):

#            print("*",end=" ")

#        else:

#            print(" ",end=" ")

#    print()

# n= int(input()) #打印右下角实心三角形

# for i in range(n+1):

#    for j in range(0,(n+1)-i):

#        print(" ", end=" ")

#    for  k in range((n+1)-i,n+1):

#        print("*",end=" ")

#    print("")

# n = int(input()) #打印右下角空心三角形

# for i in range(1,n+1):

#    for j in range(1,n+1):

#        if(i==n or j==n or (i+j-1==n)):

#            print("*",end=" ")

#        else:

#            print(" ",end=" ")

#    print()

#打印右上角实心三角形

# n = int(input())

# for i in range(n):

#    for j in range(0,i):

#        print(" ",end=" ")

#    for k in range(i,n):

#        print("*",end=" ")

#    print(" ")

# #打印右上角空心三角形  ?????

# n = int(input())

# for i in range(1,n+1):

#    for j in range(1,n+1):

#        if(i==1 or j ==n or i==j):

#            print("*",end=" ")

#        else:

#            print("",end=" ")

#    print(" ")

# #打印左上角实心三角形

# n = int(input())

# for i in range(0,n+1):

#    for j in range(0,n-i):

#        print("*",end=" ")

#    print()

#打印左上角空心三角形

# n = int(input())

# for i in range(0,n+1):

#    for j in range(0,n-i):

#        if(i==0 or j==0 or i+j+1==n):

#            print("*",end=" ")

#        else:

#            print(" ",end=" ")

#    print()

#打印正等边三角形

# n = int(input())

# for i in range(n+1):

#    for j in range(0,(n+1)-i):

#        print(end=" ")

#    for j in range((n+1)-i,(n+1)):

#        print("*",end=" ")

#    print("")

#打印倒等边三角形

# n = int(input())

# for i in range(n):

#    for j in range(0,i):

#        print(end=" ")

#    for j in range(i,n):

#        print("*",end=" ")

#    print(" ")

#打印正等边空心三角形

# n = int(input())

# for i in range(1,n*2):

#    if i==n:

#        print("*")

#        break

#    else:

#        print(" ",end="")

# for j in range(n-1,1,-1):

#    for i in range(1,n*2):

#        if i==j:

#            print("*",end="")

#        elif i==n*2-j:

#            print("*")

#            break

#        else:

#            print(" ",end="")

# for i in range(1,n*2):

#    if i%2 !=0:

#        print("*",end="")

#    else:

#        print(" ",end="")

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • # 开发人员: hanhan丶 # 开发时间: 2020/10/21 14:37 ################...
    hanhan丶阅读 2,990评论 0 1
  • 目录 实例001:数字组合 实例002:“个税计算” 实例003:完全平方数 实例004:这天第几天 实例005:...
    Thomas_梁阅读 12,388评论 0 1
  • 8月22日-----字符串相关 2-3 个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消...
    future_d180阅读 4,554评论 0 1
  • #!/usr/bin/env python # -*- coding: utf-8 -*- # =========...
    Thomas_梁阅读 5,344评论 0 0
  • 一、set集合【了解】 1.概述 和数学上的集合基本是一样的,特点:不允许有重复元素,可以进行交集,并集,差集的运...
    墨雨love薏雪阅读 3,959评论 0 0

友情链接更多精彩内容