题库补充练习

1.

【问题描述】

以下程序的功能是:统计某个给定范围[L,R]内的所有整数中,数字9出席的次数,比如给定范围[88,99]中9出现12次

【输入形式】

输入两个正整数,前一个小于后一个,空格分隔

【输出形式】

输出一个整数,统计结果

【样例输入】

88 99

【样例输出】

12

代码:

s = input().split()
L, R = int(s[0]), int(s[1])
total = 0
for i in range(L,R+1):
    while i !=0:
        if i % 10 == 9:
            total += 1
        i = (i-i%10)/10
print(total)

2.最大公约数

【问题描述】

以下程序的功能是:输入两个正整数a和b,调用函数gcd求a和b最大公约数

【输入形式】

输入一行,内容是用逗号隔开的2个正整数整数。

【输出形式】

最大公约数

【样例输入】

18,27

【样例输出】

9

代码:

def gcd(x,y):
    n = 0
    if a<b:
        for x in range(1,a+1):
            if a%x==0 and b%x==0:
                if x>n:
                    n=x
    if b<a:
        for x in range(1,b+1):
            if a%x==0 and b%x==0:
                if x>n:
                    n=x
    return n
a,b = eval(input())
print(gcd(a,b))

3.继承

【问题描述】以下代码设计了一个名为Pet的宠物类,该类有两个属性name和age,并有打印名字和年龄的show()成员方法,然后定义了一个Dog类,Dog类是Pet类的子类,有name、age、color三个属性,利用继承的性质,实现了对象相关信息的输出。

【输入形式】

【输出形式】

输出三行,分别是name:具体值,age:具体值,color:具体值

【样例输入】

【样例输出】

name: 旺财

age: 3

color: golden

代码:

class Pet:
    def __init__(self,name,age):
        self.name,self.age = name,age
    def show(self):
        print("name:",self.name,"\nage:",self.age)
#定义子类
class Dog(Pet):
    def __init__(self,name,age,color):
       #调用父类的构造函数对属性name,age赋值
       Pet.__init__(self,name,age)
       self.color = color
    def show(self):
        super().show()
        print("color:",self.color)
myPet = Dog("旺财",3,"golden")
myPet.show()

4.计算期末考试的最低分数

【问题描述】

python期末综合成绩的计分规则为:

1、两次课堂测试每次10分,共20分

2、平时成绩10分

3、期末考试成绩占70%

4、如果期末考试成绩没上40分,则按照期末考试成绩计算总成绩。

请根据录入的两次课堂测试成绩、平时成绩和期末成绩,计算该学生的综合成绩

请该生期末考试至少要得到多少分,才有可能及格?

【输入形式】

输入一行,逗号隔开

第一次课堂测试成绩,第二次课堂测试成绩,平时成绩,期末考试的成绩

【输出形式】

输出两行

第一行为该学生的期末综合成绩,保留两位小数

第二行为该学生期末考试至少要得到多少分,才有可能及格?保留两位小数

【样例输入】

10,10,10,78

【样例输出】

84.60

42.86

代码:

e = input().split(',')
a,b,c,d = int(e[0]),int(e[1]),int(e[2]),int(e[3])
total=a+b+c
x=(60-total)/0.7
if d < 40:
    print('{:.2f}'.format(d))
    print(f'{x:.2f}')
else:
    total1 = total + d*0.7
    print(f'{total1:.2f}')
    print(f'{x:.2f}')

5.坚持的力量

【问题描述】

1951年,毛泽东主席题词“好好学习,天天向上”,成为激励一代一代中国人奋发图强的金典短语。下面我们通过代码算算“天天向上”有多强大的力量。一学期有n天,以第一天的能力值为基数,记为1.0,当好好学习时,能力比前一天提升千分之五,当不认真学习时(躺平)能力下降千分之一。问一学期每天努力和一学期每天躺平放任,一学期下来能力值相差多少?

【输入形式】

输入一学期的天数

【输出形式】

输出向上和躺平的能力值和能力差值,保留2位小数,输出形式采用等式,具体看样例

【样例输入】

148

【样例输出】

2.09 - 0.86 = 1.23

【样例说明】

2.09表示148天好好学习后的能力值,0.86表示躺平后的能力值,1.23是二者的差值,输出均采用保留两位小数的形式输出。

代码:

a = float(input())
xue = 1
tang = 1
for x in range(int(a)):
    xue = xue*1.005
    tang = tang*0.999
print('{:.2f} - {:.2f} = {:.2f}'.format(xue,tang,xue-tang))

6.题库:组合数字

