python 100例-[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('输入企业的利润值(万元):'))defget_bonus(profit):

bonus=0if 0 <= profit <= 10:

bonus= 0.1*profitelif (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("利润输入值不能为负")returnbonusif __name__ == '__main__':print('提成为:',get_bonus(profit),'万元')#递归,运用了递归链条和递归基例

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

分析:

x+100=n^2

x+100+168=m^2

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

deftest1():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]+=1month_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 冒泡法(相邻位整数的比较)

defget_nums():

nums=[]

n=int(input("一共有几个整数?"))for i inrange(n):

x=int(input('请按次随机输入第{}个整数(剩余{}次输入):'.format(i+1,n-i)))

nums.append(x)returnnumsif __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))returnnumsif __name__=='__main__':print('经过冒泡法排序最终得到:{}'.format(BubbleSort(list_nums)))

1468461-20181107204615591-1169746995.png

方法2 选择排序法

defget_nums():

nums=[]

n=int(input("一共有几个整数?"))for i inrange(n):

x=int(input('请按次随机输入第{}个整数(剩余{}次输入):'.format(i+1,n-i)))

nums.append(x)returnnumsif __name__=='__main__':

myList=get_nums()defselectedSort(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]

tmp=myList[j]

myList[j]=myList[smallest]

myList[smallest]=tmp#打印每一轮比较好的列表

print("Round",i,":",myList) #根据第一个i循环进行打印,而不是选j循环

print("选择排序法:迭代过程")

selectedSort(myList)

1468461-20181107211101310-1923370586.png

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

defmerge_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)ifLIST:

start.append(LIST[0])

end.reverse()return (start +end)if __name__=='__main__':

nums=[]

n=int(input('一共几位数:'))for i inrange(n):

x=int(input("请依次输入整数:"))

nums.append(x)print(merge_sort(nums))

1468461-20181108140049051-1769928934.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值