Python 学习开启AI之旅 (十二)

#题目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)  #修约规则: 四舍六入,五双归。

 

你可能感兴趣的:(Python,Python)