【问题描述】从键盘输入两个整数n和m(要求n<m),编程求出由n到m(不包含m)中的整数组合而成的所有不含重复数字的三位数。若n和m的输入不合法或者没有符合条件的三位数则提示输出“illegal input"。

【输入形式】输入一行,内容为两个以空格分隔的整数,分别表示n和m。

【输出形式】以空格分隔输出所有符合条件的三位数。

【样例输入】1 4

【样例输出】123 132 213 231 312 321

【样例输入】2 4

【样例输出】illegal input

【样例输入】0 3

【样例输出】102 120 201 210

代码:

n,m = map(int,input().split())
if 0<=n<m<=10 and (m-n)>=3 :
    for i in range(n,m):
        for j in range(n,m):
            for k in range(n,m):
                if i!=j and i!=k and j!=k and i!=0:
                    print(i,j,k,sep='',end=' ')
else:
    print('illegal input')

7.成绩排序

【问题描述】

给出班里某门课程的成绩文件test5.csv(utf-8编码),每行为每个学生的名字和他的成绩, 中间用逗号隔开。请你按成绩从高到低对数据排序输出,如果有相同分数则名字字典序小的在前(按名字升序)排序。

【输入形式】

输入来自文件

【输出形式】

把成绩按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。

【样例输入】

文件内容如下时:

Kitty,80

Tom,28

Hanmeimei,90

Joey,92

Tim,28

【样例输出】

Joey 92

Hanmeimei 90

Kitty 80

Tim 28

Tom 28

代码:

with open('test5.csv', 'r', encoding='utf-8') as f:
    data = [line.strip().split(',') for line in f.readlines()]

data_sorted = sorted(data, key=lambda x: (-int(x[1]), x[0]))

for row in data_sorted:
    print(row[0], row[1])

8.福到了

“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。

输入格式:

输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为 @ 或者为空格。

输出格式:

输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le,然后再用输入指定的字符将其输出。

输入样例 1:

$ 9

 @  @@@@@

@@@  @@@

 @   @ @

@@@  @@@

@@@ @@@@@

@@@ @ @ @

@@@ @@@@@

 @  @ @ @

 @  @@@@@

输出样例 1:

$$$$$  $

$ $ $  $

$$$$$ $$$

$ $ $ $$$

$$$$$ $$$

 $$$  $$$

 $ $   $

 $$$  $$$

$$$$$  $

输入样例 2:

& 3

@@@

 @

@@@

输出样例 2:

bu yong dao le

&&&

 &

&&&

代码:

#方法一:
ch,n=input().split()
n = int(n)
s = ''
for x in range(n):
    s += input() + '\n'

res = s[::-1]
if res.strip() == s.strip():
    print('bu yong dao le')
print(res.replace('@',ch))

#方法二:
lst = input().split()
ch,n = lst[0],int(lst[1])
grid = [input() for i in range(n)]
gridT = grid[::-1]
gridRev = [lstT[::-1] for lstT in gridT]
if gridRev == grid: print('bu yong dao le')
gridRR = [[ch if c != ' ' else ' ' for c in lstT]for lstT in gridRev]
print(*([''.join(lstT) for lstT in gridRR]),sep='\n')

9.编写函数计算f(i) = 1/2 + 2/3 + 3/4 + ... + i/(i+1)

【问题描述】

编写函数计算f(i) = 1/2 + 2/3 + 3/4 + ... + i/(i+1)

函数接口定义:

def f(i)

i为正整数,返回结果浮点数。

【样例输入】

5

【样例输出】

3.5500

代码:

def f(i):
    if i==1:
        return 1/2
    r = (i/(i+1))+f(i-1)
    return r
v=int(input())
print("%.4f" % f(v))

10.设计Shape基类及Circle, Rectangle继承类 

【问题描述】

设计一个基类Shape,包括:

名为sName的属性(图形名称);

构造函数应对sName属性进行初始化。

设计Shape的继承类Rectangle, 包括:

长,宽两个属性;

构造函数调用Shape的构造函数,并初始化长,宽两个属性;

getArea()成员函数计算并返回矩形面积。

设计Shape的继承类Circle,包括:

半径属性;

构造函数调用Shape的构造函数,并初始化半径属性;

getArea()成员函数计算并返回圆形面积。

注意:请结合程序以理解题目对类的接口的要求。

【样例输入】

Jupyter

12.1

9.9

Moon

3.3

【样例输出】

shape0

Rect Jupyter,Area: 119.79

Circle Moon,Area: 34.21

代码:

class Shape():
    def __init__(self,sName):
        self.sName = sName

