[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))

 

转载于:https://www.cnblogs.com/clemente/p/9842938.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值