Python123作业1(列表)

求平均成绩


描述


输入用空格分隔的两个正整数n和m,表示后面要接收m个人的n门课的成绩的输入。随后的m行,每行输入用空格分隔的n个成绩。题目保证m和n都在(0-100]之间。请分行输出每门课的平均成绩。‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪


输入


第一行输入用空格分隔的两个正整数n和m‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

随后的m行,每行输入用空格分隔的n个成绩。‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪


输出


分行输出每门课的平均成绩


 

代码

复制代码
n, m = input().split()
n, m = int(n),int(m)
ls = []
for i in range(m):
    x = input()
    lt = [float(i) for i in x.split()]
    ls.append(lt)
for i in range(n):
    sum = 0
    for j in range(m):
        sum = sum + ls[j][i]
    a = sum/m
print(a)
复制代码

 

绝对值排序


描述


读入一个列表,按照绝对值从大到小排序,如果绝对值相同,则正数在前面。例如列表[3,-4,2,4],排序后的结果为[4,-4,3,2]
‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪建议使用list1=eval(input())直接读入一个列表。‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪


输入


题目的输入为一行,是一个元素类型都是数值的列表,形如[3,-4,2,4]。‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪


输出‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

输出为一行,是按照绝对值从大到小排序后的列表里的元素,元素之间用一个英文半角逗号分隔,形如4,-4,3,2


 

代码

ls = eval(input())
ls = sorted(ls,key = lambda x:(abs(x),x),reverse = True)
print((',').join(str(x) for x in ls))

 

多用户登录(列表)


描述


模拟用户登录过程,输入账号及密码,验证包括账号是否存在,账号密码是否匹配等情况。‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

账号不存在,输出提示信息“Wrong User”‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

账号密码不匹配,输出“Fail”‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

登录成功输出“Success”‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

本题预设账号与密码对应如下。‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

"aaa"   "123456"

"bbb"   "888888"

"ccc"   "333333"


 

代码

复制代码
code = {'aaa':'123456','bbb':'888888','ccc':'333333'} #定义字典匹配账户密码
counter = input()
key = input()
if counter not in ['aaa','bbb','ccc']: #判断账户是否在字典中
    print('Wrong User')
elif key == code[counter]:
    print('Success')
else:
    print('Fail')
复制代码

 

身份证号升位


描述


第二代居民身份证是依据2003年6月28日第十届全国人大常委会第3次会议通过的《中华人民共和国居民身份证法》实施的。第一代身份证十五位数升为第二代身份证十八位数的一般规则是:‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

第一步,在原十五位数身份证的第六位数后面插入19 (1905年1月1日以后出生)或20(2000.1.1-2004.12.31出生),这样身份证号码即为十七位数;
第二步,按照国家规定的统一公式计算出第十八位数,作为校验码放在第二代身份证的尾号。‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

校验码计算方法:将身份证前十七位数分别乘以不同系数并求和
S = Sum(Ai * Wi)
Ai:表示第i位置上的身份证号码数字值, i = 0, ... , 16 
Wi:表示第i位置上的加权因子,Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
S对11取模得到余数0-10,对应的校验码如下:
余数 Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2

#题目假设所有人均出生于1905年1月1日以后,2005年1月1日以前‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪


输入格式 


输入一个15位身份证号‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪


输出格式


 输出一个18位身份证号


 

 

代码

复制代码
jym = {0:1,1:0,2:'X',3:9,4:8,5:7,6:6,7:5,8:4,9:3,10:2} #定义字典表示身份证最后一位的对应关系
fi = input() #输入字符串
ls = list(fi) #将字符串转换为列表
s = 0 #给和变量s赋初始值0
wi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
if 5<=int(ls[6]+ls[7])<99: #判断是否是20世纪出生的
    ls = ls[0:6]+['1']+['9']+ls[6:]
if 0<=int(ls[6]+ls[7])<=4: #判断是否是21世纪出生的
    ls = ls[0:6]+['2']+['0']+ls[6:]
for i in range(0,17):
    s = s +int(ls[i])*wi[i]
mod = s%11#计算校验码
ls = ls + [str(jym[mod])] #在列表末尾加上校验码
print(('').join(map(lambda x:x,ls))) #输出列表中的每个元素
复制代码

 

