目录
1、数字组合
题目:有四个数字 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
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,求应发放奖金总数?
思路:典型的初高中分段函数题,利用多个“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))
3、数学计算
题目:一个整数,它加上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
4、判断日期
题目:输入某年某月某日,判断这一天是这一年的第几天?
思路:计算日期,需要区分大小月,以及闰年的二月有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("这不是闰年")
5、数字排序
题目:任意输入三个数,自动排序并输出。
思路:利用列表的排序方法
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))
6、斐波那契数列
题目:斐波那契数列,从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]
7、时间函数
题目:暂停几秒输出
# 调用time库
import time
for i in range(4):
print(i)
# 延迟5s输出
time.sleep(5)
8、画菱形
题目:画菱形
def draw(n):
a="*"*(2*(4-n)*1)
print(a.center(9," "))
if n!=1:
draw(n-1)
print(a.center(9," "))
draw(4)
# 输出结果
**
****
******
****
**
9、应用题-生兔子
题目:有一对兔子,从出生后第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]
10、输出素数
题目:输出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]