目录
1、数字组合
2、分段函数应用题
3、数学计算
4、判断日期
5、数字排序
6、斐波那契数列
7、时间函数
8、画菱形
9、应用题-生兔子
10、输出素数
题目:有四个数字 1、2、3、4,能组成多少无重复数字的三位数,统计个数并打印。
思路:本题只有四种数字组成三位数,可以采用穷举法,分别循环百位、十位、个位数字,再判断是否有重复数字,最后采用列表方式输出所有的结果。
list1 = [] # 循环百位数字 for i in range(1, 5): # 循环十位数字 for j in range(1, 5): # 循环各位数字 for k in range(1, 5): # 当百位、十位、个位数字不同时,输出组合数字 if i != j and i != k and j != k: a = 100*i+10*j+k list1.append(a) continue # 打印列表和元素个数 print(list1) print("总共有:{}".format(len(list1))) # 输出结果 [123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432] 总共有:24
题目:企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
思路:典型的初高中分段函数题,利用多个“elif”判断语句即可完成。
i = int(input("请输入当月利润:")) # 小于等于10万时 if i <= 100000: a = i * 0.1 # 10万到20万之间时 elif 100000 <= i <= 200000: a = 100000 * 0.1 + (i - 100000) * 0.075 # 20万到40万之间时 elif 200000 <= i <= 400000: a = 100000 * 0.1 + 100000 * 0.075 + (i - 200000) * 0.05 # 40万到60万之间时 elif 400000 <= i <= 600000: a = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (i - 400000) * 0.03 # 60万到100万之间时 elif 600000 <= i <= 1000000: a = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (i - 600000) * 0.015 # 大于100万时 else: a = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (i - 1000000) * 0.01 print("应发奖金为:{}".format(a))
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
思路:本题加上的数只有268,并且为整数,可以省略数学思维,采用穷举法,从1开始循环,判断满足条件的数字并输出。
n = 1 # 循环 while True: # 判断语句,判断n加上100(268)后开方是否为整数 if (n+100)**0.5 == int((n+100)**0.5) and (n+268)**0.5 == int((n+268)**0.5): print(n) break else: n +=1 # 输出结果 21
题目:输入某年某月某日,判断这一天是这一年的第几天?
思路:计算日期,需要区分大小月,以及闰年的二月有29天。
year=int(input("请输入年份:")) month=int(input("请输入月份:")) day=int(input("请输入日期:")) # 判断是否为闰年 if year%4==0: # 定义顺序列表 list1=[0,31,29,31,30,31,30,31,31,30,31,30,31] days=0 for i in range(month): # 累加满月天数 days+=list1[i] print(days+day) print("这是闰年") else: list1=[0,31,28,31,30,31,30,31,31,30,31,30,31] days=0 for i in range(month): days+=list1[i] print(days+day) print("这不是闰年")
题目:任意输入三个数,自动排序并输出。
思路:利用列表的排序方法
x=int(input("请输入第一个数:")) y=int(input("请输入第二个数:")) z=int(input("请输入第三个数:")) # 定义列表 list1=[x,y,z] # 列表排序方法 list1.sort(reverse=False) # 将int类型转换为string类型,并输出 a=map(str,list1) print(" ".join(a))
题目:斐波那契数列,从1,1开始,后面每一项等于前两项之和。
思路:函数递归
# 定义函数 def fun(n): if n==1 or n==2: return 1 else: # 函数自我调用 return fun(n-2)+fun(n-1) # fun1 fun2 fun1+fun2 fun2+fun3 list1=[] # 输出前20项 for i in range(1,20): list1.append(fun(i)) print(list1) # 输出结果 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]
题目:暂停几秒输出
# 调用time库 import time for i in range(4): print(i) # 延迟5s输出 time.sleep(5)
题目:画菱形
def draw(n): a="*"*(2*(4-n)*1) print(a.center(9," ")) if n!=1: draw(n-1) print(a.center(9," ")) draw(4) # 输出结果 ** **** ****** **** **
题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
思路:依旧是利用函数递归,其结果类似斐波那契数列
def fun(n): if n<=2: return 1 else: return fun(n-2)+fun(n-1) # fun1 fun2 fun1+fun2 fun2+fun3 list1=[] for i in range(1,10): list1.append(2*fun(i)) print(list1) # print(fun(10)) # 输出结果 [2, 2, 4, 6, 10, 16, 26, 42, 68]
题目:输出1~100的所有素数
思路:穷举1~100的数,判断数字是否能整除2到自身的所以整数。
list=[] # 循环1~100的整数 for i in range(1,101): for j in range(2,i): # 判断是否为素数 if i%j==0: break else: list.append(i) print(list) # 输出结果 [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]