class Rectangle():
    def __init__(self,sName,wide,height):
        self.sName = sName
        self.wide = wide
        self.height = height
    def getArea(self):
        return self.wide*self.height
class Circle():
    def __init__(self,sName,r):
        self.sName = sName
        self.r = r
    def getArea(self):
        return 3.1415926*(self.r)**2

s1 = Shape("shape0")
s = input()  #Name of Rectangle
w = float(input()) #Width of Rect
h = float(input()) #Height of Rect
r1 = Rectangle(s,w,h)
s = input()  #Name of Circle
r = float(input()) #Radius of Circle
c1 = Circle(s,r)

print(s1.sName)
print("Rect %s,Area: %.2f" % (r1.sName,r1.getArea()))
print("Circle %s,Area: %.2f" % (c1.sName,c1.getArea()))

11.类与对象-两点之间距离

【问题描述】

定义Point类实现三维坐标点。定义dist_from方法实现两点之间距离的计算。

【输入形式】输入两行,第一行是第一个点的坐标值,第二行是第二个点的坐标值。坐标值x, y, z之间用空格隔开。

【输出形式】距离

【样例输入】

0 0 0

1 1 1

【样例输出】

1.73205

代码:

import math
class Point():
    def __init__(self,x,y,z):
        self.x = x
        self.y = y
        self.z = z
    
    def dist_from(self,other):
        return math.sqrt((self.x-other.x)**2+(self.y-other.y)**2+(self.z-other.z)**2)

x1, y1, z1 = input().split()
x1 = float(x1)
y1 = float(y1)
z1 = float(z1)
p1 = Point(x1, y1, z1)
x2, y2, z2 = input().split()
x2 = float(x2)
y2 = float(y2)
z2 = float(z2)
p2 = Point(x2, y2, z2)
print("%.2f"%p1.dist_from(p2))

12.百人搬百砖/百钱买百鸡 - 实验9 循环进阶

【问题描述】

百人搬百砖问题是中国古代百钱买百鸡问题的另一种表达形式。

工地搬砖,男人一人搬3块,女人一人搬2块,小孩两人搬1块。n个人搬n块砖,总共有哪些搬法?

请参考伪代码将下述程序补充完整,并上机调试运行。

注意:程序还应确保小孩数可以整数2,即小孩数必须为偶数。

代码:

N = int(input("请输入N:"))

iCount = 0
for men in range(N+1):
    for women in range(N+1):
        for children in range(N+1):
            if children == N-men-women and children%2==0 and men*3+women*2+children/2==N:
                print(f"找到解:men={men},women={women},children={children}")
                iCount += 1
                
print("解的数量:",iCount)

13.题库:打印拐形图案

【问题描述】

打印一个如样例输出所示的拐形图案。

【输入形式】

一个整数n,表示图案的总行,1<=n<20

【输出形式】

一个图案

【样例输入】

6

【样例输出】

代码:

n = eval(input())
#生成每行均为最后一行的一个二维列表
lst = [[chr(ord("A")+j) for j in range(n)] for x in range(n)]

for i in range(n):
    for j in range(i+1,n):
        lst[i][j] = chr(ord("A")+i)
    #打印输出第i行
    print(''.join(lst[i]))

14.设计学生类,使用类对象属性来记录学生对象的数量

【问题描述】

设计一个名为Student的学生类:

使用名为count的类对象属性来记录Student对象的个数;

构造函数中初始化学号及姓名两个属性,并对count属性加1;

析构函数(__del__)中对类对象属性count减1。

说明:请阅读测试样例程序来理解题目对类的接口要求。

【样例输入】

3

【样例输出】

学生数量: 2

Code1 Name1

Code2 Name2

代码:

class Student:
    count = 0
    def __init__(self,code,name):
        self.code = code
        self.name = name
        Student.count += 1
    def __del__(self):
        Student.count -= 1
n = int(input())  #输入学生数量,数量大于1
s = []
for i in range(n):
    s.append(Student("Code"+str(i),"Name"+str(i)))
del s[0]  #删除一个学生,导致count减1
print("Student Count:",Student.count)
for x in s:
    print(x.code,x.name)

15.考拉兹猜想 

【问题描述】

考拉兹猜想(Collatz conjecture)又称奇偶归一猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2。 如此循环,最终都能得到1。编写一个程序,输入一个正整数,打印其考拉兹序列。

【输入形式】

1个>1的正整数

【输出形式】

以逗号分隔的考拉兹序列。

【样例输入】

5

【样例输出】

16,8,4,2,1

代码:

