PYTHON--函数篇

 

1、求一个十进制的数值的二进制的0、1的个数

比如:20 -> 0001 0100 ->两个1、6个0

把二进制变成字符型,每一位都相加的总数就是1的个数

def count_0(n):
    b = bin(n)      #先将该数转化为二进制
    print(b)

    a = list(b)     #变成列表,转换成字符型
    print(a)

    #遍历列表,计算个数
    zero = 0
    one = 0
    for i in range(0,len(a)):
        if a[i] == "0":
            zero +=1
        elif a[i] == "1":
            one +=1
    print(f'该数字二进制0的个数为:{zero}')
    print(f'该数字二进制1的个数为:{one}')

num = int(input("请输入一个整数: "))
count_0(num)

python还有内置办法

def count_0number(n) -> int:
    return bin(n).count("1")      #转换成二进制并输出1的个数

c =count_0number(num)
print(c)

2、实现一个用户管理系统(要求使用容器保存数据) [{name: xxx, pass: xxx, ……},{},{}]

users = []
while True:
    print("信息管理系统")
    print("-------------------------------------------------")
    print(" 1.账号注册")
    print(" 2.账号登录")
    print(" 3.退出系统")
    choice = int(input("请输入您的选择:"))
    if choice == 1:
        while True:
            print('欢迎进入注册界面!')
            a = input('请输入您的账户:')
            b = input('请输入您的密码:')
            if a is None or len(a) == 0:
                print('对不起,请重新输入')
                continue
            flag = False
            for d in users:
                if d.get('a') == a:
                    print('对不起,用户名已经存在,请重新输入')
                    flag = True
                    break
            if flag:
                continue
            if len(b) < 1:
                print('密码长度不能小于1,请重新输入')
                continue
            user = {"username": a, "password": b}
            users.append(user)
            print("用户注册成功,请登录")
            print(users)
            break
    elif choice == 2:
        print('欢迎登录!')
        print("---------------------------------------")
        a = input('请输入您的账户:')
        b = input("请输入您的密码:")
        for user in users:
            if user['username'] == a and user.get('password') == b:
                print('登陆成功')
                break
            else:
                print('登陆失败,请重新输入')
    elif choice == 3:
        exit()
    else:
        print("输入有误。请重新输入!")

3、求1~100之间不能被3整除的数之和

def sum(n:int) -> int:
    a = 0
    for x in range(1,n+1):
        if x%3 == 0:
            continue
        else:
            a = x+a
    print(a)

n = int(input("请输入正整数: "))
sum(n)

 

4、给定一个正整数N,找出1到N(含)之间所有质数的总和

def prime(n:int) -> bool:
    #判断是否为质数
    for i in range(2,n//2 +1):
        if n%i == 0:
            return  False
    return True

n = int(input("请输入一个大于1的正整数: "))
prime_sum = 0
for i in range(2,n):
    if prime(n):
        prime_sum+= i
print(f"质数和为{prime_sum}")

5、计算PI(公式如下:PI=4(1-1/3+1/5-1/7+1/9-1.......)

for x in range(0,10):
    pi = 1
    for i in range(2,100001+x*100000):
        pi +=((-1)**(i-1))*(1/(2*i-1))
print("%s"%(4 * pi))

公式为

当i无限大的时候,越大越接近Π的值

 

6、给定一个10个元素的列表,请完成排序(注意,不要使用系统api)

#排序的三种方法
arr = [4,25,6,13,-1,33,2,16,17,99,-7]

'''冒泡(算法稳定)'''
def bubble_sort(arr:list) -> None:
    """
        会相邻比较两个数据,每一次找到一个最大值或者最小值
    """
    for i in range(len(arr) - 1):     #外层循环目标:找多少次最大值n-1
        for j in range(len(arr)-1-i):
            #里层循环,一个一个两两比较完,才能找到最大值,找n-1次,但是找出一个不用再比了,下次可以少比一次
            #循环要效率高
            if arr[j]>arr[j+1]:
                arr[j],arr[j+1] = arr[j+1],arr[j]

#print(f'排序前: {arr}')
#bubble_sort(arr)
#print(f'排序后: {arr}')


'''选择(算法不稳定)'''
def select_sort(arr:list) -> None:
    """
        升序,找最小值
    """
    for i in range(len(arr)):
        #外层控制找最小值的次数,len次
        min_index= i      #假设第一个进来的是最小值,计索引;记值就是max_value=arr[i]
        for j in range(i+1,len(arr)):
            if arr[j] < arr[min_index]:
                min_index = j       

        if min_index != i:   #可不加
            arr[i],arr[min_index] = arr[min_index],arr[i]


    #简化写法----遇到一个小的就换一次,不用最小
def select_sort_j(arr:list) -> None:
    for i in range(len(arr)):
        #外层控制找最小值的次数,len次      
        for j in range(i+1,len(arr)):
            if arr[j] < arr[i]:
                arr[i],arr[j] = arr[j],arr[i]
    #效率不是很高,换的次数很多
    
#select_sort(arr)
#print(arr)


'''插入排序'''
def  insert_sort(arr:list) -> None:
    """
        将第一个值当作有序序列(本身就有序)
        以此插入剩余值,保证序列有序
    """
    for i in range(1,len(arr)):      #假设第一个值有序
        for j in range(i,0,-1):      #倒着往前比  (访问不到0)         i-1,-1,-1
            if arr[j]<arr[j-1]:      #前者是新来的,比较最初的那个值 arr[j+1]<arr[j]
                arr[j],arr[j-1]=arr[j-1],arr[j]

insert_sort(arr)
print(arr)

7、求 a+aa+aaa+.......+aaaaaaaaa=?其中a为1至9之中的一个数,项数也要可以指定。

num = input('a:')   ##输入基本的数,此时s的数据类型是字符串
count_x = int(input('项数: '))
sum = 0    ##让sum=0
for count in range(count_x):  ##定义count,count取值从0开始,的意义为让这个基本数进行多少次的 
                                运算,第一次是a,第二次是aa……
    result = num * (count+1)   ##此时字符串s * (count+1) 是表示将s这个字符串重复count+1次
    result1 = int(result)   ##将字符串转化为整型
    sum = sum + result1   ##逐步求和
    print('result = %s '%result)   
print('a+aa+aaa+....= %s'%sum)  

8、合并两个有序数组,合并后还是有序列表

ls1 = [-5,-1,3,6,9,20,37,99]
ls2 = [-1,1,11,333]



def merge_sort(ls1:list,ls2:list) -> list:
    arr =[]
    i = j=0
    while len(ls1) >= i+1 and len(ls2) >= j+1:
        if ls1[i] <= ls2[j]:
            arr.append(ls1[i])
            i += 1
        else:
            arr.append(ls2[j])
            j +=1
    if len(ls1) > i:
        arr.append(ls1[i])
    if len(ls2) > j:
        arr.append(ls2[j])
    return arr

print(merge_sort(ls1,ls2))

 

 9、给定一个非负整数数组A,将该数组中的所有偶数都放在奇数元素之前 

def sort(a:list):
    d = []
    b = []
    for i in a:
        if i %2 == 0:
            d.append(i)
        else:
            b.append(i)
    d.extend(b)
    print(d)

a = [1,4,7,2,3,9]
sort(a)

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值