Python PTA期末

时间:2024-02-15 13:51:30

6-1 接收n个数字,求这些参数之和 (3 分)

接收n个数字,求这些参数数字的和。

def sum_func(*args):
    s=sum(args)
    return s

6-2 本题是一个demo函数,通过本程序体会默认值参数的特点。 (3 分)

本题是一个demo函数,通过本程序体会默认值参数的特点。

def demo(a,b,c=5):
    print(a,b,c)
    return

6-3 本题是一个demo函数,通过本程序体会关键参数的特点。

本题是一个demo函数,通过本程序体会关键参数的特点

def demo(a,b,c):
    print("{} {} {}".format(a,b,c))

 

6-4 本题是一个demo函数,通过本程序体会位置参数的特点。 (3 分)

 本题是一个demo函数,通过本程序体会位置参数的特点。
def demo(a,b,c):
    print("{} {} {}".format(a,b,c))
    return

6-5 计算工资 (3 分)

编写函数pay(),带两个输入参数:小时工资和上周员工工作了的小时数。函数计算并返回员工的工资。加班工资的计算方法如下:大于40小时但小于或等于60小时按平时小时薪酬的1.5倍给薪;大于60小时则按平时小时薪酬的2倍给薪。

def pay(salaryHour, hours):
    if 40<hours<=60:
        p=salaryHour*(1.5*(hours-40)+40)
    if hours>60:
        p=salaryHour*(2*(hours-60)+40+1.5*20)
    if hours<40:
        p=salaryHour*hours
    return p

  

7-1 计算M和N的多个结果 (5 分)

用户输入两个数M和N(用两个input语句输入),其中N是整数,计算M和N的5种数学运算结果,并依次输出,结果间用空格分隔。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

5种数学运算分别是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

M与N的和、M与N的乘积、M的N次幂、M除N的余数、M和N中较大的值

x=eval(input())
y=eval(input())
a=x+y
b=x*y
c=x**y
d=x%y
e=max(x,y)
print(a,b,c,d,e)

  

7-2 给顾客找零钱的方案 (5 分)

 

这是一个编程题。题目:本题目要求掌握数值运算中的整数除法和求余数运算,并掌握输入输出的方法。 商店需要找钱给顾客,现在有足够的张数,面值分别是50元5元和1元。输入一个整数金额值给出找钱方案,假设人民币足够多,且优先使用面额大的钱币。

s=eval(input())
m50=s//50
m5=s//50%5
m1=s%50%5
print("50元面额需要的张数:{}",format(m50))
print("5元面额需要的张数:{}",format(m5))
print("1元面额需要的张数:{}",format(m1))

  

7-3 整数的二进制相加 (5 分)

 

输入两个整数,大小在[0,63]之间。求它们的二进制和,二进制用8位表示。

x,y=eval(input()),eval(input())
print("{:0>8b}".format(x))
print("{:0>8b}".format(y))
print("{:->8}".format("-"))
print("{:0>8b}".format(x+y))

  

7-4 计算长方形的周长和面积 (5 分)

 

输入长方形的长和宽,要求计算长方形的周长和面积。

s=input().split()
a,b=eval(s[0]),eval(s[1])
print("C = {}".format(2*(a+b)))
print("S = {}".format(a*b))

  

7-5 人民币与美元汇率兑换程序 (5 分)

 

按照温度转换的设计思路,设计人民币与美元汇率兑换程序,按照1美元=7人民币的汇率 编写一个双向兑换程序

 

s=input()
if s[0]==\'$\':
    c=eval(s[1:])
    print("¥{:.2f}".format(7*c))
elif s[0]==\'¥\':
    f=eval(s[1:])
    print("${:.2f}".format(f/7))
else:
    print("输入格式错误")

  

7-6 虫子吃苹果后,还剩下几个完整苹果 (5 分)

你买了一箱n个苹果,很不幸的是买来的时候,箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

