#题目15:names=['Tom','Billy','Jefferson','Andrew','Wesley',
# 'Steven','Joe','Alice','Jill','Ana','Wendy','Jennifer',
# 'Sherry','Eva']
# 找出上述名字中长度大于4的名字,
# 并且长度小于6的元素,
# 并姜剩下的转换成全是大写字母的列表
# list1=[i for i in range(1,101)]
# names=['Tom','Billy','Jefferson','Andrew','Wesley','Steven','Joe','Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva']
# new_names=[name.upper() for name in names if len(name)>4 and len(name)<6]
# print(new_names)
#
# #题目16: 对列表中为偶数的元素进行立方运算 a=[1,2,3,4,5,6,7,8,9,10]
# a=[1,2,3,4,5,6,7,8,9,10]
# b=[i**3 for i in a if i%2==0]
# print(b)
#
# #题目19 有四个数字: 1,2,3,4 能组成多少个互不相同且无重复数字的三位数? 各是多少?
# nums=[i*100+j*10+k
# for i in range(1,5)
# for j in range(1,5)
# for k in range(1,5)
# if i!=j!=k and i!=k]
# print(nums)
# print(len(nums))
#函数
# 可重复使用,单一或者关联功能的代码段。
def func1(cc): #cc 为形参
print(cc)
for i in range(1,5):
func1(str(i)) #str(i) 为实参
#函数参数分类
#必备参数,默认参数,不定长参数
def func2(xx,yy,zz=3):
print(xx,yy,zz)
func2('2222','3333')
func2('222','3333','4444')
func2(xx='aaa',yy='ddd',zz='dede')
func2(yy='aaa',xx='bbb',zz='732')
#不定长参数
def func3(x,y,z,*a):
print(x,y,z,a) #匿名不定长参数 必然接收元组
func3(1,2,3,4)
print('-'*100)
#建议参数定义方式
#必备参数->匿名不定长参数 -> 默认参数 ->匿名不定长参数
def func4(x,y,*a,z=3,**b):
print(x)
print(y)
print(z) #默认参数,不给新的值,就会使用默认值
print(a) #匿名不定长参数 必然接收元组
print(b)
func4(1,2,333,4,5,6,7,8,z='a',bbb='b')
print(1,2,3,4,sep='+') #防止'+'当做普通参数被调用。
#函数2 全局、局部作用域
# b=1
# def func1():
# b=2
# print(b)
# def func2():
# b=3
# print(b)
# def func3():
# c=4,5,6,7,8 #返回多个值,以元组形式接收。
# return c
# def func4(x):
# print(x)
# return x
# def func5(x):
# global b
# b=x
# print(x)
# return x
# print(b)
# func1()
# func2()
# print(func3())
# func4('----------------')
# print(b)
# func5(999)
# print(b)
# print('-'*100)
# def s(x):
# r=1/sum(range(1,x+1))
# list1.append(r)
# if __name__=='__main__':
# n=int(input('请输入项数:'))
# list1=[]
# for i in range(1,n+1):
# s(i)
# print(list1)
# print(round(sum(list),2))
#题目7 编写程序,求m和n之间(包括m和n,m<=n)所有素数的平方根之和
#要求使用函数,函数功能是:判断某数是否为素数。 m和n由键盘输入,要求
#输入输出均在主函数中完成。
import math
sum=0
def IsSushu(x):
bResult=True
for i in range(2,x):
if x%i==0:
bResult=False
break
#else:
# print('%s是素数'%(x))
return bResult
def SqrySum(y):
global sum #关联全局变量
sum+=(math.sqrt(y))
def Calculat(m,n):
for i in range(m,n+1):
if IsSushu(i):
SqrySum(i)
print('素数总和:%s'%(sum))
if __name__=='__main__':
m=int(input('请输入m数'))
n=int(input('请输入n数'))
Calculat(m,n)
#函数,匿名函数,递归函数,高阶函数
#递归函数:
#自己调用自己。
#1加到100
# def a(x):
# if x==1:
# return 1
# return x+a(x-1)
#
# print(a(100))
#斐波那契数列
#1 1 2 3 5 (任意前两个数之和为后一个数)
# list=[]
# def f(x):
# if x==1 or x==2:
# return 1
# return f(x-1)+f(x-2)
# # print(f(50))
# if __name__=='__main__':
# list1=[]
# for i in range(1,11):
# list1.append(f(i))
# print(list1,sum(list1))
#匿名函数 没有给定名称的函数,叫做匿名函数 lambda 表达式
# a=lambda x,y:x+y+1
# def aa(x,y):
# return x+y(1,2)
# print(aa(1,a)) #等效方法
# print(aa(1,lambda x,y:x+y+1)) #等效方法
#作业题:
#简单模拟ATM机,实现登录, 存款 , 取款, 转账
info ={'aa':{'password':'aa1','money':1000},
'bb':{'password':'bb2', 'money': 2000},
'cc': {'password':'cc3', 'money': 3000},
}
#输出操作:
def prt(sMsg):
print('*'*10)
print(sMsg)
print()
#登录3次失效
successUser=''
def login(iLoginCount):
bCheck=False
if iLoginCount<1:
print('尝试三次失败!')
return False
else:
username=input('请输入用户名:')
passwd=input('请输入密码:')
for usn in info:
for pwd in info[usn]:
if (usn==username and passwd==info[usn]['password']):
bCheck=True
global successUser
successUser=username
break
if bCheck:
selBussType()
else:
iLoginCount-=1
prt('登录失败! ,系统将在%s后退出' % (iLoginCount))
login(iLoginCount)
#选择功能
def selBussType():
sInput = input('请选择要操作的功能:1.存款 \r\n 2.取款 \r\n 3.转账 \r\n 4.查余额,输入数字(1,2,3):')
if sInput == '1':
save_money()
elif sInput == '2':
get_money()
elif sInput == '3':
change_money()
elif sInput=='4':
list_total()
else:
selBussType()
#列出当前用户余额
def list_total():
if successUser!='':
prt('操作完成!\r\n 当前余额:%s'%(info[successUser]['money']))
print('系统内部数据:',info)
#查找转账行号是否存在
def IsUserOK(sUserName):
bResult = False
for usn in info:
if (usn == sUserName):
bResult = True
break
if not bResult:
prt('要转账的用户不存在,请核实!')
if bResult and successUser==sUserName:
prt('不能给自己帐号转账!')
bResult=False
return bResult
#检测用户输入额度是否合法
def IsMoneyOK(sInput):
bResult=True
if (not sInput.isdecimal()):
print('请输入数字!')
bResult=False
return bResult
if float(sInput) <= 0:
print('请输入正确的币值!')
bResult=False
return bResult
if float(sInput)>3000:
print('超出最大额度3000,请重新录入!')
return bResult
return bResult
#取钱不能大于帐号余额
#取钱
def get_money():
sInput=input('请输入你要取出的金额')
if not IsMoneyOK(sInput):
return
if (info[successUser]['money']-float(sInput)>=0):
info[successUser]['money']-=float(sInput)
else:
print('余额不足!')
list_total()
#存钱
def save_money():
sInput = input('请输入你要存入的金额')
if not IsMoneyOK(sInput):
return
info[successUser]['money'] += float(sInput)
list_total()
#转账
def change_money():
sChangeUser = input('请输入你要转账的用户')
sInput = input('请输入你要转账的金额')
if (not IsUserOK(sChangeUser)):
return
if not IsMoneyOK(sInput):
return
if (info[successUser]['money'] - float(sInput) >= 0):
info[successUser]['money'] -= float(sInput)
else:
print('余额不足!')
info[sChangeUser]['money']+=float(sInput)
list_total()
if __name__=='__main__':
login(3)
#####################
# 简单模拟ATM机实现
# 登录 存款 取款 转账
#
# info = {
# 'aa':{'password':'111','money':1000},
# 'bb':{'password':'222','money':2000},
# }
# #登录
# def login():
# while True:
# user = input('请输入账户名')
# if user in info.keys():
# for i in range(1,4):
# password = input('请输入密码')
# if password==info[user]['password']:
# print('登录成功')
# return user
# else:
# print('密码错误,请重新输入密码')
# else:
# print('3次机会用完,登录失败,账号已冻结')
# return
# else:
# print('账户名不存在,请重新输入')
# #取款
# def get_money(user):
# money = int(input('请输入取款金额 最大取款金额3000 必须是100的倍数'))
# if 3000>=money>=0 and money%100==0 and money<=info[user]['money']:
# info[user]['money']-=money
# print('成功取款%s元,卡内余额%s元'%(money,info[user]['money']))
# else:
# print('输入金额有误')
# #存款
# def save_money(user):
# money = int(input('请输入存款金额 一次最大存款金额3000 必须是100的倍数'))
# if 3000 >= money >= 0 and money % 100 == 0:
# info[user]['money'] += money
# print('成功存款%s元,卡内余额%s元' % (money, info[user]['money']))
# else:
# print('输入金额有误')
# #转账
# def change_money(user):
# other_user = input('请输入对方账户名')
# money = int(input('请输入转账金额 一次最大转账金额3000'))
# if other_user in info and other_user!=user:
# if 3000 >= money >= 0 and money<=info[user]['money']:
# info[user]['money'] -= money
# info[other_user]['money'] += money
# print('成功转账%s元,卡内余额%s元' % (money, info[user]['money']))
# else:
# print('输入金额有误')
# else:
# print('对方账户有误,或者不能自己转给自己')
# if __name__=='__main__':
# r = login()
# if r:
# while True:
# option = input('请输入要操作的选项 1>取款 2>存款 3>转账 #>退出')
# if option=='1':
# get_money(r)
# elif option=='2':
# save_money(r)
# elif option=='3':
# change_money(r)
# elif option=='#':
# print('退出,请取卡')
# break
# else:
# print('其他功能未开发')
# ===================================================
# map 映射操作 接收到的数据长度与返回的数据长度一致
# list1 = [1,2,3,4,5]
# list2 = [1,2,3,4]
# print(list(map(lambda x:x>2,list1)))
# print(list(map(lambda x,y:x+y,list1,list2)))
# filter 过滤器
# list1 = [1,2,3,4,5]
# print(list(filter(lambda x:x>3,list1)))
# reduce 合并操作
# list1 = [1,2,3,4,5]
# import functools
# r = functools.reduce(lambda x,y:x+y,list1,100)
# print(r)
# 案例一:格式化用户的英文名,要求首字母大小,其它字母小写
import functools
name = ['tom','jack','rose','jason']
print(list(map(lambda x:x[0].upper()+x[1:],name)))
print(list(map(lambda z:z.title(),name)))
# 案例二:将用户英文名、年龄、性别三个列表的数据结合到一起,形成一个二维列表
age = [11,12,13,14]
sex = ['男','男','女','男']
info=list(map(lambda x,y,z:[x,y,z],name,age,sex))
print(info)
# 案例三:选出性别为男的用户
select_info_nan=list(filter(lambda x:x[-1]=='男',info))
print(select_info_nan)
# 案例四:求性别为男的用户的平均年龄
r=round(functools.reduce(lambda x,y:x+y[1],select_info_nan,0)/len(select_info_nan),2) #2位小数
print(r) #修约规则: 四舍六入,五双归。