Python---简单函数

这篇博客探讨了Python在简单字符处理方面的应用,包括在注册和登录验证过程中的使用。
摘要由CSDN通过智能技术生成
def table():
    '''
    打印九九乘法表
    :return:
    '''
    arr=[1,2,3,4,5,6,7,8,9]
    for i in arr :
        j = 1
        while j<=i:
            print("%d*%d=%d "%(i,j,i*j),end='')
            j+=1
        print("")

def star(k):
    '''
    打印对称星星
    :param k: 最长的一行星星个数
    :return:
    '''
    i=1
    while i<2*k:
        if i<k:
            j=i
        else:
            j=2*k-i
        while j>0:
            print("*",end="")
            j-=1
        print("")
        i+=1

table()
star(6)
def sum(a,b,c):
    '''
    求三个数的和
    :param a:
    :param b:
    :param c:
    :return:
    '''
    print("%.2f+%.2f+%.2f=%.3f"%(a,b,c,a+b+c))

def avg(a,b,c):
    '''
    求三个数的平均值
    :param a:
    :param b:
    :param c:
    :return:
    '''
    print("(%.2f+%.2f+%.2f)/3=%.3f"%(a,b,c,(a+b+c)/3.0))

def test_list(a):
    '''
    求列表的最大值与最小值以及平均数
    :param a:
    :return:
    '''
    a.sort()
    print("最大值:",a[len(a)-1])
    print("最小值:",a[0])
    sum = 0
    for item in a:
        sum+=item
    print("平均值:",sum/len(a))

def leapYear():
    '''
    判断用户输入的是否是闰年
    :return:
    '''
    year = int(input("请输入年份"))
    if year%4==0:
        print("该年是闰年")
    else :
        print("该年不是闰年")

def main():
    sum(2,6,8)
    avg(3,5,7.6)
    a = [23,65,87,32,56,78]
    test_list(a)
    while True:
        leapYear()
main()
def money(m):
    '''
    2.根据一定公式计算应缴金额
    :param m: 工资
    :return: 应缴金额
    '''
    sum=0
    w=pow(10,5)
    if m<=w:
        sum=m*0.1
    elif m>w and m<2*w:
        sum=w*0.1+0.075*(m-w)
    elif m>2*w and m<4*w:
        sum=0.05*(m-2*w)
    elif m>4*w and m<6*w:
        sum=0.03*(m-4*w)
    elif m>6*w and m<10*w:
        sum=0.015*(m-6*w)
    elif m>10*w:
        sum=0.01*(m-10*w)
    else:
        sum=sum
    print("%d应缴金额:%d"%(m,sum))

def zhenshu():
    '''
    3.一个整数,它加上100后是一个完全平方数,
    再加上168又是一个完全平方数,请问该数是多少?
    :return:
    '''
    i = 0
    flag = 0
    flag1 = 0
    while True:
        j = 0
        while j*j<i+170:
            if j*j==(i+100):
                flag = 1
            if j*j==(i+168):
                flag1 = 1
            if flag ==1 and flag1==1:
                print("该整数为:",i)
                break
            j += 1
        i +=1
        flag = 0
        flag1 = 0

def rab(n):
    '''
    4、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
    小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
    问每个月的兔子总数为多少?
    :param n:
    :return:
    '''
    if n==1 or n==0:
        return 1
    else:
        return rab(n-1)+rab(n-2)

def main():

    n = 0
    while n<15:
        print("第%d月:%d对"%(n,rab(n)))
        n += 1
    print("")
    money(1200000)
    print("")
    zhenshu()
main()
def noseven():
    '''
    设计"过7游戏"的程序
A。打印1-100之间除了包含7或者7的倍数至外的数字。
B。使用while循环完成上述操作。
    :return: 
    '''
    i = 1
    flag = 0
    while i<100:
        numstr = str(i)
        if i%7==0 or  numstr.find('7')!= -1:
            flag = 1
        if flag !=1:
            print(i)
        i += 1
        flag =0
noseven()
def hannuo(n,a,b,c):
    '''
    汉诺塔
    :return: 
    '''
    if n==1:
        print("第%d个:form %s to %s"%(n,a,c))
    else:
        hannuo(n-1,a,c,b)
        print("第%d个:form %s to %s" % (n, a, c))
        hannuo(n-1,b,a,c)
hannuo(2,"a","b","c")
def randomthree():
    '''
    1 2 3 4 四个数字随机组合成不重复的三位数
    :return: 
    '''
    flag = [[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]]
    num=[1,2,3,4]
    s = 0
    c = 1
    for i in range(0,4):
        if flag[i][0]==0 and flag[i][1]==0:
            s += num[i]*100
            flag[i][0] = 1
            flag[i][1] = 1
            for t in range(0,3):
                for j in range(0,4):
                    if flag[j][0]==0 and flag[j][2]==0:
                        s +=num[j]*10
                        flag[j][0] = 1
                        flag[j][2] = 1
                        break
                for k in range(0,4):
                    if flag[k][0] == 0 and flag[k][3] == 0:
                        s +=num[k]
                        flag[k][0] = 1
                        flag[k][3] = 1
                        print("%d种: %d"%(c,s))
                        c +=1
                        break
                for w in range(0,4):
                    if flag[w][0]==0 and flag[w][3]==0:
                        s =int(s/10)
                        s *= 10
                        s +=num[w]
                        flag[w][0] = 1
                        flag[w][3] = 1
                        print("%d种: %d"%(c,s))
                        c += 1
                        break
                for h in range(0,4):
                    flag[h][0] = 0
                    flag[h][3] = 0
                flag[i][0] = 1
                s = 0
                s += num[i]*100
        for h in range(0, 4):
            for g in range(0,4):
                flag[h][g] = 0
        flag[i][1] = 1
        s = 0
