python练习题
1.数字组合
【题目】:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
分析:
四个数字组成三位数,把三位数分为个、十、百位,将1、2、3、4填入其中,去掉不满足条件的剩下就是结果。
for i in range(1, 5): for j in range(1, 5): for q in range(1, 5): if i != j and i != q and j != q: print(i, j, q) #总结:采用剔除思想
2.企业年终奖问题
【题目】:某企业发放的奖金根据利润提成,利润低于或等于10万元时,奖金可提10%;利润高于10万元,
低于20万元,高于10万元部分按7.5%提成;20万元到40万元,高于20万部分,按5%提成;40万到60万,
高于40万部分按3%提成;60万到100万,高于60万部分按1.5%提成;高于100万部分按1%提成,从键盘输入当月利润I,求应发奖金总数?
分析:
根据题目,我们利用数轴来分界,定位。注意定义时需要把奖金定义为整型。
def bonus(i): b1 = 100000 * 0.01 b2 = 100000 * 0.075 b3 = 200000 * 0.05 b4 = 200000 * 0.03 b5 = 400000 * 0.015 # 利润小于等于10万时 if i <= 100000: bo = i * 0.01 # 利润大于十万小于20万时 elif i <= 200000: bo = b1 + (i - 100000) * 0.075 # 利润大于20万小于40万时 elif i <= 400000: bo = b1 + b2 + (i - 200000) * 0.05 # 利润大于40万,小于60万时 elif i <= 600000: bo = b1 + b2 + b3 + (i - 400000) * 0.03 # 利润大于60万小于100万时 elif i <= 1000000: bo = b1 + b2 + b3 + b4 + (i - 600000) * 0.015 # 利润大于100万时 elif i > 1000000: bo = b1 + b2 + b3 + b4 + b5 + (i - 1000000) * 0.01 return bo mybo = bonus(200000) print(mybo)
3.判断日期
【题目】:输入某年某月某日,判断这一天是这一年的第几天?
分析:
以8月25日为例,应该先把前七个月的的天数加起来,然后再加上25天即本年的第几天,特殊情况,闰年输入月份大于3时需要考虑多加一天.
# -*-coding:utf-8-*- '''判断日期 【题目】:输入某年某月某日,判断这一天是这一年的第几天? 分析: 以8月25日为例,应该先把前七个月的的天数加起来,然后再加上25天即本年的第几天,特殊情况,闰年输入月份大于3时需要考虑多加一天.''' year = int(input("请输入年份:")) month = int(input("请输入月份:")) day = int(input("输入天:")) days = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365] # 判断是否是闰年 if year % 4 == 0 and year % 100 != 0: if month > 2: total_days = days[month-1] + 1 + day else: total_days = days[month-1] + day else: total_days = days[month-1] +day print(f"你输入的日期是:{year}年{month}月{day}日,是一年的第{total_days}天")
4. 9*9乘法口诀
# -*-coding:utf-8-*- #9*9乘法口诀 ''''【题目】:打印9*9口诀? 分析: 利用for嵌套循环来打印''' for i in range(1, 10): for j in range(1, i+1): result = i * j print('%d*%d=%d' % (i, j, result), end=' ') print()
5.斐波那契序列
# -*-coding:utf-8-*- # 斐波那契序列 '''【题目】:斐波那契序列是数字序列,其中每个连续数字是前两个数字的和。经典的斐波那 契序列开始于 1,1,2,3,5,8,13,…… 分析: 利用for循环查找序列''' # 方法一、循环 def feibo(n): n1 = 1 n2 = 1 if n - 2 < 0: return 1 while n - 2 >= 0: n3 = n2 + n1 n1 = n2 n2 = n3 n -= 1 return n3 n = int(input("请输入第几位斐波那契数列:")) for i in range(1, n + 1): myfeibo = feibo(i) print(myfeibo) # 方法二、递归算法 def feibo2(n): if n <= 2: return 1 else: while n - 2 > 0: return feibo2(n - 1) + feibo2(n - 2) n = int(input("请输入第几位斐波那契数列:")) for i in range(1, n + 1): myfeibo = feibo2(i) print(myfeibo) # !/usr/bin/python # -*- coding: UTF-8 -*- # 方法三、列表 def fib(n): if n == 1: return [1] if n == 2: return [1, 1] fibs = [1, 1] for i in range(2, n): fibs.append(fibs[-1] + fibs[-2]) return fibs # 输出前 10 个斐波那契数列 print fib(10)
6.判断素素
# -*-coding:utf-8-*- # 判断素数 ''' 【题目】:判断101~200之间有多少素数,并输出所有素数。 分析: 判断素数方法:用一个数分别去除以2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。''' t = [] num = 0 for i in range(101, 201): for j in range(2, i): if i % j == 0: continue else: num += 1 t.append(i) break print(t, len(t))
7.五人捕鱼游戏
# -*-coding:utf-8-*- # 五人捕鱼问题 ''' A、B、C、D、E五人在某天夜里合伙捕鱼 最后疲惫不堪各自睡觉 第二天A第一个醒来 他将鱼分为5份 扔掉多余的1条 拿走自己的一份 B第二个醒来 也将鱼分为5份 扔掉多余的1条 拿走自己的一份 然后C、D、E依次醒来也按同样的方式分鱼 问他们至少捕了多少条鱼 ''' def main(): fish = 1 #假设只有一条鱼 while True: enough = True #够不够分 total = fish #鱼的总数 for _ in range(5): if (total - 1) % 5 == 0: total = (total - 1) // 5 * 4 #如果5个人都分完,则enough等于True else: enough = False #如果出现不够分的情况跳出for循环 break if enough: print(fish) #打印鱼的个数 break fish += 1 #不够分鱼的总数加1 if __name__ == '__main__': main()