入门系列共三篇文章,每道题的知识点总结和细化都写明于本系列【python编程】的【入门系列知识点总结】这篇文章,可进行查看。
问题1:
求一个3*3矩阵主对角线元素之和。
知识点:关于 if __name__== '__main__' 的使用和意义,涉及到两种模块执行的区别,以及判断条件是否成立的问题。以及创建二维矩阵的三种方法。
代码:
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)
问题2:
按相反的顺序输出列表的值。
知识点:直接利用数组遍历(三参数法),最后一个循环值为-1输出即可。
代码:
a = [9,6,5,4,1]
for i in a[::-1]:
print(i)
问题3:
使用lambda来创建匿名函数。
知识点:
代码:
MAXIMUM = lambda x,y : (x > y) * x + (x < y) * y
MINIMUM = lambda x,y : (x > y) * y + (x < y) * x
if __name__ == '__main__':
a = 10
b = 20
print ('The largar one is %d' % MAXIMUM(a,b))
print ('The lower one is %d' % MINIMUM(a,b))
问题4:
输出一个随机数。
知识点:生成随机数的方法,此处使用的是random.uniform(a,b)方法,功能是生成一个[a,b)的随机浮点数。还有很多方法,如生成随机整数random.randint(a, b),生成随机矩阵的np.random.randn(a, b)等。详见另一篇博客。
代码:
import random
#生成 10 到 20 之间的随机数
print (random.uniform(10, 20))
问题5:
打印出杨辉三角形。
知识点:计算不是问题,很容易找到规律,注意一下输出。我在转化为字符串的print里面的range(i+1)这里卡了好久,总是少最后a[i][i]这一列,裂开。
在此补充一个输出方法:sys.stdout.write()。print方法默认输出完后打印换行,而stdout.write()方法没有换行。
代码:
a=[[0 for i in range(10)] for j in range(10)]
for i in range(10):
a[i][0]=a[i][i]=1
for i in range(2,10):
for j in range(1,i):
a[i][j]=a[i-1][j]+a[i-1][j-1]
for i in range(10):
print(' '.join(str(a[i][j]) for j in range(i+1)))
# 第二种输出方法,stdout.write()
# from sys import stdout
# for i in range(10):
# for j in range(i + 1):
# stdout.write(str(a[i][j]))
# stdout.write(' ')
# print()
输出:
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 9 36 84 126 126 84 36 9 1
问题6:
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
知识点:主要是思路和方法的处理。没有必要在判断k==3时再弄一个循环判断。
代码:
n=int(input('请输入总人数:'))
a=[1 for i in range(n)]
i=0
m=0
k=0
while m<n-1:
if a[i]!=0:
k+=1
if k==3:
a[i]=0
k=0
m+=1
i+=1
if i==n:
i=0
i=0
while a[i]==0:
i+=1
print(i+1)