n = int(input())
while True:
    if n%2==1:
        n = n*3+1
        print(int(n),end=',')
    elif n%2==0:
        n /= 2
        if n==1:
            print('1')
            break
        else:
            print(int(n),end=',')

16.打印三角形

【问题描述】

编写一个程序,输入一奇数n(2<n<80),表示最长一行的*号个数,打印如下三角形:

*

***

*****

*******

*********

***********

*************

***************

该三角形为直角三角形,其底边上“*”号个数为n。上图为输入15时的输出。

 【输入形式】

从标准输入读取一个奇数,表示要打印的最长行的*号数。

【输出形式】

 向标准输出打印一个三角形,如上图所示。并且在最后一行末也输出一个回车。

代码:

a = int(input())
for x in range(1,a+1,2):
    print('*'*x)

17.输出下一秒

【问题描述】编写一个程序,输出当前时间的下一秒。

【输入形式】用户在第一行按照小时:分钟:秒的格式输入一个时间。

【输出形式】程序在下一行输出这个时间的下一秒。

【样例输入】23:59:59

【样例输出】0:0:0

【样例说明】用户按照格式输入时间,程序输出此时间的下一秒。

代码:

a = input().split(':')
h = int(a[0])
m = int(a[1])
s = int(a[2])
s = s+1
if s == 60:
    s=0
    m += 1
    if m == 60:
        m=0
        h += 1
        if h == 24:
            h=0
print(h,':',m,':',s,sep='')

18.题库:统计水果消费购买次数和总金额

【问题描述】

小王的最近几天的水果消费清单如下所示(若没有消费记录,输入为"None"),每条记录的格式类似如下,以"None"结束,每条数据是水果名和消费额,空格隔开:

apple 25.0

pear 8.0

apple 5.0

pear 2.0

banana 10.0

orange 30.0

None

题目要求:

1. 输出小王最近购买过哪些水果及其购买次数(整数)和总金额(保留两位小数)。(排序规则:先按购买金额降序,再按购买次数降序,都相同的话按水果名升序)

【样例输入】

apple 25.0

pear 8.0

apple 5.0

pear 2.0

banana 10.0

orange 30.0

None

【样例输出】

apple 2 30.00

orange 1 30.00

pear 2 10.00

banana 1 10.00

【样例说明】

输入为不定行,以"None"结束,每条数据是水果名和消费额,空格隔开

输出为不定行,每行依次为:水果名、购买次数(整数)、总金额(保留两位小数)。

(排序规则:先按购买金额降序,再按购买次数降序,都相同的话按水果名升序)

--------------------------------------------------------------------

从标准输入录入信息,存储到字典CostInfo里,字典结构如下:

{'apple': [2, 0.8], 'pear': [2, 10.0], 'b': [1, 10]} value为一个列表,存储购买次数和总金额

代码:

zong = {}

a = input()
while a!='None':
        f,n = a.split()
        n = float(n)
        if f not in zong:
            zong[f] = [1,n]
        else:
            zong[f][0] += 1
            zong[f][1] += n
        a = input()
zong = sorted(zong.items(),key=lambda x:(-int(x[1][1]),-int(x[1][0]),x[0]))
for i,j in zong:
    print(i,j[0],f'{j[1]:.2f}')

19.题库:天干地支中国年

【问题描述】

干支纪年法是中国历法上自古以来就一直使用的纪年方法。干支是天干和地支的总称。把干支顺序相配正好六十为一周,周而复始,循环更替。公元后年份可以按如下规则转换:按照公元年份-3后除以10,得余数可得对应天干,天干对应余数数字:甲1,乙2,丙3,丁4,戊5,己6,庚7,辛8,壬9,癸0。公元年份-3后除以12,得余数可得对应地支,地支对应余数:子1,丑2,寅3,卯4,辰5,巳6,午7,未8,申9,酉10,戌11,亥0。十二生肖是十二地支的形象化代表,即子(鼠)、丑(牛)、寅(虎)、卯(兔)、辰(龙)、巳(蛇)、午(马)、未(羊)、申(猴)、酉(鸡)、戌(狗)、亥(猪),由地支可以看出属相年。

编程实现,输入一个公元年份,输出干支纪年和属相年

【输入形式】

输入公元年份

【输出形式】

分两行分别输出干支纪年和属相年

【样例输入】

2021

【样例输出】

辛丑年

牛年

【样例说明】

系统中文输出需在程序前加上下列代码:  (作者未用到本方法,读者可尝试)

import io

import sys

sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')

sys.stdin = io.TextIOWrapper(sys.stdin.buffer,encoding='utf-8')

代码:

tian = ['癸','甲','乙','丙','丁','戊','己','庚','辛','壬']
di = ['亥','子','丑','寅','卯','辰','巳','午','未','申','酉','戌']
shengxiao = ['猪','鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗']
nian = input()
nian = int(nian)
t = (nian-3)%10
d = (nian-3)%12
print(tian[t],di[d],'年',sep='')
print(shengxiao[d],'年',sep='')

20.题库:嵌套列表元素求和

【问题描述】

输入一个嵌套列表,嵌套层次不限,求列表元素的和。这个列表的每个元素是整数。

【输入形式】

嵌套列表

【输出形式】

整数

【样例输入】

[1,2,3,[4,5,6,7],8]

【样例输出】

36

代码:

def sumlist(nums):
    n = 0
    for x in nums:
        if type(x) is int:
            n = n + x
        if type(x) == list:
            n = n + sumlist(x)
    return n

nums = eval(input())
sumv = sumlist(nums)
print(sumv)

21.题库:嵌套列表元素加权求和

【问题描述】

输入一个嵌套列表,嵌套层次不超过5层,根据层次,求列表元素的加权和,权是指元素在嵌套列表中的层次。第一层每个元素的权值为:元素值*1,第二层每个元素的权值为:元素值*2,第三层每个元素的权值为:元素值*3, ...,依此类推!

【输入形式】

按照列表的形式输入,每个元素是一个整数

【输出形式】

整数

【样例输入】

[1,2,[3,4,[5,6],7],8]

【样例输出】

72

【样例说明】

元素1,2,8是列表的第一层,所以其权是1。3,4,7 处于列表的第二层,其权是2。5,6处于列表的第三层,其权是3。所以列表元素的加权和为:

(1+2+8)*1+(3+4+7)*2+(5+6)*3=72

代码:

def sumlist(L,m):
    sum=0
    for ch in L:
        if isinstance(ch, int):
            sum += ch * m
    for ch in L:
        if isinstance(ch, list):
             sum += sumlist(ch,m+1)
    return sum

nums = eval(input())
addv = sumlist(nums, 1)
print(addv)

22.题库:找出列表中缺失的数字

【问题描述】

 读入一个长度为n-1的整数列表,这个列表的所有元素都是按照递增顺序排列,且每个数字都是唯一的,每个数字都在范围0~n-1之内。0~n-1范围内的n个数字中有且只有一个数字不在该列表中。请找出这个数字。

【输入形式】

输入一个包含n-1个数字的列表,元素不重复且按升序排列,包括方括号,列表元素逗号分隔。

【输出形式】

输出找到的数字

【样例输入1】

[0,1,3]

【样例输出1】

2

【样例输入2】

[0,1,2,3,4,5]

【样例输出2】

6

【样例说明】

第1个样例输入的列表长度为3,也就是完整的列表应该是4个元素。0~3之间的每个数字只能出现一次,且必须出现一次。经查找缺了数字2。

第2个样例输入的列表长度为6,也就是完整的列表应该是7个元素。0~6之间的每个数字只能出现一次,且必须出现一次。经查找缺了数字6。

代码:

def missNumber(nums):
    b = list(range(len(nums)+1))
    for x in b:
        if x not in nums:
            return x

nums = eval(input())
number = missNumber(nums)
print(number)

23.题库:找出两个列表的相同元素(不使用集合),且去除重复元素。

【问题描述】

已知两个列表,可能包含有相同元素,请找出两个列表的相同元素,并放入新的列表。打印新列表。输出结果中没有重复元素,如果两个列表中没有相同元素则输出[]。

【输入形式】

第一行输入第一个列表,包括方括号,元素之间用逗号分隔

第二行输入第二个列表。

【输出形式】

如果存在相同元素,非降序输出列表元素

如果不存在相同元素则输出[]

【样例输入1】

[1,2,3,4,5]

[2,3,4,5,6]

【样例输出1】

[2, 3, 4, 5]

【样例输入2】

[1,2,3,4,5]

[7,8,9,10,11]
【样例输出1】

[]

代码:

nums1 = eval(input())  # 输入列表
nums2 = eval(input())
nums1.sort()  # 排序
nums2.sort()
arr = []
i = j = 0
while i < len(nums1) and j < len(nums2):  # 相互比较开始
    if nums1[i] < nums2[j]:
        i += 1
    elif nums1[i] > nums2[j]:
        j += 1
    else:
        arr.append(nums1[i])
        i += 1
        j += 1
for x in arr:
    while arr.count(x) > 1:
        arr.remove(x)

print(arr)  # 输出
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值