s=input().split(",")
n,x,y=eval(s[0]),eval(s[1]),eval(s[2])
if y%x==0:
    print(n-y//x)
else:
    print(n-y//x-1)

 

7-7 输出字符-单分支 (5 分)

 

输入一个字符,如果是小写字母,转换为其大写形式,其余字符不变。

s=input()
if s.islower():
    print(s.capitalize())
if s.isupper():
    print(s)
if s.isdigit():
    print(s)

  

 

7-8 数据比较 (5 分)

 

实现一个程序,用户输入四个数值(整数或浮点数)。先计算前三个数的平均值,然后把平均值与第四个数进行比较。如果相等,则程序在屏幕上输出“Equal”,如果平均值大于第四个数则输出“Larger”,否则输出“Smaller”。

a=eval(input())
b=eval(input())
c=eval(input())
d=eval(input())
x=(a+b+c)/3
if x==d:
    print("Equal")
elif x>d:
    print("Larger")
else:
    print("Smaller")

 

7-9 统计输入字符串中的单词个数及单词的平均长度(高教社,《Python编程基础及应用》习题7-7) (5 分)

 

编写一个程序,接受用户输入的一行英文句子(假设该句子仅由英文单词及空格构成,不包括逗号等符号),统计并输出该行句子包含的单词个数及单词的平均长度

 

s=input().split()
t=len(s)
m=0
for i in range(t):
    m=m+len(s[i])
print("{},{:.2f}".format(t,m/t))

 

7-10 对于给定的正整数N,求它的位数及其各位数字之和。 (5 分)

 

给定的正整数N,求它的位数及其各位数字之和。

s=input()
a=len(s)
b=0
for i in range(a):
    b=b+eval(s[i])
print(a,b)

 

7-11 jmu-python-统计成绩 (5 分)

 

输入一批学生成绩,计算平均成绩,并统计不及格学生人数。

sum=0
n=0
m=0
q=0
while n>=0:
    s=eval(input())
    sum=sum+s
    n=s
    m=m+1
    if s<60 and s>0:
        q=q+1
if m>1:
    av=(sum-n)/(m-1)
    print("平均分={:.2f},不及格人数={}".format(av,q))
else:
    print("没有学生")

 

7-12 折纸问题 (5 分)

 

一张纸厚0.2mm, 问至少对折多少次后,纸的厚度超过珠穆朗玛峰(8848m)

 

 

s=0.2/1000
i=0
while s<=8848:
    s=s*2
    i=i+1
print("折叠次数={}".format(i))
print("折叠后厚度={:.2f}".format(s))

 

7-13 jmu-python-素数 (5 分)

 

输入一个数,判断其是否素数。素数是大于1的自然数中,除了1和它本身以外不再有其他因数。

 

 

s=eval(input())
if s>1:
    for i in range(2,s):
        if s%i==0:
            print("{} is not prime".format(s))
            break
    else:
        print("{} is prime".format(s))
else:
    print("{} is not prime".format(s))

 

7-14 求1-n的奇数和 (6 分)

 

本题目要求读入一个整数n,计算[1,n]之间奇数和。例如,输入9,计算1+3+5+7+9的和

s=0
n=int(input())
if n%2==0:
    n=n-1
    while n>0:
        s=s+n
        n=n-2
else:
    while n>0:
        s=s+n
        n=n-2
print(s)

 

7-15 输出不重复的字符 (5 分)

 

输入一个字符串,把最左边的10个不重复的字符(大小写算不同字符)挑选出来。 如不重复的字符不到10个,则按实际数目输出。

 

s=input()
t=[]
q=""
for i in range(len(s)):
    t.append(s[i])
m=list(set(s))
m.sort(key=t.index)
for i in range(len(m)):
    q=q+m[i]
print(q[:10])

  

7-16 淘淘不喜欢3、6、9 (5 分)

 

淘淘不喜欢数字3、6、9,在数数时,从1开始数,带有这三个数字的都会跳过。如:1, 2, 4, 5, 7, 8, 10, 11, 12, 14, 15, 17, 18, 20, 21, 22, 24, 25, 27, 28, 40,…… 输入一个n,求淘淘数到n时,她所数的所有数之和是多少?若n包含3、6、9,则显示,淘淘不会数到这个数。

 

s=input()
a=0
if set(s)&{\'3\',\'6\',\'9\'}!=set():
    print("淘淘不会数{}".format(s))
else:
    for i in range(eval(s)+1):
        if set(str(i))&{\'3\',\'6\',\'9\'}==set():
            a=a+i
    print(a)

 

7-17 列表最值 (5 分)

 

本题目要求读入一个由任意整数组成的列表,输出所有元素中的最大值、最小值和平均值,要求平均值保留2位小数。

 

n=eval(input())
sum=0
for i in range(len(n)):
    sum=sum+n[i]
a=sum/len(n)
b=max(n)
c=min(n)
print("max = {}, min = {}, avg = {:.2f}".format(b,c,a))

 

7-18 调整菜单 (5 分)

 

本题目要求在1行内以逗号间隔输入五菜一汤,菜单中有一个菜为“水煮肉片”,利用append和remove方法增加一个“东坡肉”,去掉一个“水煮肉片”,并输出修改后的菜单。

n=input().split(",")
n.remove("水煮肉片")
n.append("东坡肉")
print(n)

  

 

7-19 求出歌手的得分 (5 分)

 

输入一个正整数n (n>4),再输入n个实数,求出歌手的得分(保留2位小数)。设一歌唱评奖晚会上有n(n>4)个评委为歌手打分.评分规则:每个评委依次打分,再去掉2个最高分和2个最低分,计算余下的分数平均值为歌手的得分.

n=int(input())
lo=[int(n) for n in input().split()]
lo.sort()
for i in range(0,4):
    num1=lo.pop(-1)
    lo.reverse()
sum=0
for j in range(len(lo)):
    sum+=lo[j]
li=sum/len(lo)
print("aver={:.2f}".format(li))

7-20 汉字表示的大写数字金额 (5 分)

 

输入一个整数金额,输出汉字表示的大写金额。假设输入的金额数为正整数,且最大为12位数字。

from decimal import Decimal


def num2money_format(change_number):
    """
    .转换数字为大写货币格式( format_word.__len__() - 3 + 2位小数 )
    change_number 支持 float, int, long, string
    """
    format_word = ["圆",
                   "拾", "佰", "仟", "万",
                   "拾", "佰", "仟", "亿",
                   "拾", "佰", "仟", "万",
                   "拾", "佰", "仟"]

    format_word_decimal = [\'分\', \'角\']

    format_num = {\'0\': "零", \'1\': "壹", \'2\': "贰", \'3\': "叁", \'4\': "肆", \'5\': "伍", \'6\': "陆", \'7\': "柒", \'8\': "捌", \'9\': "玖"}

    res = []  # 存放转换结果

    if \'.\' not in change_number:
        # 输入的数字没有\'.\',为整元,没有角和分
        k = len(change_number) - 1
        for i in change_number:
            res.append(format_num[i])
            res.append(format_word[k])
            k = k - 1

    elif \'.\' in change_number:
        float_2_change_num = Decimal(float(change_number)).quantize(Decimal("0.00"))
        # 如果输入的字符串有“.”,则将其转换为浮点数后,四舍五入取两位小数
        # print(float_2_change_num)
        # print(type(float_2_change_num))

        depart = str(float_2_change_num).split(\'.\')
        # 将四舍五入得到的浮点数整数部分和小数部分拆开,实现操作为:先将浮点数转为字符串类型,再以“.”为分隔符分开
        # print(depart)

        int_part = depart[0]  # 整数部分
        # print(int_part)

        decimal_part = depart[1]  # 小数部分
        # print(decimal_part)

        k = len(int_part) - 1
        for i in int_part:  # 整数部分转换
            res.append(format_num[i])
            res.append(format_word[k])
            k = k - 1

        m = len(decimal_part) - 1
        for i in decimal_part:  # 小数部分转换
            res.append(format_num[i])
            res.append(format_word_decimal[m])
            m = m - 1

    return \'\'.join(res)  # 返回结果


your_money = input()
result = num2money_format(your_money)
print(result)

  

7-21 分班统计最喜欢的节目 (5 分)

 

学校举办的了迎新晚会,1班,2班两个新生班各自统计好班里同学最喜欢的节目。节目编号由一个大写字母代表。统计结果分别已经存放到两个字典中。字典元素的键是节目编号,元素的值是相应节目获得的票数,没有人喜欢的节目不用记录。如:字典{\'Q\':10,\'A\':22,\'X\':28} 表示,喜欢Q节目的有10位同学,喜欢A节目的有22位同学,喜欢X节目的有28位同学。输入两个班级的统计结果。将合并后的统计结果按节目编号的字母顺序打印出来。(注意,如果1班有10个同学喜欢Q节目,2班有15个同学喜欢Q节目,则合并后,有25个同学喜欢Q节目)

 

a=eval(input())
b=eval(input())
s=[]
for i in a :
    for j in b :
        if i==j : a[i]+=b[j]
        if i == j: s.append(j)
for k in range(0,len(s)) :
    del b[s[k]]
a.update(b)
c=sorted(a.items(), key=lambda d:d[0])
lengh=len(dict(c))
x=list(dict(c).keys())
y=list(dict(c).values())
for i in range(lengh):
    print("{}:{}".format(x[i],y[i]))

 

7-24 字典的应用-找出出现次数最多的字符串(高教社,《Python编程基础及应用》习题7-6) (5 分)

 

编写一个程序,从键盘读取未指定个数的字符串,一行一个,以字符串"q"为输入结束标志("q"不列入统计范围)。使用字典找出其中出现次数最多的字符串,打印该字符串及其出现次数。
注意:本题的测试用例中将保证只有一个字符串出现次数最多

# 从键盘读取未指定个数的字符串,一行一个,以字符串"q"为输入结束标志
# 使用字典找出其中出现次数最多的字符串,打印该字符串及其出现次数。
a=input()
b=[]
b.append(a)
while(a !="q"):
    a=input()
    b.append(a)
b.pop()
#print(b)
c={}
for i in b:
    if i in c:
        c[i]=c[i]+1
    else:
        c[i]=1

#print(c)
d=list(c.items())
d.sort(key=lambda x:x[1],reverse=True)
m,n=d[0]
print("{} {}".format(m,n))
# 输出字典c的各个项
# for n,m in c.items():
#     print(n,m)

 

7-25 输入三角形三边长,求三角形面积(高教社,《Python编程基础及应用》习题3-8) (5 分)

 

编程序实现功能:输入三角形的三条边边长,求三角形面积,其中面积计算使用用户自定义函数实现。 输出的面积保留两位小数。

 

 

def square(a,b,c):
    p=(a+b+c)/2
    area=sqrt(p*(p-a)*(p-b)*(p-c))
    return area
from math import * 
x,y,z=eval(input()),eval(input()),eval(input())
if x+y>z and x+z>y and z+y>x:
    print("{:.2f}".format(square(x,y,z)))
else:
    print("数据错误")

  

7-26 最短跑道长度(高教社,《Python编程基础及应用》习题3-12 (5 分)

 

假设某飞机的加速度是a,起飞的速度是v,下述公式可以计算出该飞机起飞所需的最短跑道长度: L = v2/(2a)。编写一个程序,提示用户输入起飞速度v(m/s)和加速度a(m/s2),计算飞机起飞的最短跑道长度,输出时保留2位小数。计算过程宜封装成一个函数,该函数接受参数v和a,返回计算所得的L。

  

def paodao(v,a):
    l=(v*v)/(2*a)
    return l
v,a=eval(input()),eval(input())
print("最短跑道长度为:{:.2f}".format(paodao(v,a)))

 

7-27 真素数 (5 分)

 

(1)定义判断x是否为素数的函数prime(x) (2)输入两个大于1的整数A和B,且A<B,输出[A,B]范围内所有真素数的列表。 真素数的定义为:自身为素数,且自身各位数之和仍为素数。例如,11为素数,1+1=2也为素数,所以11为真素数。

def prime(x):
    for i in range(2,x):
        if x%i==0:
            return False
            break
    else:
        return True
a,b=eval(input()),eval(input())
list=[]
for q in range(a,b+1):
    sum=0
    c=str(q)
    for j in range(len(c)):
        sum=sum+eval(c[j])
    if prime(q) and prime(sum):
        list.append(q)
print(list)