randomthree()
def howold():
    '''
    年龄问题
    :return: 
    '''
    i = 0
    old = 10
    while i<4:
        old +=2
        i +=1
    print("第五个人 %d 岁"%old)
howold()

简单字符处理

# 1.使列表的值不重复
list = [1,1,6,3,1,5,2]
def norepeat1(list):
    i = 0
    while i<len(list):
        j = i+1
        while j<len(list):
            if list[j]==list[i]:
                del list[j]
            else:
                j += 1
        i += 1
    print(list)
norepeat1(list)

# 2.实现字符串反转三种方法
str = "string"
#第一种
def rev1(str):
    str2=""
    i = len(str)-1
    while i>-1:
        str2=str2+str[i]
        i -= 1
    print(str2)
rev1(str)
#第二种
def rev2(str):
    str2 = str[::-1]
    print(str2)
rev2(str)
#第三种
def rev3(str):
    if len(str) <1:
        return str
    return rev3(str[1:])+str[0]
print(rev3(str))

# 3.一行代码实现对列表a中的偶数位置的元素进行加3后求和
# 从网上找到的解决方法
# 3.1 取出偶数下标;filter
# filter(lambda x:x%2==0,range(len(list)))      ==>[0,2,4]
# 3.2 取出对应下标值:map
# map(lambda x:list[x],filter(lambda x:x%2==0,range(len(list))))        ==>[1,3,5]
# 3.3 对应值加3 : lamda
# map(lambda x:x+3,map(lambda x:list[x],filter(lambda x:x%2==0,range(len(list)))))
# 3.4 将数组求和 reduce
list = [1,2,3,4,5]
from functools import reduce
print(reduce(lambda x,y:x+y,map(lambda x:x+3,map(lambda x:list[x],filter(lambda x:x%2==0,range(len(list)))))))
# # 自我揣摩
# #奇数长度的字符串偶数下标
# list1 = "12345"
# def sum(list):
#     if len(list)<2:
#         return int(list[0])+3
#     return int(list[0])+3+sum(list[2::])
# print(sum(list1))

# 4.对列表进行以绝对值从小到大的排序
list = [-2,1,3,-6]
import math
def list_sort(list):
    i = 0
    list1 = []
    f=[0,0,0,0]
    while i<len(list):
        flag = 0
        #寻找还未被选中过的数当目标数
        k = 0
        while k<len(f):
            if f[k]==0:
                min = list[k]
                flag = k
                break
            k += 1
        j = 0
        #寻找比这个目标数还小的数
        while j<len(list):
            if math.fabs(list[j])<math.fabs(min) and f[j]==0:
                min = list[j]
                flag = j
            j += 1
        f[flag] = 1
        list1.append(min)
        i += 1
    print(list1)
list_sort(list)

# 5.将alist由age从大到小排序
alist = [{'name':'a','age':20},
       {'name':'b','age':30},
       {'name':'c','age':25}]
def alist_sort(alist):
    i = 0
    list1 = []
    alist1 = []
    f = [0, 0, 0]
    while i < len(alist):
        flag = 0
        # 寻找还未被选中过的数当目标数
        k = 0
        while k < len(f):
            if f[k] == 0:
                min = alist[k]["age"]
                flag = k
                break
            k += 1
        j = 0
        # 寻找比这个目标数还小的数
        while j < len(alist):
            if alist[j]["age"] < min and f[j] == 0:
                min = alist[j]["age"]
                flag = j
            j += 1
        f[flag] = 1
        list1.append(flag)
        i += 1
    i = len(alist)-1
    while i>-1:
        alist1.append(alist[list1[i]])
        i -= 1
    print(alist1)
alist_sort(alist)

# 6.将字符串处理成字典
str="k:1|k1:2|k2:3|k3:4"
def strtodict(str):
    dict = {}
    list = str.split("|")
    for item in list:
        list2 = item.split(":")
        dict[list2[0]]=list2[1]
    print(dict)
strtodict(str)

注册校验-登录

list =[{"user":"a123456","password":"123456a"},
       {'user': 'a7789465', 'password': '984645a'}]
def checkRegister():
    '''
    注册的校验程序:
A)实现循环从键盘输入用户名和密码
B)如果用户名或者密码任一一个输入的是“QUIT”直接退出程序。
C)判断用户名长度为6-20,用户名开头必须以字母开头。
D)密码长度至少6位,不能为纯数字,不能有空格。
E)如果不符合上述规则、打印出不符合的原因、提示重新输入。并跳转到用户名输入阶段。
F)将正确的用户名和密码存入字典里,并打印校验成功字样。
    :return: 
    '''
    global list
    while True:
        while True:
            user = input("please enter your name")
            if user == "QUIT":
                break
            elif user[0].isalpha()!=True:
                print("start must with a letter")
            elif 6>len(user) or 20<len(user):
                print("the length of user must be 6-20")
            else:
                break
        while True:
            password = input("please enter your password")
            if password == "QUIT":
                break
            elif password.find(" ")!=-1:
                print("must be no spaces")
            elif 6>len(password):
                print("the length of password must be longer 6")
            elif password.isdigit()==True:
                print("can not be only digit")
            else:
                print("succeed!")
                break
        d = {"user":user,"password":password}
        list.append(d)
        print(d)

# checkRegister()

def login(name,password):
    global list
    flag = 0
    for item in list:
        if item["user"]==name and item["password"]==password:
            print("login success")
            flag = 1
            break
    if flag==0:
        print("login failed")
login("a123456","123456a")
login("a123456d","123456ad")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值