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 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】