目录
实例001:数字组合
实例002:“个税计算”
实例003:完全平方数
实例004:这天第几天
实例005:三数排序
实例006:斐波那契数列
实例007:copy
实例008:九九乘法表
实例009:暂停一秒输出
实例010:给人看的时间
实例011:养兔子
实例012:100到200的素数
实例013:所有水仙花数
实例014:分解质因数
实例015:分数归档
实例016:输出日期
实例017:字符串构成
实例018:复读机相加
实例019:完数
实例020:高空抛物
实例021:猴子偷桃
实例022:比赛对手
实例023:画菱形
实例024:斐波那契数列II
实例025:阶乘求和
实例026:递归求阶乘
实例027:递归输出
实例028:递归求等差数列
实例029:反向输出
实例030:回文数
实例031:字母识词
实例032:反向输出II
实例033:列表转字符串
实例034:调用函数
实例035:设置输出颜色
实例036:算素数
实例037:排序
实例038:矩阵对角线之和
实例039:有序列表插入元素
实例040:逆序列表
实例041:类的方法与变量
实例042:变量作用域
实例043:作用域、类的方法与变量
实例044:矩阵相加
实例045:求和
实例046:打破循环
实例047:函数交换变量
实例048:数字比大小
实例049:lambda
实例050:随机数
实例051:按位与
实例052:按位或
实例053:按位异或
实例054:位取反、位移动
实例055:按位取反
实例056:画圈
实例057:画线
实例058:画矩形
实例059:画图(丑)
实例060:字符串长度
实例061:杨辉三角
实例062:查找字符串
实例063:画椭圆
实例064:画椭圆、矩形
实例065:画组合图形
实例066:三数排序
实例067:交换位置
实例068:旋转数列
实例069:报数
实例070:字符串长度II
实例071:输入和输出
实例072:创建链表
实例073:反向输出链表
实例074:列表排序、连接
实例075:不知所云
实例076:做函数
实例077:遍历列表
实例078:字典
实例079:字符串排序
实例080:猴子分桃
实例081:求未知数
实例082:八进制转十进制
实例083:制作奇数
实例084:连接字符串
实例085:整除
实例086:连接字符串II
实例087:访问类成员
实例088:打印星号
实例089:解码
实例090:列表详解
实例091:time模块
实例092:time模块II
实例093:time模块III
实例094:time模块IV
实例095:转换时间格式
实例096:计算复读次数
实例097:磁盘写入
实例098:磁盘写入II
实例099:磁盘读写
实例100:列表转字典
实例001:数字组合
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
L= [1,2,3,4]
result= []
count= 0
for iin L: # 作为百位数
for jin L: # 作为十位数
for kin L: #作为个位数
if i!= jand i!= kand j!=k:
A= i*100 + j*10 + k
result.append(A)
count+= 1
print(count,'个,它们分别是:',result)
或者采用itertools 模块中的permutations 更简单的实现
import itertools
result = [i*100+j*10+k for i,j,k in itertools.permutations([1,2,3,4],3)]
print(result)
实例题002:个税计算”
题目 企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
def bonus(I):
if I < 10:
return I * 0.1
elif I < 20 and I >10:
return 1 + (I-10)*0.075
elif I < 40 and I > 20:
return 1 + 0.75 + (I-20) * 0.05
elif I < 60 and I > 40:
return 1 + 0.75 + 1 + (I - 40) * 0.03
elif I < 100 and I > 60:
return 1 + 0.75 + 1 + 0.6 + (I-60) * 0.015
else:
return 1 + 0.75 + 1 + 0.6 + 0.06 + (I - 60) * 0.01
I= int(input('请输入今年的利润I= ') )
A= bonus(I)
print(A)
或者采用循环方法
level = [0,100000,200000,400000,600000,1000000,float('inf')]
rate = [0,10,7.5,5,3,1.5,1]
def bonus():
profit = float(input('请输入企业的利润:'))
result = 0
for i in range(1,len(level)): #从1开始循环,避免i-1时出现-1,也是两个列表前面加0的原因,用于占位。
if profit <= level[i]:
result += (profit - level[i-1]) * (rate[i]/100)
return result
# break #不再往下计算,跳出循环
else:
result += (level[i]-level[i-1])*(rate[i]/100)
return '%.2f' %result
print(bonus())
递归方法
level = [0, 100000, 200000, 400000, 600000, 1000000, float('inf')]
rate = [0, 10, 7.5, 5, 3, 1.5, 1]
test = float(input('请输入企业的利润:'))
def calc_bonus(profit):
if profit == 0:
return 0
for i in range(len(level)):
if profit <= level[i]:
return calc_bonus(level[i - 1]) + (profit - level[i - 1]) * rate[i] / 100
A= calc_bonus(test)
print(A)
注意,在level 的最后我加了一个float('inf'),这是因为最后测试的时候,发现如果利润大于100万就计算不出来了,原来是大于100万的数字无法满足 profit <= level[i] 这个条件,自然也就无法计算。而 float('inf')在一般情况下可以表示无穷大。
实例003:完全平方数
题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
def sqrt():
for Bin range(1,168): #从1开始一直试到167
for Ain range(1,B): #从1一直是到i,因为它不可能超越i
if B**2 -A**2 == 168: #如果i² - j² = 168
print (B**2 - 268,end = ' ') #要求的数就等于 i² - 268,因为这个数+268才等于i²
C= sqrt()
或者
n=0
while (n+1)**2-n*n<=168:
n+=1
for i in range((n+1)**2):
if i**0.5==int(i**0.5) and (i+168)**0.5==int((i+168)**0.5):
print(i-100,end = ' ')
实例004:这天第几天
题目 输入某年某月某日,判断这一天是这一年的第几天?
思路:首先需要考虑平闰年天数不同的问题。
其次计算天数时,已经过去的月份包含的天数是可以确定的,因此我们可以提前计算出。
最后根据“天数= 至上一个月已过天数+ 这个月已过天数”写出程序
day_of_month =[0,31,28,31,30,31,30,31,31,30,31,30]
partdays = 0
'''
def funcname(paralist):
function body
'''
def get_date():#获取用户输入日期 年月日
year = int(input('Year:'))
month = int(input('Month:'))
day = int(input('day:'))
return (year,month,day) #返回元组 一个函数可以返回多个值
def is_leap(year):#判断一个年份是否闰年
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
return True
else:
return False
def cal_days(year,month,day):# 计算当前这一天是当年的第几天
partdays = 0
for i in range(month): # 计算当前月份之前的所有天数
partdays += day_of_month[i]
if is_leap(year) and month > 2:
return partdays + day +1 # 到当前这一天为止所有天数totalday += 1
else:
return partdays + day
def main():
year,month,day = get_date()
days = cal_days(year,month,day)
print('{}年{}月{}日是这年的第{}天'.format(year,month,day,days))
main()
或者更简洁方法:
方法3
import datetime
def func3(year, month, day):
date = datetime.date(year, month, day)
return date.strftime('%j') # %j十进制表示的每年的第几天
print(func3(2020, 12, 20)) # 355
实例005:三数排序
题目 输入三个整数x,y,z,请把这三个数由小到大输出。
我们不妨把题目改为:请用户在一行中输入三个整数,用逗号隔开,并将这三个数从小到大排列输出。注意,用户的任何不合法输入都要返回重新输入,比如把逗号输成了全角或其他符号、不小心输入了字母或空格、输入不够或者超过3个数字等等。
def sort_user_input():
user_input= input('请输入三个整数,用逗号分隔:')
input_limit= list(map(str,range(10)))+[',']#做一个包含0-9以及','的列表,用于之后判断用户的输入是不是在这个列表里,由于用户输入的时候都是字符串,所以还需要将列表元素中的数字转换成字符串。这里我们用到了高级函数 map。
for iin user_input:
if(not iin input_limit) or ('' in user_input.split(',')):#后面一个条件经验证可以筛选重复输入了','的情况
print('你的输入有误,请重新输入')
return sort_user_input()
if len(user_input.split(','))!=3:#判断是否为3个数字
print("你输入的数字个数不正确!请重新输入")
return sort_user_input()
return sorted(list(map(int,user_input.split(','))))#用map函数将用逗号分割后的列表中的元素转换成int类型,然后进行排序。
A= sort_user_input()
print(A)
6.斐波那契数列
斐波那契数列(Fibonaccisequence),从1, 1开始,后面每一项等于前面两项之和。图方便就递归实现,图性能就用循环。
递归方法
def Fib(n):
if n <= 2:
return 1
return Fib(n-1) + Fib(n-2)
print(Fib(8),end=' ')
循环
target=int(input('请输入n项数列n=:'))
res=0
a,b=1,1
for iin range(target-1):
a,b=b,a+b
print(a,end=' ')
7.copy
将一个列表的数据复制到另一个列表中。使用列表[:],拿不准可以调用copy模块。
import copy
a= [1,2,3,4,['a','b']]
b= a# 赋值
c= a[:] # 浅拷贝
d= copy.copy(a) # 浅拷贝
e= copy.deepcopy(a) # 深拷贝
a.append(5)
a[4].append('c')
print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)
print('e=',e)
8.输出九九乘法表
for iin range(1,10):
for jin range(1,i+1):
print('{}x{}={}\t'.format(j,i,i*j),end = '')
print() # print()--print一个空内容的目的是为了让它在每一行进行换行
9.暂停一秒输出 (使用 time模块的 sleep() 函数)
import time
for iin range(4):
print(str(int(time.time()))[-2:])
time.sleep(1)
10.给人看的时间 (暂停一秒输出,并格式化当前时间。)
import time
for iin range(4):
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
time.sleep(1)
11.养兔子
题目 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析 我认为原文的解法有点扯,没有考虑3个月成熟的问题,人家还是婴儿怎么生孩子?
考虑到三个月成熟,可以构建四个数据,其中:一月兔每个月长大成为二月兔,二月兔变三月兔,三月兔变成年兔,成年兔(包括新成熟的三月兔)生等量的一月兔。
month=int(input('繁殖几个月?:'))
month_1=1
month_2=0
month_3=0
month_elder=0
for iin range(month):
month_1,month_2,month_3,month_elder=month_elder+month_3,month_1,month_2,month_elder+month_3
print('第%d个月共'%(i+1),month_1+month_2+month_3+month_elder,'对兔子')
print('其中1月兔:',month_1)
print('其中2月兔:',month_2)
print('其中3月兔:',month_3)
print('其中成年兔:',month_elder)
12.实例012:100到200的素数
题目 判断101-200之间有多少个素数,并输出所有素数。
程序分析 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。用else可以进一步简化代码.
import math
for iin range(100,200):
flag=0
for jin range(2,round(math.sqrt(i))+1):
if i%j==0:
flag=1
break
if flag: # 注意if的位置!
continue
print(i,end=',')
print('\nSimplify the code with "else"\n')
另一种方法
for iin range(100,200):
for jin range(2,round(math.sqrt(i))+1):
if (i% j) == 0:
break
else:
print(i)
flag= 1
def F():
for iin range(100,201):
for jin range(2,i):
if i% j!= 0:
flag= 1
else:
flag= 0
return flag
if flag== 1:
print('素数')
else:
print('不是素数')
13.实例013:所有水仙花数
题目 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析 利用for循环控制100-999个数,每个数分解出个位,十位,百位。
for iin range(100,1000):
s= str(i)
one= int(s[2])
ten= int(s[1])
hun= int(s[0])
if i== one**3 + ten**3 + hun**3:
print(i)
14.实例014:分解质因数
**将一个整数分解质因数。例如:输入90,打印出90=2*3*3*5。
分析:**根本不需要判断是否是质数,从2开始向数本身遍历,能整除的肯定是最小的质数。
target=int(input('输入一个整数:'))
print(target,'= ',end='')
if target<0:
target=abs(target)
print('-1*',end='')
flag=0
if target<=1:
print(target)
flag=1
while True:
if flag:
break
for iin range(2,int(target+1)):
if target%i==0:
print("%d"%i,end='')
if target==i:
flag=1
break
print('*',end='')
target/=i
break
15、实例015:分数归档
**利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
points= float(input('输入分数:'))
if points>= 90:
grade= 'A'
elif points<60:
grade= 'C'
else:
grade= 'B'
print(grade)
16.实例016:输出日期
*输出指定格式的日期。 **使用 datetime模块。
import datetime
print(datetime.date.today())
print(datetime.date(2021,12,3))
print(datetime.date.today().strftime('%d/%m/%Y'))
day=datetime.date(2012,12,3)
day=day.replace(year=day.year+28)
print(day)
17.实例017:字符串构成
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
分析:利用 while 或 for 语句,条件为输入的字符不为 '\n'。
string= str(input('请输入一行字符l='))
alpha= 0
space= 0
digit= 0
other= 0
for iin range(len(string)):
if string[i].isalpha():
alpha+= 1
elif string[i].isspace():
space+= 1
elif string[i].isdigit():
digit+= 1
else:
other+= 1
print('alpha: ',alpha)
print('space: ',space)
print('digit: ',digit)
print('other: ',other)
可以探讨一下如何输出一个字典。比如-->{字母:10,空格:3,数字:8 ,其他:2}
18.实例018:复读机相加
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
分析:用字符串解决。
a= 2
n= int(input("请输入几个数相加:"))
A= ''
B= []
s= 0
for iin range(n):
A+= '2'
B.append(int(A))
print(B)
for jin range(len(B)):
s+= B[j]
print(s)
题目答案:
a=input('被加数字:')
n=int(input('加几次?:'))
res=0
for iin range(n):
res+= int(a)
a+= a[0] # 没看明白,a不是一个数吗?难道a是一个列表?换成a=a+a[i]效果一样
print(res)
19.完数
**题目:**一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
**程序分析:**将每一对因子加进集合,在这个过程中已经自动去重。最后的结果要求不计算其本身。
因子:整除为0,
https://zhuanlan.zhihu.com/p/342422332