Python练习题五

在这里插入图片描述

每天的练习,成就强大的自己!!!欢迎大家来学习!

一、输出A以内能被B整除的数

读入2个不超过100的非0正整数A和B,然后输出(0,A]中所有能被B整除的数。

输入格式:

输入在一行中给出2个不超过100的非零正整数A和B。

输出格式:

对每一组输入,在一行中输出(0,A]中所有能被B整除的数,数字之间用空格分隔,最后一个数字后面没有空格。 如果没有这样的数,输出“None.

while True:
    try:
        number=list(input().split())
        A=int(number[0])
        B=int(number[1])
        ls= []

        for i in range(1,A+1):
            if i%B==0:
                ls.append(i)
       
        length=len(ls)
        if length==0:
            print("None.")
        else:
            for i in range(0,length):

                if i==length-1:
                    print(ls[i],end="\n")
                else:
                    print(ls[i],end=" ")

    except:
        break

在这里插入图片描述

二、查成绩

从键盘输入一个学生所有课程的成绩,输入格式为”课程名:成绩“,每门课占一行,以空行结束。随后提示”请输入要查询的课程:“,用户从键盘输入课程名,查询并输出该课程的成绩,要求进行异常处理,对不存在的课程进行捕捉处理。

输入格式:

输入学生所有课程的成绩,每门课占一行,格式为”课程名:成绩“,以空行结束 在提示后输入课程名

输出格式:

如果课程存在,直接输出成绩,否则提示”没有该门课程“

dic=dict()
while True:
    s=input()
    if s=='':
        break
    else :
        Division=list(map(str,s.split(':')))  
     
        dic[Division[0]]=Division[1] 
      
numstr=input()
print('请输入要查询的课程:')
print(dic.get(numstr,'没有该门课程')) 

在这里插入图片描述

三、优异生查询(类和对象)

题目: 编程实现查找优异生的功能——用户输入多个学生的成绩,输出总分最高的学生姓名和各科成绩
要求: 设计一个学生类(Student),包括

1)属性:姓名(name),数学成绩(mscore),语文成绩(cscore),英语成绩(escore);

2)方法:

构造方法,来构造每个具体的学生对象
计算总成绩方法getSum(self),返回三个成绩的和
获得优异生姓名,数学成绩,语文成绩,英语成绩的方法getBest(self),返回4个结果内容(优异生姓名,数学成绩,语文成绩,英语成绩)
输入格式:
通过4行输入:

第一行输入多个学生姓名,以空格分隔

第二行输入多个数学成绩,以空格分隔

第三行输入多个语文成绩,以空格分隔

第四行输入多个英语成绩,以空格分隔

注意:学生姓名个数要和成绩个数保持一致

输出格式:

在一行中,输出总分最高的学生及其各科科目成绩,以空格分隔。

class Student:
    name=""
    mscore=0
    cscore=0
    escore=0
    def __init__(self,name):
        self.name=name
    def getSum(self):
        return self.escore+self.cscore+self.mscore
def getBest(self):
    max=self[0].getSum()
    k=0
    for i in range(0,len(self)-1):
        if max<self[i].getSum():
            max=self[i].getSum()
            k=i
    str1=(self[k].name+" "+str(self[k].mscore)+" "+str(self[k].cscore)+" "+str(self[k].escore))
    return str1
name=list(input().split())
stus=[]
mscore=list(map(int,input().split()))
cscore=list(map(int,input().split()))
escore=list(map(int,input().split()))
for i in name:
    stus.append(Student(i))
for j in range(0,len(stus)-1):
    stus[j].mscore=mscore[j]
    stus[j].cscore=cscore[j]
    stus[j].escore=escore[j]
print(getBest(stus))

在这里插入图片描述

四、 新型计算器

题目:设计一个计算器,实现一个三维向量的加法,减法以及向量和标量的乘法和除法运算
提示:
1、定义类名为 VecCal,设计构造函数创建三维向量对象: def init(self, x=0,y=0,z=0) 用x,y,z指代三个维度的值

