文章目录
- 习题1:数字组合
- 习题2:个税计算
- 习题3:完全平方数
- 习题4:今天是第几天
- 习题5:三数排序
- 习题6:斐波那契数列
- 习题7:拷贝copy
- 习题8:9*9乘法表
- 习题9:暂停一秒输出
- 习题10:格式化时间
- 习题11:养兔子
- 习题12:判断素数
- 实例13:所有水仙花数
- 实例14:分解质因数
- 实例15:分数归档
- 实例16:输出日期
- 实例17:字符串构成
- 实例18:复读机相加
- 实例19:寻找完数
- 实例20:高空抛物
- 实例21:猴子偷桃
- 实例22:比赛对手
- 实例23:画菱形
- 实例24:斐波那契数列II
- 实例25:阶乘求和
- 实例26:递归求阶乘
- 实例27:递归输出
- 实例28:递归求等差数列
- 实例29:反向输出
- 实例30:回文串
- 实例31:字母识词
习题1:数字组合
题目 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
n = 0
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:
print(i,j,k)
n += 1
print(n)
更好的方法
import itertools
sum2=0
a=[1,2,3,4]
for i in itertools.permutations(a,3):
print(i)
sum2+=1
print(sum2)
习题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,求应发放奖金总数?
# -*- encoding: utf-8 -*-
p = 0
p = int(input("请输入利润:"))
if p <= 100000:
a = p * 0.1
if p >= 100000 and p <= 200000:
a = (p - 100000) * 0.075 + 100000 * 0.1
if p >= 200000 and p <= 400000:
a = 100000 * 0.1 + 100000 * 0.075 + (p - 200000) * 0.05
if p >= 400000 and p <= 600000:
a = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (p - 400000) * 0.03
if p >= 600000 and p <= 1000000:
a = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (p - 600000) * 0.015
if p >= 1000000:
a = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (p - 1000000) * 0.01
print("工资:",a)
i = int (input(u'净利润:'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for idx in range(0,6):#用来索引arr和rat中的值
if i>arr[idx]:#arr[0]=1000000
r += (i - arr[idx]) * rat[idx]
print((i - arr[idx]) * rat[idx])
i = arr[idx]
print(r)
习题3:完全平方数
题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
import math
for i in range(100000):
x1 = int(math.sqrt(i + 100))
x2 = int(math.sqrt(i + 268))
if (x1 * x1 == i + 100) and (x2 * x2 == i +268):
print(i)
习题4:今天是第几天
输入某年某月某日,判断这一天是这一年的第几天?
"""
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,
然后再加上5天即本年的第几天,
特殊情况,闰年的2月是29天,如果年份是闰年,并且闰年的
月份在3月以后,则需要多加1天。
每四年一次闰年。
1,3,5,7,8,10,12月是31天,2月是28天,其他的是30天。
"""
#定义一个函数,判断是否为闰年
def leapyear(y):
return (y % 400 == 0 or (y % 4 ==0 and y % 100 ==0))
#定义一个数组,每个月的天数,由于python中的数组是从0开始,而月份是从1开始,所以数组第一个数为0
days = [0,31,28,31,30,31,30,31,31,30,31,30]
#存储月份的天数
res = 0
#由用户输入年月日
year = int(input("请输入年份:"))
month = int(input("请输入月份:"))
day = int(input("请输入日期:"))
#如果是闰年的话,2月份加一天
if leapyear(year):
days[2] += 1
#遍历一次days,对应月份中的天数,把对应的天数传递给res存储
for i in range(month):
res += days[i]
#打印出天数!
print(f"这是{year}年的第{res+day}天")
在这里插入代码片
习题5:三数排序
题目 输入三个整数x,y,z,请把这三个数由小到大输出。
可以用冒泡排序,或者
x = int(input("请输入x:"))
y = int(input("请输入y:"))
z = int(input("请输入z:"))
a = [x,y,z]
def bubblesort(a):
for i in range(len(a) - 1):
for j in range(len(a) - i - 1):
if a[j] > a[j+1]:
a[j],a[j+1] = a[j+1],a[j]
return a
a.sort()
print(a.sort())
print(a)
习题6:斐波那契数列
题目 斐波那契数列。
# x1 = 0
# x2 = 1
# x3 = 1
# x4 = 2
# x5 = 3
a = [0,1]
n = int(input("请输入n:"))
for i in range(n):
a.append(a[-1] + a[-2])
print(a)
习题7:拷贝copy
题目 将一个列表的数据复制到另一个列表中。
https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html
import copy
a = [1, 2, 3, 4, ['a', 'b']] # 原始对象
b = a # 赋值,传对象的引用
c = copy.copy(a) # 对象拷贝,浅拷贝
d = copy.deepcopy(a) # 对象拷贝,深拷贝
a.append(5) # 修改对象a
a[4].append('c') # 修改对象a中的['a', 'b']数组对象
print('a = ', a)
print('b = ', b)
print('c = ', c)
print('d = ', d)
习题8:9*9乘法表
for i in range(1,10):
for j in range(1,i + 1):
print("{}*{}={}".format(i,j,i*j),end = " ")
print()
习题9:暂停一秒输出
import time
myD = {
1:'A',2:'B'}
for key,value in dict.items(myD):
print(key,':',value)
time.sleep(1)
习题10:格式化时间
import time
for i in range(4):
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
time.sleep(1)
习题11:养兔子
题目 古典问题:有一对兔子,从出生后第3个月起每个月都
生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子对数的规律为数列1,1,2,3,5,8,13,21…
实际上还是斐波那契数列问题。
def rabbit(month):
if month <= 2:
return 2
else:
return rabbit(month - 1) + rabbit(month - 2)
for i in range(10):
print(rabbit(i))
习题12:判断素数
def judge(n):
if n <=1 :
return False
elif n > 1:
for i in range(2,n):
if n % i == 0:
return False
return True
sum = 0
for i in range(1,1000):
if judge(i):
print(i)
sum = sum + 1
print(sum)
实例13:所有水仙花数
题目 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
for i in range(100,1000):
s = str(i)
if i == int(s[0]) ** 3 + int(s[1]) ** 3 + int(s[2]) ** 3:
print(i)
实例14:分解质因数
题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
n=int(input("请输入需要分解的数字:"))
print("{} =".format(n),end=' ')
while n>1:
for i in range(2,n+1):
if n%i==0:
n=int(n/i)
if n==1:
print(i)
else:
print("{} *".format(i),end=' ')
break
#分解质因数
def zys(n, value=[]):
for i in range(2, int(n / 2 + 1)):
if n % i == 0:
value.append(i)
zys(n / i, value)
return value
if i >= n / 2 - 1:
value.append(int(n))
break
print(zys(90))
实例15:分数归档
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分
的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:(a>b)?a:b这是条件运算符的基本例子。
“”"
points = int(input("请输入分数:"))
if points >= 90:
print("A")
elif points>= 60 and points <= 89:
print("B")
else:
print("C")
实例16:输出日期
import datetime
print(datetime.date.today())
print(datetime.date(2333,2,3))
print(datetime.date.today().strftime('%d/%m/%Y'))
day=datetime.date(1111,2,3)
day=day.replace(year=day.year+22)
print(day)
实例17:字符串构成
题目 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
s = input("请输入字符串:")
alp = 0#英语字母
spa = 0#空格
num = 0#数字
oth = 0#其他字符
for i in range(len(s)):
if s[i].isalpha():
alp += 1
elif s[i].isdigit():
num += 1
elif s[i].isspace():
spa += 1
else:
oth += 1
print("英文字母的个数为:{}".format(alp))
print("数字的个数为:{}".format(num))
print("空格的个数为:{}".format(spa))
print("其他的个数为:{}".format(oth))
实例18:复读机相加
题目 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
a = int(input("请输入数字:"))
n = int(input("请输入几个数相加:"))
def f(n,a):
s = 0
for i in range(n):
s += a * (10 ** i)
return s
print(f(5,2))
sum = 0
for i in range(n):
print(f(i+1,a))
sum += f(i+1,a)
print("sum = ",sum)
print(2+22+222+2222+22222)
a=input('被加数字:')
n=int(input('加几次?:'))
res=0
for i in range(n):
res+=int(a)
a+=a[0]
print('结果是:',res)
实例19:寻找完数
题目 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
ef f(n):
l = []
for i in range(1,n):
if n % i == 0:
l.append(i)
return sum(l) == n
for i in range(1,10000):
if f(i):
print(i)
实例20:高空抛物
题目 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
s = 100
l1 = []
l2 = []
for i in range(10):
l1.append(s)
s = s / 2
l2.append(s)
print(l1)
print(l2)
print(sum(l1) + sum(l2))
实例21:猴子偷桃
题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
l = []
n = 1
for i in range(10):
l.append(n)
n = (n+1) * 2
print(l)
print("第一天一种摘了:",sum(l))
实例22:比赛对手
题目 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单
a=set(['x','y','z'])
b=set(['x','y','z'])
c=set(['x','y','z'])
c-=set(('x','z'))
a-=set('x')
for i in a:
for j in b:
for k in c:
if len(set((i,j,k)))==3:
print('a:%s,b:%s,c:%s'%(i,j,k))
实例23:画菱形
def draw(n):
for i in range(n):
print(' ' * (n - i - 1),end = '')
print('*' * (2 * i + 1))
for i in range(n):
i = n - i - 2
print(' ' * (n - i - 1), end='')
print('*' * (2 * i + 1))
draw(10)
实例24:斐波那契数列II
题目 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
def f(n):
L1 = [1,2]
L2 = [2,3]
L3 = []
for i in range(n):
L1.append(L1[-1] + L1[-2]) #分母
L2.append(L2[-1] + L2[-2])
L3.append(L2[i] / L1[i])
print('L1:',L1)
print('L2:',L2)
print('L3:',L3)
return sum(L3)
print(f(3))
实例25:阶乘求和
题目 求1+2!+3!+…+20!的和
#题目 求1+2!+3!+…+20!的和
def f(n):
if n > 1:
return n * f(n - 1)
else:
return 1
s = 0
for i in range(1,21):
s += f(i)
print(s)
实例26:递归求阶乘
def f(n):
if n > 1:
return n * f(n - 1)
else:
return 1
print(f(5))
实例27:递归输出
题目 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
如果不使用递归
s = input("请输入字符")
for i in range(len(s)):
print(s[-(i + 1)])
使用递归
def rec(string):
if len(string)!=1:
rec(string[1:])
print(string[0],end='')
rec(input('string here:'))
实例28:递归求等差数列
题目有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
def f(n):
if n == 1:
return 10
else:
return f(n - 1) + 2
print(f(5))
实例29:反向输出
题目
给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
n = input("请输入正整数")
def f(n):
print("它是{}位数".format(len(n)))
print(n[::-1])
f(n)
实例30:回文串
def f(n):
for i in range((len(n) - 1) // 2 - 1):
if n[i] != n[-(i + 1)]:
return False
else:
return True
s = input("请输入数字")
if f(s):
print("是回文串")
else:
print("不是回文串")
实例31:字母识词
题目 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
weekT={
'h':'thursday',
'u':'tuesday'}
weekS={
'a':'saturday',
'u':'sunday'}
week={
't':weekT,
's':weekS,
'm':'monday',
'w':'wensday',
'f':'friday'}
a=week[str(input('请输入第一位字母:')).lower()]
if a==weekT or a==weekS:
print(a[str(input('请输入第二位字母:')).lower()])
else:
print(a)