python基础练习100打卡-Day08 (036~040)

今天也是学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)

打卡第八天啦!难道是由于昨天结尾没给点鼓励,今天就磨磨唧唧的,看来每天结尾的打气是不能少了。坚持一个多星期了,多多少少还是有些收获的,继续坚持下去,明天加油💪

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值