今天也是学python的一天💪
打卡练习题:菜鸟100实例
036
题目
求100之内的素数。
分析
之前的012也是求一个范围内的素数,是求101-200之间的素数。
代码
import math
li = []
for num in range(2, 101):
is_prime = True
for i in range(2, int(math.sqrt(num))+1):
if num % i == 0:
is_prime = False
break
if is_prime:
li.append(num)
print(f'100之内的素数个数:{len(li)}')
print(f'100之内的素数:{li}')
037
题目
对10个数进行排序。
分析
可以直接用sort()或sorted()直达目标,也可以看看菜鸟上的思路。第一种高效不费事很乐意使用,但平时练习也不能太依赖它们(别太懒,不是我),基本方法也要掌握。
代码
代码一:
num = list(map(int, input('输入十个数字:').split()))
num.sort()
print(f'对十个数排序得:{num}')
代码二:
这是菜鸟上的思路——选择法,还蛮可以的,又学到了。
10个数,从第一个数开始,同其他9个相比较,得出最小的将其放在第一位,那它就是十个中最小的了;接着用同样的方式将第二位同其他8个作比较,得出最小的放第二位,第二小的就是它啦。就这样依次比较排序。
其实循环取值9次即可(下面代码的N-1),最后一个铁定是最大的那个了,不过循环10次似乎也没很大影响。
li = []
N = 10
for i in range(N):
num = int(input(f'输入第个{i+1}数字:'))
li.append(num)
print(f'排序前:{li}')
for i in range(N-1):
min = i
for j in range(i+1, 3):
if li[min] > li[j]:
min = j
li[i], li[min] = li[min], li[i]
print(f'排序后:{li}')
038
题目
求一个3*3矩阵主对角线元素之和。
分析
可以用一下二维列表来存储矩阵,再通过索引取主对角线元素的值相加。
二维列表的索引有两个(li[a][b])
,这里主对角线元素的两个索引值一致,即li[a][a]
。
代码
代码一:
li = []
sum = 0
for i in range(3):
row = list(map(int, input(f'输入3*3矩阵的第{i+1}行:').split()))
li.append(row)
for i in range(3):
sum += li[i][i]
print(f'矩阵为:{li}')
print(f'主对角线元素之和为:{sum}')
二:
这里用了for循环的双重嵌套,控制每个元素的输入
li = []
sum = 0
# 有所不同
for i in range(3):
row = []
for j in range(3):
num = int(input(f'输入第{i+1}行第{j+1}列数字:'))
row.append(num)
li.append(row)
for i in range(3):
sum += li[i][i]
print(f'矩阵为:{li}')
print(f'主对角线元素之和为:{sum}')
小结
创建二维或多维数组的方式还挺丰富的,尤其是时常被说起的Numpy,它旗下的array()、arange()等都各有其功能,很方便去创建各类数组,又多了个要做笔记的点。
039
题目
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
分析
我的想法是,假设这个数为n,将n跟数组内由大到小的每一个数作比较,直到第一次出现比n小的数,那么n的位置就在这个数之后,知道位置了,就可以用列表带的insert()方法将n加入列表。
代码
li = [2, 9, 10, 25, 57, 60, 89]
print(f'插入前:{li}')
num = int(input('输入一个数:'))
for i in range(-1, -len(li), -1): # 由大到小取值
if li[i] < num:
li.insert(i+1, num) # 注意添加位置的索引
break
print(f'插入后:{li}')
040
题目
将一个数组逆序输出。
分析
可以用reverse()、切片,还有菜鸟上面的前后对应位置的值交换。
代码
代码一:
""" 用切片 """
li = [2, 4, 6, 8, 10]
print(li[::-1])
""" 用reverse() """
li = [2, 4, 6, 8, 10]
li.reverse()
print(li)
二:
"""
前后对应位置的值相交换
"""
li = [2, 4, 6, 8, 10]
for i in range(len(li) // 2):
li[i], li[len(li)-1-i] = li[len(li)-1-i], li[i]
print(li)
打卡第八天啦!难道是由于昨天结尾没给点鼓励,今天就磨磨唧唧的,看来每天结尾的打气是不能少了。坚持一个多星期了,多多少少还是有些收获的,继续坚持下去,明天加油💪