2、重写加法(+),减法(-),乘法(* )和整除除法(//)运算,实现向量的加减乘除

3、除法运算作异常处理,当输入标量数字是0时,除法结果为 (0,0,0)

加法示例:

def add(self, n): # 加法
result = VecCal() # 定义结果变量,也是一个三维向量,通过构造函数创建
result.X = self.X + n.X
result.Y = self.Y + n.Y
result.Z = self.Z + n.Z
return result # 返回 执行加法运算后的向量结果
输入格式:

第一行输入一个三维向量,逗号分隔,如:1,2,3

第二行输入另一个三维向量,逗号分隔:如:4,5,6

第三行输入一个数字, 如:3

输出格式:

(1, 2, 3) + (4, 5, 6) = (5, 7, 9)

(1, 2, 3) - (4, 5, 6) = (-3, -3, -3)

(1, 2, 3) * 3 = (3, 6, 9)

(1, 2, 3) / 3 = (0, 0, 1)

class VecCal(object):
    def __init__(self, x=0, y=0, z=0):
        self.X = x
        self.Y = y
        self.Z = z

    def __add__(self, n):
        result = VecCal()
        result.X = self.X + n.X
        result.Y = self.Y + n.Y
        result.Z = self.Z + n.Z
        return result

    def __sub__(self, n):
        result = VecCal()
        result.X = self.X - n.X
        result.Y = self.Y - n.Y
        result.Z = self.Z - n.Z
        return result

    def __mul__(self, n):
        result = VecCal()
        result.X = self.X * n
        result.Y = self.Y * n
        result.Z = self.Z * n
        return result

    def __floordiv__(self, n):
        result = VecCal()
        result.X = self.X // n
        result.Y = self.Y // n
        result.Z = self.Z // n
        return result

    def __str__(self):
        return '({0}, {1}, {2})'.format(self.X, self.Y, self.Z)


num1 = VecCal(*map(int, input().split(',')))
num2 = VecCal(*map(int, input().split(',')))
n = int(input())

print(num1, '+', num2, '=', num1 + num2)
print(num1, '-', num2, '=', num1 - num2)
print(num1, '*', n, '=', num1 * n)
if n != 0:
    print(num1, '/', n, '=', num1 // n)
else:
    print(num1, '/', n, '=', '(0, 0, 0)')

在这里插入图片描述

五、图案打印

输入整数n,1<=n<=10,输出n行n列图案。

输入格式:

输入一个整数

输出格式:

输出图案,图案中的每个数所占宽度为4

n = int(input())
for i in range( n ):
    for j in range( n ):
        num = i
        if i > j:
            num = j
        print('%4d'%(num+1),end="")
    print('')

在这里插入图片描述

六、可逆素数

输入两个正整数m和n,且m<n,求[m,n]之间的可逆素数列表。可逆素数:素数的各位数字顺序颠倒后得到的数仍是素数

输入格式:

分行输入m和n

输出格式:

输出可逆素数列表

m=int(input())
n=int(input())
list1=[]
list2=[]
t=0
k=''
if m<n:
    for i in range(m,n+1):
        f=0
        t=0
        for j in range(2,i):
            if i%j==0:
                f=f+1
        if f==0:
            list1.append(i)
    for i in list1:
        t=0
        k=int(str(i)[::-1])
        for j in range(2,k):
            if k%j==0:
                t=t+1
        if t==0:
            list2.append(i)
    if len(list2)==0:
        print('no exit')
    else:
        print(list2)
else:
    ("ERROR!")

在这里插入图片描述

七、查找字符串

在一行上输入两个字符串s和英文字符串t,要求在s中查找t。其中,字符串s,t均不包含空格,且长度均小于80。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入2个长度不超过80的字符串s和t(s和t都不包含空格)。

输出格式:

对于每组测试数据,若在s中找到t,则输出“Found!”,否则输出“not Found!”。引号不必输出。
在这里插入图片描述

八、数字交换

题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
输入格式,

每行输入一个数字

输出格式:

每行输出一个数字

def inp(numbers):
    for i in range(6):
        numbers.append(int(input('输入一个数字:\n')))
p = 0
 
def arr_max(array):
    max = 0
    for i in range(1,len(array) - 1):
        p = i
        if array[p] > array[max] : max = p
    k = max
    array[0],array[k] = array[k],array[0]
def arr_min(array):
    min = 0
    for i in range(1,len(array) - 1):
        p = i
        if array[p] < array[min] : min = p
    l = min
    array[5],array[l] = array[l],array[5]
 
def outp(numbers):
    for i  in range(len(numbers)):
        print (numbers[i])
 
if __name__ == '__main__':
    array = []
    inp(array)        # 输入 6 个数字并放入数组
    arr_max(array)    # 获取最大元素并与第一个元素交换
    arr_min(array)    # 获取最小元素并与最后一个元素交换
    print ('计算结果:')
    outp(array)

在这里插入图片描述

九、数字移动

有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数

if __name__ == '__main__':
    n = int(input('整数 n 为:\n'))
    m = int(input('向后移 m 个位置为:\n'))
 
    def move(array,n,m):
        array_end = array[n - 1]
        for i in range(n - 1,-1,- 1):
            array[i] = array[i - 1]
        array[0] = array_end
        m -= 1
        if m > 0:move(array,n,m)
        
    number = []
    for i in range(n):
        number.append(int(input('输入一个数字:\n')))
    print ('原始列表:',number)
 
    move(number,n,m)
 
    print ('移动之后:',number)

在这里插入图片描述

十、报数

有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

if __name__ == '__main__':
    nmax = 50
    n = int(input('请输入总人数:'))
    num = []
    for i in range(n):
        num.append(i + 1)
 
    i = 0
    k = 0
    m = 0
 
    while m < n - 1:
        if num[i] != 0 : k += 1
        if k == 3:
            num[i] = 0
            k = 0
            m += 1
        i += 1
        if i == n : i = 0
 
    i = 0
    while num[i] == 0: i += 1
    print (num[i])

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45801904/article/details/124356107