分期付款计算器


描述


购买房屋或大宗家电时,很多时候可以分期付款,还款方式分为等额本息和等额本金两种:‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

等额本息(Average Capital Plus Interest:ACPI)还款公式:
    每月还款额=贷款本金*月利率*(1+月利率)**总还款月数/((1+月利率)**总还款月数-1)
等额本金(Average Capital:AC)还款公式:
    每月还款额=贷款本金/总还款月数+(贷款本金-累计已还款本金)*月利率
设计一个程序计算分期付款时每一期的应还款额,还款方式输入错误时,输出“还款方式输入错误”。‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪


输入格式


4行输入:‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

第1行输入一个浮点数,表示贷款本金‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

第2行输入一个整数,表示分期月数‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

第3行输入一个字符串,表示还款方式,限定只能输入"ACPI"或"AC",分别表示等额本息和等额本金‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

第4行输入一个浮点数,表示月利率‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪


输出格式


输出每月还款额,等额本金方式时,输出的数字间用逗号分隔(用round()函数保留2位小数)‪‪‪‪‪‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪

还款方式输入错误时,输出“还款方式输入错误”


 

代码

复制代码
bj = float(input()) #输入本金
mon = int(input()) #输入分期付款的月份数
w = input() #分期付款的方式
l = float(input()) #输入月利率,本金和月利率可以一起输入 bj,l = map(lambda x:x,input().split())
ls = [] #定义一个空列表存储等额本息方式付款的结果
yh = 0 #给已还本金赋初始值0
if w not in ['AC','ACPI']:
    print('还款方式输入错误')#判断还款方式是否输入正确
elif w == 'AC':
    for i in range(mon):
        hk = bj/mon + (bj-yh)*l #每月还款金额计算
        yh = yh + (bj/mon) #每月已还本金计算(这里不要想得太复杂,就是 本金/月份数 )
        hk=round(hk,2) #对每月还款金额保留两位小数
        ls.append(hk)#将还款金额加入结果列表
    print(ls)
else:
    hk = (bj*l*(1+l)**mon)/((1+l)**mon-1) #根据题目计算每月的还款金额(因为每个月的金额都一样,所以不需要循环)
    hk = round(hk,2) #对每月还款金额保留两位小数
    print(hk)
复制代码

 

对Python lambda(匿名函数)的介绍


Calc = lambda n : n**n

Calc 是这个函数的函数名

Lambda是类似与def功能的关键词

n 是参数

n**n 是返回值

匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

 

与其他函数联合使用

map函数


map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

 

li = [1,2,3,4,5,6,7,8,9]
print(list(map(lambda x:x*x,li)))
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce函数


reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(func,[1,2,3]) 等同于 func(func(1,2),3)

 

#接受一个list并利用reduce()求积

from functools import reduce
li = [1,2,3,4,5,6,7,8,9]
print(reduce(lambda x,y:x * y,li))
# 结果=1*2*3*4*5*6*7*8*9 = 362880

filter函数


filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

对于序列中的元素进行筛选,最终获取符合条件的序列

 

# 在一个list中,删掉偶数,只保留奇数

li = [1, 2, 4, 5, 6, 9, 10, 15]
print(list(filter(lambda x:x % 2==1,li)))  # [1, 5, 9, 15]

 

# 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数

li = list(range(1, 200))
print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li)))
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

sorted函数


sorted(iterable, /, *, key=None, reverse=False)

接收一个key函数来实现对可迭代对象进行自定义的排序

可迭代对象:主要与列表,字符串,元组,集合和字典

key:接受一个函数,根据此函数返回的结果,进行排序

reverse:排序方向,默认为从小到大,reverse=True为逆向

# 对列表按照绝对值进行排序
li= [-21, -12, 5, 9, 36]
print(sorted(li, key = lambda x:abs(x)))
# [5, 9, -12, -21, 36]

以上代码仅为本人自己的方法并不唯一

如有错误,欢迎指正。


__EOF__

本文作者柏木カケル
本文链接https://www.cnblogs.com/kakeru-kashihagi/p/14718783.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   柏木カケル  阅读(3043)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示