zoukankan      html  css  js  c++  java
  • [Python] Python 100例

    题目1:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

    程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

    #程序源代码
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    for i in range(1,5):
        for j in range(1,5):
            for k in range(1,5):
                if( i != k ) and (i != j) and (j != k):
                    print i,j,k

    题目2:企业发放的奖金根据利润提成。

    利润(I)低于或等于10万元时,奖金可提10%;

    利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;

    20万到40万之间时,高于20万元的部分,可提成5%;

    40万到60万之间时高于40万元的部分,可提成3%;

    60万到100万之间时,高于60万元的部分,可提成1.5%

    高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

    程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

    profit = int(input('输入发放的利润值(万元): '))
    if 0 <= profit <10:
        print('提成为:',profit*0.1,'万元')
    if 10 <= profit < 20:
        print('提成为:',(profit-10)*0.075+10*0.1,'万元')
    if 20 <= profit < 40:
        print('提成为:',(profit-20)*0.05+10*0.075+10*0.1,'万元')
    if 40 <= profit < 60:
        print('提成为:',(profit-40)*0.03+20*0.05+10*0.075+10*0.1,'万元')
    if 60 <= profit < 100:
        print('提成为:',(profit-60)*0.015+20*0.03+20*0.05+10*0.075+10*0.1,'万元')
    if profit >= 100:
        print('提成为:',(profit-100)*0.01+40*0.015+20*0.03+20*0.05+10*0.075+10*0.1,'万元')
    
    #重复的部分较多,显得比较蠢,于是寻求改进的部分

     方法2

    profit = int(input('输入企业的利润值(万元): '))
    def get_bonus(profit):
        bonus = 0
        if 0 <= profit <= 10:
            bonus = 0.1*profit
        elif (profit > 10) and (profit <= 20):
            bonus = (profit-10)*0.075 + get_bonus(10)
        elif (profit > 20) and (profit <= 40):
            bonus = (profit-20)*0.05 + get_bonus(20)
        elif (profit > 40) and (profit <= 60):
            bonus = (profit-40)*0.03 + get_bonus(40)
        elif (profit > 60) and (profit <= 100):
            bonus = (profit-60)*0.015 + get_bonus(60)
        elif (profit >100):
            bonus = (profit-100)*0.01 + get_bonus(100)
        else:
            print("利润输入值不能为负")
        return bonus
    
    if __name__ == '__main__':
        print('提成为:',get_bonus(profit),'万元')
    
    
    #递归,运用了递归链条和递归基例

     题目3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

    分析:

    x+100=n^2

    x+100+168=m^2

    两式相减 得到m^2-n^2=168

    def test1():
        for n in range(0,168):
            for m in range(n,169):
                if (m+n)*(m-n) == 168:
                    print("这个整数是: ",str(n*n-100))
    if __name__ =='__main__':
        test1()

     题目4:输入某年某月某日,判断这一天是这一年的第几天?

    分析: 依次输入年月日

    1.闰年差异需根据输入判断

    2.输入月份对应建立 字典{月份:天数}

    3.输入天数+月份对应累计天数 即为所得

    try:
        year=input("输入年份:")
        month=input("输入月份: ")
        day=input("输入日期号: ")
    finally:
        print("正在计算")
    
    months2days=[0,31,59,90,120,151,181,212,243,273,304,334]
    # 闰年
    if int(year) % 4 ==0:
        for i in range(2,12,1):
            months2days[i] +=1
            
    month_index=[]
    for j in range(12):
        month_index.append(i+1)
    dict_md=dict(zip(month_index,months2days))
    whichday=dict_md[int(month)]+int(day)
    print('结果是: 第{}天'.format(whichday))

     题目5:输入n个整数,请把这n个数由小到大输出。

    方法1 冒泡法(相邻位整数的比较)

    def get_nums():
        nums=[]
        n=int(input("一共有几个整数?"))
        for i in range(n):
            x=int(input('请按次随机输入第{}个整数(剩余{}次输入):'.format(i+1,n-i)))
            nums.append(x)
        return nums
    if __name__=='__main__':
        list_nums=get_nums()
    
    def BubbleSort(nums):  #冒泡法
        print('初始整数集合为:{}'.format(nums))
        for i in range(len(nums)-1):
            for j in range(len(nums)-i-1):
                if nums[j]>nums[j+1]:
                    nums[j],nums[j+1]=nums[j+1],nums[j] #调换位置,相互赋值
            print("第{}次迭代排序结果:{}".format((len(nums)-j-1),nums))
        return nums
    if __name__=='__main__':
        print('经过冒泡法排序最终得到:{}'.format(BubbleSort(list_nums)))

     

    方法2 选择排序法

    def get_nums():
        nums=[]
        n=int(input("一共有几个整数?"))
        for i in range(n):
            x=int(input('请按次随机输入第{}个整数(剩余{}次输入):'.format(i+1,n-i)))
            nums.append(x)
        return nums
    if __name__=='__main__':
        myList=get_nums()
    
    def selectedSort(myList):
        #获取list的长度
        length = len(myList)
        #一共进行多少轮比较
        for i in range(0,length-1):
            #默认设置最小值得index为当前值
            smallest = i
            #用当先最小index的值分别与后面的值进行比较,以便获取最小index
            for j in range(i+1,length):
                #如果找到比当前值小的index,则进行两值交换
                if myList[j]<myList[smallest]:
                    tmp = myList[j]
                    myList[j] = myList[smallest]
                    myList[smallest]=tmp
            #打印每一轮比较好的列表
            print("Round ",i,": ",myList) #根据第一个i循环进行打印,而不是选j循环
    
    print("选择排序法:迭代过程 ")
    selectedSort(myList)

     方法3 二分排序法(最简单的)

    def merge_sort(LIST):
        start = []
        end = []
        while len(LIST) > 1:
            a = min(LIST)
            b = max(LIST)
            start.append(a)
            end.append(b)
            LIST.remove(a)
            LIST.remove(b)
        if LIST: 
            start.append(LIST[0])
        end.reverse()
        return (start + end)
    
    if __name__=='__main__':
        nums=[]
        n=int(input('一共几位数: '))
        for i in range(n):
            x=int(input("请依次输入整数:"))
            nums.append(x)
        print(merge_sort(nums))

  • 相关阅读:
    Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReference
    Clustered Index
    Docker:一、开始部署第一个Asp.net应用
    数据库死锁 之 三.死锁解读
    数据库死锁 之 二.定位死锁
    数据库死锁 之 一.啥是死锁
    番外篇
    C# QQ & 163 邮件发送
    asp.net core 四 IOC&DI Autofac
    asp.net core 五 SignalR 负载均衡
  • 原文地址:https://www.cnblogs.com/clemente/p/9842938.html
Copyright © 2011-2022 走看看