实例 001:数字组合
题目 有四个数字: 1、2 、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
程序分析 遍历全部可能,把有重复的剃掉。
total=0
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if ((i!=j)and(j!=k)and(k!=i)):
print(i,j,k)
total+=1 print(total)
12345678
简便方法 用 itertools 中的 permutations 即可。
import itertools sum2=0
a=[1](#1),[2](#2),[3](#3),[4](#4)
for i in itertools.permutations(a,3):
print(i)
sum2+=1 print(sum2)
12345678
实例 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,求应发放奖金总数?
程序分析 分区间计算即可。
profit=int(input('Show me the money: '))
bonus=0
thresholds=[100000](#100000),[100000](#100000),[200000](#200000),[200000](#200000),[400000](#400000)
rates=0.1,0.075,0.05,0.03,0.015,0.01 for i in range(len(thresholds)):
if profit<=thresholdsi:
bonus+=profit*ratesi
profit=0
break else:
bonus+=thresholdsi*ratesi
profit-=thresholdsi bonus+=profit*rates-1
print(bonus)
1234567891011121314

实例 003:完全平方数
题目 一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
程序分析 因为 168 对于指数爆炸来说实在太小了,所以可以直接省略数学分析,用最朴素的方法来获取上限 :
n=0
while (n+1)**2-n*n<=168:
n+=1
print(n+1)
85
123456789
思路是: 最坏的结果是 n 的平方与 (n+1) 的平方刚好差 168 ,由于是平方的关系, 不可能存在比这更大的间隙。
至于判断是否是完全平方数,最简单的方法是:平方根的值小数为 0 即可。
结合起来:
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) 1234567
实例 004:这天第几天
题目 输入某年某月某日,判断这一天是这一年的第几天?
程序分析 特殊情况,闰年时需考虑二月多加一天:
def isLeapYear(y):
return (y%400==0 or (y%4==0 and y%100!=0)) DofM=[0](#0),[31](#31),[28](#28),[31](#31),[30](#30),[31](#31),[30](#30),[31](#31),[31](#31),[30](#30),[31](#31),[30](#30)
res=0
year=int(input('Year:'))
month=int(input('Month:'))
day=int(input('day:'))
if isLeapYear(year):
DofM[2](#2)+=1
for i in range(month):
res+=DofMi
print(res+day)
实例 005:三数排序
题目 输入三个整数 x,y,z,请把这三个数由小到大输出。
程序分析 练练手就随便找个排序算法实现一下,偷懒就直接调函数。
raw=\[\]
for i in range(3):
x=int(input('int%d: '%(i)))
raw.append(x)
for i in range(len(raw)):
for j in range(i,len(raw)):
if rawi>rawj:
rawi,rawj=rawj,rawi print(raw)
raw2=\[\]
for i in range(3):
x=int(input('int%d: '%(i)))
raw2.append(x)
print(sorted(raw2))
123456789101112131415161718
实例 006:斐波那契数列题目 斐波那契数列。
程序分析 斐波那契数列 ( Fibonacci sequence),从 1,1 开始,后面每一项等于前面两项之和。图方便就递归实现,图性能就用循环。
递归实现def Fib(n):
return 1 if n<=2 else Fib(n-1)+Fib(n-2)
print(Fib(int(input())))
朴素实现
target=int(input()) res=0
a,b=1,1
for i in range(target-1):
a,b=b,a+b print(a)
12345678910111213
实例 007 :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](#4).append('c')
print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)
print('e=',e)
============ RESTART: F:\PyWorkspace\Python100\100examples\007.py ============
a= 1, 2, 3, 4, \['a', 'b', 'c', 5] b= 1, 2, 3, 4, \['a', 'b', 'c', 5] c= 1, 2, 3, 4, \['a', 'b', 'c'] d= 1, 2, 3, 4, \['a', 'b', 'c']
e= 1, 2, 3, 4, \['a', 'b']
1234567891011121314151617181920212223
实例 008:九九乘法表
题目 输出 9*9 乘法口诀表。
程序分析 分行与列考虑,共 9 行 9 列, i 控制行, j 控制列。
for i in range(1,10):
for j in range(1,i+1):
print('%d*%d=%2ld '%(i,j,i*j),end='')
print()
1234
实例 009:暂停一秒输出题目 暂停一秒输出。
程序分析 使用 time 模块的 sleep() 函数。
import time
for i in range(4):
print(str(int(time.time()))-2:)
time.sleep(1)
1234
实例 010:给人看的时间
题目 暂停一秒输出,并格式化当前时间。
程序分析 同 009.
import time
for i in range(4):
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
time.sleep(1) 12345
实例 011:养兔子
题目 有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析 我认为原文的解法有点扯,没有考虑 3 个月成熟的问题,人家还是婴儿怎么生孩子?考虑到三个月成熟, 可以构建四个数据, 其中:一月兔每个月长大成为二月兔,二月兔变三月兔,三月兔变成年兔,成年兔(包括新成熟的三月兔)生等量的一月兔。
month=int(input(' 繁殖几个月?: ')) month_1=1
month_2=0
month_3=0
month_elder=0
for i in range(month):
month_1,month_2,month_3,month_elder=month_elder+month_3,month_1,month_2,month_el
der+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)
123456789101112
实例 012 : 100 到 200 的素数
题目 判断 101-200 之间有多少个素数,并输出所有素数。
程序分析 判断素数的方法: 用一个数分别去除 2 到 sqrt( 这个数 ) ,如果能被整除, 则表明此
数不是素数,反之是素数。 用 else 可以进一步简化代码 .
import math
for i in range(100,200):
flag=0
for j in range(2,round(math.sqrt(i))+1):
if i%j==0:
flag=1
break if flag:
continue
print(i)
print('\nSimplify the code with "else"\n')
for i in range(100,200):
for j in range(2,round(math.sqrt(i))+1):
if i%j==0:
break
else:
print(i)
123456789101112131415161718192021
实例 013:所有水仙花数
题目 打印出所有的 " 水仙花数 " ,所谓 " 水仙花数 " 是指一个三位数,其各位数字立方和等于
该数本身。 例如: 153 是一个 "水仙花数 " ,因为 153=1 的三次方+ 5 的三次方+ 3 的三次方。程序分析 利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。
for i in range(100,1000):
s=str(i)
one=int(s-1)
ten=int(s-2)
hun=int(s-3)
if i == one**3+ten**3+hun**3:
print(i)
1234567

实例 014:分解质因数
题目 将一个整数分解质因数。例如:输入 90,打印出 90=233*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 i in range(2,int(target+1)):
if target%i==0:
print("%d"%i,end='')
if target==i:
flag=1
break
print('*',end='') target/=i
break
1234567891011121314151617181920212223242526
实例 015:分数归档
题目 利用条件运算符的嵌套来完成此题:学习成绩 >=90 分的同学用 A 表示, 60-89 分之间的用 B 表示, 60 分以下的用 C 表示。
程序分析 用条件判断即可。
points=int(input(' 输入分数: '))
if points>=90:
grade='A'
elif points<60:
grade='C'
else:
grade='B'
print(grade) 12345678
实例 016:输出日期
题目 输出指定格式的日期。
程序分析 使用 datetime 模块。
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)
1234567
实例 017:字符串构成
题目 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析 利用 while 或 for 语句 ,条件为输入的字符不为 ' \n '。
string=input(" 输入字符串: ")
alp=0 num=0 spa=0 oth=0
for i in range(len(string)):
if stringi.isspace():
spa+=1
elif stringi.isdigit():
num+=1
elif stringi.isalpha():
alp+=1
else:
oth+=1 print('space: ',spa)
print('digit: ',num)
print('alpha: ',alp)
print('other: ',oth)
12345678910111213141516171819
实例 018:复读机相加
题目 求 s=a+aa+aaa+aaaa+aa... a 的值,其中 a 是一个数字。例如 2+22+222+2222+22222( 此时共有 5 个数相加 ),几个数相加由键盘控制。
程序分析 用字符串解决。
a=input(' 被加数字: ')
n=int(input(' 加几次?: ')) res=0
for i in range(n):
res+=int(a)
a+=a[0](#0)
print(' 结果是: ',res) 1234567
实例 019:完数
题目 一个数如果恰好等于它的因子之和,这个数就称为 " 完数 " 。例如 6=1+2+3.编程找出
1000 以内的所有完数。
程序分析 将每一对因子加进集合,在这个过程中已经自动去重。最后的结果要求不计算其本身。
def factor(num):
target=int(num)
res=set()
for i in range(1,num):
if num%i==0:
res.add(i)
res.add(num/i)
return res
for i in range(2,1001):
if i==sum(factor(i))-i:
print(i)
123456789101112
实例 020:高空抛物
题目 一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第 10
次落地时,共经过多少米?第 10 次反弹多高?程序分析 无
high=200.
total=100
for i in range(10):
high/=2
total+=high
print(high/2)
print(' 总长: ',total) 1234567