题目1: 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
# 正常
num =[]
for a in range(1,5):
for b in range(1,5):
for c in range(1,5):
if (a != b and a!= c and b!=c) : # if a != b != c 只判断了a不等于b,b不等于c,没有判断a和c的关系
num.append(a*100 + b*10 + c)
print(num)
# 简写:
x = [1,2,3,4]
num = [i*100 + j*10 + k for i in x for j in x for k in x if (j != i and k != j and k != i)]
# itertools ,结果需处理
import itertools
num = []
x=[1,2,3,4]
for i in itertools.permutations(x,3):
num.append(i)
print(num)
题目3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
"""
分析:
a + 100 = b**2 + 168 = c**2
168 = c**2 - b**2
因为b小于c,且b,c都属于168,所以b∈c
for c in range(1,168):
for b in range(1,c):
if c**2-b**2 == 168:
a = b**2 - 100
print(a)
"""
题目4:日期天数计算
python复制代码
题目4:输入某年某月某日,判断这一天是这一年的第几天?
"""
分析:
1. 月份 + 日 = 天数;
2. 1,4,9,11月 固定30天,3,5,6,8,10,12月 固定31天, 2月闰年28天,非润29天;
3. 考虑系统语言计算差会存在1天误差,所以起始天数为1;
def get_days(year,month,day):
days = [31,28,31,30,31,60,31,31,30,31,30,31]
sum = 1 # 不能是0,日期从1开始算
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0) :
days[2] = days[2]+1
else:
days[2] = days[2]
for i in range(month-1):
sum += days[i]
return sum
get_days(2021,3,1)
题目18:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制.
"""
分析:
传入2个参数
1.总的几个数相加即最长的长度: len = 5
2.传入的n 是什么: 如 2 22 222 2222 22222
找规律:
2 = 2*10**0 n = 2 幂 = (len-1)
22 = 2*10**1+2
222 = 2*10**2 + 22
2222 = 2*10**3 + 222
得公式: tmp = n*10**(len-1) + tmp
def get_sum(n,len):
sum = 0 # 输出和
tmp = 0 # 分解的值
for a in range(1,len+1): # a 浮标 = 幂
tmp = n*10**(a-1) + tmp
sum += tmp
return sum
get_sum(2,5)
题目19:完数判断
python复制代码
题目19:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
"""
分析: 同14先找因子 然后 n = sum(因子和)
for a in range(1, 1000):
sum = 0
for b in range(1, a):
if a % b == 0:
sum += b
if sum == a:
print(a)
题目21:猴子吃桃
python复制代码
题目21:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个.
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
"""
分析: 每次1/2+1,倒推即最后剩下的(n+1)*2 = n 前一天的
即1 1534/2-1 = 766
2 766/2-1 = 382
3 382/2-1 = 190
4 190/2-1 = 94
5 94/2 -1 = 46
6 46/2 -1 = 22
7 22/2 -1 = 10
8 10/2 -1 = 4
9 4/2 -1 = 1
def peach(rest):
rest = 1
for a in range(1,11): # 第10天剩1个,实际是第九天吃完后还剩1个 a = 循环天数
if a <= 9:
rest = (rest+1)*2
a = a + 1
else:
break
return rest
peach(10)
题目24:分数序列求和
python复制代码
题目24:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
"""
分析:
2 3 5 8 13 21
1 2 3 5 8 13
前20项之和首先得得到第20个数是什么,然后每个数相加
def add_sum(n): # n第几个数
a = 1 # 分母
b = 1 # 分子
sum = 0
for i in range(1,n+1):
a,b = b,a+b
sum += b/a
return sum
add_sum(20)
题目25:阶乘累加
python复制代码
题目25:求1+2!+3!+...+20!的和。
"""
分析:24题是累加的概念,这里是累乘
def mul_sum(n): # n第几个数
sum = 0
tmp = 1
for x in range(1,n+1):
tmp *= x
sum += tmp
return sum
mul_sum(3)
题目26:阶乘递归
python复制代码
题目26:利用递归方法求5!。
"""
分析:25题是累乘,26是简单化了
def mul_sum(n): # n第几个数
tmp = 1
for x in range(1,n+1):
tmp *= x
return tmp
mul_sum(5)
题目28:年龄推理
python复制代码
题目28:有5个人坐在一起.
问第五个人多少岁?他说比第4个人大2岁。
问第4个人岁数,他说比第3个人大2岁。
问第3个人,又说比第2人大2岁。
问第2个人,说比第1个人大2岁。
最后问第一个人,他说是10岁。请问第五个人多大?
"""
分析:
递归思想 每前1个人+2岁即可;
age = 10
for i in range(1,5):
if i <=4:
age += 2
else:
age
print(age)
题目80:猴子分桃问题
python复制代码
题目80:海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份.
第三、第四、第五只猴子都是这样做的.
问海滩上原来最少有多少个桃子?
"""
分析: 同21题相似 每5份多1剩4份,连续5次,此外,要考虑分摊除尽的问题,桃子没法分成小于1个;
def monekys(n):
if n==num:
return(4*x) #最后剩的桃子的数目
else:
return(monekys(n+1)*5/4+1)
x=1
while 1:
count=0
for i in range(1,num):
if monekys(i)%4==0 :
count=count+1
if count==num-1:
print("海滩上原来最少有%d个桃子" % int(monekys(0)))
break
else:
x=x+1
题目83:奇数组合数
python复制代码
题目83:求0---7所能组成的奇数个数。
"""
分析:
0-7 共8个数,个位奇数为1,3,5,7,2位数及以上首位不可以为0;
则: 组成1位数是4个
组成2位数是7*4个
组成3位数是7*8*4个
组成4位数是7*8*8*4个
.... 依次类推
L = []
sum = 0
for i in range(1,9): # i等于位数
if i == 1 :
num = 4
sum += num
if i >=2:
num = 4*7*8**(i-2)
sum += num
print(sum)
题目85:9的倍数验证
python复制代码
题目85:输入一个奇数,然后判断最少几个 9 除于该数的结果为整数。
"""
i = int(input('输入奇数: '))
sum = 9
while sum % i != 0:
sum = sum * 10 + 9 # 循环赋值
print(sum)
题目81:数学等式验证
python复制代码
题目81:809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
"""
分析: 809*ab 四位数 得到ab<=12
8*ab 两位数 得到ab<=12
9*ab 三位数 得到ab>11
所以ab = 12
for i in range(10,101):
if 809 * i == 800 * i + 9 * i:
if 8 * i < 100 :
if 9 * i > 100 and 9 * i < 1000:
print(i ,809 * i)
二、字符串操作
题目13:水仙花数
python复制代码
题目13:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
"""
// 取整 % 取余
num = []
for n in range(100,1000):
a = n//100
b = n//10%10
c = n%10
if n == a**3 + b**3 + c**3 :
num.append(n)
print(num)
题目89:某个公司采用公用电话传递数据,数据是四位的整数.
在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
"""
分析: 即不断赋值和替换的过程。
n = 1234
加5: 6789
和/10: 6789 # 题目表达不清
交换: 9876
n = str(input())
a = []
for i in range(4):
a.append((int(n[i])+5)%10)
a[0],a[3] = a[3],a[0]
a[1],a[2] = a[2],a[1]
print("".join('%s' %s for s in a))
题目98:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。
"""
import sys
str = input('请输入一个字符串:\n')
with open('test1.txt','w') as f:
f.write(str.upper())
题目60:字符串长度
python复制代码
题目60:计算字符串长度。
"""
str = 'abc'
print(len(str))
题目86:字符串连接
python复制代码
题目86:两个字符串连接程序。
"""
a = "Kobe"
b = "24"
c = a + b
print(c)
题目31:星期判断
python复制代码
题目31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
"""
分析:
week=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
特殊情况即首字母为T 和S的情况,简单判断即可;
fir = input("第1个字母:")
if fir == 'M':
print("周一")
elif fir == 'W':
print("周三")
elif fir == 'F':
print("周五")
elif fir == 'T':
s = input("第2个字母:")
if s == 'u':
print("周二")
elif s == 'h':
print("周四")
elif fir == 'S':
s = input("第2个字母:")
if s == 'a':
print("周六")
elif s == 'u':
print("周日")
else :
print("输入错误")
三、列表与字典操作
题目5:三数排序
python复制代码
题目5:输入三个整数x,y,z,请把这三个数由小到大输出。
"""
def px_3(a,b,c):
num = [a,b,c]
num.sort()
return num
px_3(1,8,2)
题目38:矩阵对角线
python复制代码
题目38:求一个3*3矩阵主对角线元素之和。
"""
分析:
1.主对角线元素之和 ---> 知道定义很重要
在一个n阶方阵(或是n阶行列式)中,从左上角到右下角这一斜线方向上的n个元素所在的对角线,叫做n阶方阵(或行列式)的主对角线。
2.设置一个双重for循环控制输入二维数组,再将n[i][j]累加后输出.
# 未知矩阵
if __name__ == '__main__':
a = []
sum = 0.0
for i in range(3):
a.append([])
for j in range(3):
a[i].append(float(input("input num:\n")))
for i in range(3):
sum += a[i][i]
print (sum)
# 已知矩阵
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
sum = 0
for i in range(0, 3):
sum += m[i][i]
print(sum)
题目44:矩阵相加
python复制代码
题目44:两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:
"""
X = [[12,7,3],
[4 ,5,6],
[7 ,8,9]]
Y = [[5,8,1],
[6,7,3],
[4,5,9]]
分析: 同38一样;
z = []
for i in range(3):
z.append([])
for i in range(3):
for j in range(3):
z[i].append(x[i][j]+y[i][j])
print(z)
题目68:数组循环移位
python复制代码
题目68:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数
"""
分析: 因为总长度不变,即最后一项变为第一个,最后第二个变为整数第二个
即a[i] = a[i+m] , a[len(a)-1] = a[i]
逻辑和方法对了,其实就很简单了
a = [1,2,3,4,5,6,7] # 测试列表
m = 5 # 设置向后移动 3 位
for i in range(m):
a.insert(0, a.pop()) # pop 剔除默认最后一位,insert加入指定位置指定数;
print(a)
题目69:约瑟夫环问题
python复制代码
题目69:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
"""
n = [i+1 for i in range(20)]
i = 1
while len(n) > 1:
if i % 3 == 0:
n.pop(0)
else:
n.insert(len(n),n.pop(0)) # 同68 考验逻辑
i += 1
print(n)
题目72:创建链表
python复制代码
题目72:创建一个链表。
"""
l=[ input("please input a number:\n") for i in range(5)]
print(l)
题目73:反向链表
python复制代码
题目73:反向输出一个链表。
"""
l=[ input("please input a number:\n") for i in range(5)]
l.reverse()
print(l)
题目100:列表转字典
python复制代码
题目100:列表转换为字典。
"""
# 从列表创建字典
i = ['a','b','c']
l = [1,2,3]
b=dict(zip(i,l))
print(b)
题目39:数组插入排序
python复制代码
题目39:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
"""
分析: 题目其实说的不太明确,所以要挖掘隐藏条件:
已经排好序则代表按顺序大小排, 新输入的数,也需要从小到大排;
所以思路整体上就是循环比大小;
a = [1,2,3,5,6,7]
插入数字 4
a.append(4)
sorted(a)
但显然题目考察的是希望自己能写这个逻辑,纯循环遇上数字较多的效率会比较低,所以可以折半选取再循环;
a = [1,2,3,5,6,7]
b = 4
for i in range(len(a)-1):
if b >= a[i] and b <= a[i+1]:
a.insert(i+1, b)
break
elif i == (len(a)-2):
a.append(b)
break
print(a)
题目67:数组极值交换
python复制代码
题目67:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
"""
分析: 利用下标和max,min即可;
a = [1,2,3,4,5]
for i in range(len(a)):
if a[i] == max(a):
a[0],a[i]=a[i],a[0] # 不可分开写,否则会变成[6, 3, 4, 5, 6] 先后赋值;
if a[i] == min(a):
a[len(a)-1],a[i]=a[i],a[len(a)-1]
print(a)
# 法2
a = [1,3,4,5,6]
print(a)
# 最小的放到最后
min = min(a)
a.remove(min)
a.append(min)
# 最大的放到最前面
max = max(a)
a.remove(max)
a.insert(0,max)
print(a)
题目79:字符串排序
python复制代码
题目79:字符串排序。
"""
# 字符串输入寄了
L = []
L.sort()
print(L)
题目40:将一个数组逆序输出。
"""
分析: 和29,32一样,python3中直接可输出;
a = ["x","y","z"]
b = a[::-1]
四、文件操作
题目97:写入文件
python复制代码
题目97:从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。
"""
filename = input('输入文件名:\n')
fp = open(filename , "w+")
ch = ''
while '#' not in ch:
fp.write(ch)
ch = input('输入字符串:\n')
fp.close()
题目98:文件保存
python复制代码
题目98:从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。
"""
import sys
str = input('请输入一个字符串:\n')
with open('test1.txt','w') as f:
f.write(str.upper())
题目99:文件合并排序
python复制代码
题目99:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。
"""
with open('test1.txt') as f1, open('test2.txt') as f2, open('2.txt', 'w') as f3:
for a in f1:
b = f2.read()
c = list(a + b)
c.sort()
d = ''
d = d.join(c)
f3.write(d)
题目91:时间函数举例1。
"""
import time
print time.ctime(time.time())
print time.asctime(time.localtime(time.time()))
print time.asctime(time.gmtime(time.time()))
题目92:时间函数示例2
python复制代码
题目92:时间函数举例2。
"""
import time
start = time.time()
for i in range(3000):
print(i)
end = time.time()
print (end - start)
题目93:时间函数示例3
python复制代码
题目93:时间函数举例3。
"""
if __name__ == '__main__':
import time
start = time.clock()
for i in range(100):
print(i)
end = time.clock()
print('different is %6.3f' % (end - start))
题目94:反应速度测试
python复制代码
题目94:时间函数举例4,一个猜数游戏,判断一个人反应快慢。 别看代码长,其实不难
"""
if __name__ == '__main__':
import time
import random
play_it = input('do you want to play it.(\'y\' or \'n\')')
while play_it == 'y':
c = input('input a character:\n')
i = random.randint(0,2**32) % 100
print ('please input number you guess:\n')
start = time.clock()
a = time.time()
guess = int(input('input your guess:\n'))
while guess != i:
if guess > i:
print('please input a little smaller')
guess = int(input('input your guess:\n'))
else:
print('please input a little bigger')
guess = int(input('input your guess:\n'))
end = time.clock()
b = time.time()
var = (end - start) / 18.2
print (var)
# print 'It took you %6.3 seconds' % time.difftime(b,a))
if var < 15:
print ('you are very clever!')
elif var < 25:
print ('you are normal!')
else:
print ('you are stupid!')
print ('Congradulations')
print ('The number you guess is %d' % i)
play_it = input('do you want to play it.')
题目59:画图,综合例子。
"""
分析: 考察tkinter包的使用
if __name__ == '__main__':
from Tkinter import *
canvas = Canvas(width = 300,height = 300,bg = 'green')
canvas.pack(expand = YES,fill = BOTH)
x0 = 150
y0 = 100
canvas.create_oval(x0 - 10,y0 - 10,x0 + 10,y0 + 10)
canvas.create_oval(x0 - 20,y0 - 20,x0 + 20,y0 + 20)
canvas.create_oval(x0 - 50,y0 - 50,x0 + 50,y0 + 50)
import math
B = 0.809
for i in range(16):
a = 2 * math.pi / 16 * i
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
canvas.create_oval(x0 - 60,y0 - 60,x0 + 60,y0 + 60)
for k in range(501):
for i in range(17):
a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 + math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
for j in range(51):
a = (2 * math.pi / 16) * i + (2* math.pi / 180) * k - 1
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
mainloop()
题目63:椭圆绘制
python复制代码
题目63:画椭圆。
"""
分析: 考察tkinter包的使用
if __name__ == '__main__':
from Tkinter import *
x = 360
y = 160
top = y - 30
bottom = y - 30
canvas = Canvas(width = 400,height = 600,bg = 'white')
for i in range(20):
canvas.create_oval(250 - top,250 - bottom,250 + top,250 + bottom)
top -= 5
bottom += 5
canvas.pack()
mainloop()
题目64:图形组合
python复制代码
"""
题目64:利用ellipse 和 rectangle 画图。。
"""
if __name__ == '__main__':
from Tkinter import *
canvas = Canvas(width = 400,height = 600,bg = 'white')
left = 20
right = 50
top = 50
num = 15
for i in range(num):
canvas.create_oval(250 - right,250 - left,250 + right,250 + left)
canvas.create_oval(250 - 20,250 - top,250 + 20,250 + top)
canvas.create_rectangle(20 - 2 * i,20 - 2 * i,10 * (i + 2),10 * ( i + 2))
right += 5
left += 5
top += 10
canvas.pack()
mainloop()
题目65:艺术图案
python复制代码
题目65:一个最优美的图案。
"""
import math
class PTS:
def __init__(self):
self.x = 0
self.y = 0
points = []
def LineToDemo():
from Tkinter import *
screenx = 400
screeny = 400
canvas = Canvas(width = screenx,height = screeny,bg = 'white')
AspectRatio = 0.85
MAXPTS = 15
h = screeny
w = screenx
xcenter = w / 2
ycenter = h / 2
radius = (h - 30) / (AspectRatio * 2) - 20
step = 360 / MAXPTS
angle = 0.0
for i in range(MAXPTS):
rads = angle * math.pi / 180.0
p = PTS()
p.x = xcenter + int(math.cos(rads) * radius)
p.y = ycenter - int(math.sin(rads) * radius * AspectRatio)
angle += step
points.append(p)
canvas.create_oval(xcenter - radius,ycenter - radius,
xcenter + radius,ycenter + radius)
for i in range(MAXPTS):
for j in range(i,MAXPTS):
canvas.create_line(points[i].x,points[i].y,points[j].x,points[j].y)
canvas.pack()
mainloop()
if __name__ == '__main__':
LineToDemo()
题目23:菱形打印
python复制代码
题目23:打印出如下图案(菱形):
*
***
*****
*******
*****
***
*
"""
def pic(n):
for i in range(0,n):
a = abs(i - int(n/2))
b = n - abs(i - int(n/2))
print(" "*a+"*"*(b-a))
pic(7)
七、算法与数据结构
题目6:斐波那契数列
python复制代码
题目6:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、......。
"""
从第3个数起,每一个数等于前2个数的和;
num = f(n-1)+f(n-2) (n>=2)
def Fibonacci_sequence(n):
a, b = 0, 1
while n>0:
a, b, n = b, a + b, n - 1
print(a)
Fibonacci_sequence(10)
题目12:素数筛选
python复制代码
题目12:判断101-200之间有多少个素数,并输出所有素数。
"""
分析:
判断素数x方法: 从2-->(x-1)之间能有一个数被整除 则非素数;
num = []
for a in range(101,200):
for b in range(2,a-1):
if a%b == 0 :
break
else: # 这里位置不能写错,不然容易陷入无限循环;
num.append(a)
print(num)
题目22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
"""
分析: 直接可以得出答案,c和y, a和z,b和x ,用变成实现则将判断逻辑写下即可;
for a in ['x','y','z']:
for b in ['x', 'y', 'z']:
for c in ['x', 'y', 'z']:
if(a!=b)and(b!=c)and(c!=a) and (a!='x') and (c!='x') and (c!='z'):
print('a和%s比赛,b和%s比赛,c和%s比赛' %(a,b,c))
法2:
m=['a','b','c']
n=['x','y','z']
L=[]
for i in range(0,3):
for j in range(0,3):
L.append(m[i]+n[j])
L.remove('ax')
L.remove('ay')
L.remove('by')
L.remove('bz')
L.remove('cx')
L.remove('cz')
print(L)
题目61:杨辉三角生成
python复制代码
题目61:打印出杨辉三角形(要求打印出10行如下图)。
"""
分析: 首先要理解什么是杨辉三角,这是非常经典的一个题目;
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
杨辉三角的特性:
1.第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
2.每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。
即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。
def Yh_triangles():
L = [1]
while True:
yield L
L = [sum(i) for i in zip([0]+L, L+[0])]
def Yh_triangles(num = 10):
L = [[1]]
for i in range(1,num):
L.append([(0 if j== 0 else L[i-1][j-1])+ (0 if j ==len(L[i-1]) else L[i-1][j]) for j in range(i+1)])
return L
题目76:分段函数计算
python复制代码
题目76:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
"""
# 比较简单,直接上代码
def num(n):
sum = 0
if n%2 == 0 :
for i in range(1,int(n/2)+1):
sum += 1/(2*i)
return sum
if n%2 != 0 :
for i in range(1,int((n+1)/2)+1):
sum += 1/(2*i-1)
return sum
num(5)
# 同理,应用range()的步长会更高效;
def num(n):
sum_tmp = [1/i for i in range(n,0,-2)]
return sum(sum_tmp)
num(4)
题目77:循环输出列表
python复制代码
题目77:循环输出列表
"""
ls = ['Kobe','24','8']
for i in range(len(ls)):
print(ls[i])
题目78:最大年龄查找
python复制代码
题目78:找到年龄最大的人,并输出。请找出程序中有什么问题。
"""
person_age = {"li":18,"wang":50,"zhang":20,"sun":22}
def get_max(dict):
max_age = 0
for key, value in dict.items():
if value > max_age:
max_age = value
name = key
print(name)
print(max_age)
get_max(person_age)
题目8:输出 9*9 乘法口诀表。
"""
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
for a in range(1,10):
for b in range(1,10):
print( str(a),"*",str(b),"=",a*b )
题目9:延时输出
python复制代码
题目9:暂停一秒输出。
程序分析:使用 time 模块的 sleep() 函数。
"""
# 没有具体要求,能实现延迟即可;
import time
id = [1,2,3]
for i in range(len(id)):
print(i)
time.sleep(2)
题目14:质因数分解
python复制代码
题目14:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
"""
分析:
要找出全部因数比较容易,第一次写输出的是[2,3,5],没有考虑到重复因子的情况,所以要加while判断的逻辑;
def get_factor(n):
print ('{} = '.format(n), end=" ")
if not isinstance(n, int) or n <= 0 : # 判断变量是否是已知字段类型, 字符串可迭代
print ('请输入一个正确的数字 !')
exit(0)
elif n in [1] :
print ('{}'.format(n))
while n not in [1] : # 循环保证递归
for a in range(2, n + 1) :
if n % a == 0:
n //= a
if n == 1: # 这步很重要,判断关键
print (a)
else : # index 一定是素数
print ('{} *'.format(a), end=" ")
break
get_factor(10)
题目36:求100之内的素数。
"""
分析: 第12题做过如何判断素数,一模一样;
num = []
for a in range(1,100):
for b in range(2,a-1):
if a%b == 0 :
break
else: # 这里位置不能写错,不然容易陷入无限循环;
num.append(a)
print(num)
题目37:十数排序
python复制代码
题目37:对10个数进行排序。
"""
分析: 和第五题一样
依次输入10个数字;
def px_3(a,b,c....):
num = [a,b,c]
num.sort()
return num
同样方法:
num=[]
for i in range(1,11):
a=int(input('int%d: '%(i)))
num.append(a)
num.sort()
题目41:静态变量
python复制代码
题目41:模仿静态变量的用法。
"""
分析: 官方写法参考
def varfunc():
var = 0
print ('var = %d' % var)
var += 1
if __name__ == '__main__':
for i in range(3):
varfunc()
# 类的属性
# 作为类的一个属性吧
class Static:
StaticVar = 5
def varfunc(self):
self.StaticVar += 1
print (self.StaticVar)
print (Static.StaticVar)
a = Static()
for i in range(3):
a.varfunc()
题目42:自动变量
python复制代码
题目42:学习使用auto定义变量的用法。
"""
分析: 官方写法参考
num = 2
def autofunc():
num = 1
print ('internal block num = %d' % num)
num += 1
for i in range(3):
print ('The num = %d' % num)
num += 1
autofunc()
题目43:静态变量案例
python复制代码
题目43:模仿静态变量(static)另一案例。
"""
分析: 同41
class Num:
nNum = 1
def inc(self):
self.nNum += 1
print ('nNum = %d' % self.nNum)
if __name__ == '__main__':
nNum = 2
inst = Num()
for i in range(3):
nNum += 1
print ('The num = %d' % nNum)
inst.inc()
题目45:数字累加
python复制代码
题目45:统计 1 到 100 之和。
"""
a = 100
b = 1
sum = (a+b)*50
题目46:平方阈值判断
python复制代码
题目46:求输入数字的平方,如果平方运算后小于 50 则退出。
"""
while True:
x = int(input('input a num :'))
x *= x
print('结果为:{}'.format(x))
if x > 50:
break
def is_50(n):
if 判断即可;