第六周python作业

这篇博客介绍了作者在学习Python编程时遇到的挑战,包括猴子选大王问题的解决方案,矩阵运算的实践,如计算矩阵的特定元素之和、判断上三角矩阵,以及找矩阵的鞍点。作者通过反思自己的代码和他人的实现,探讨了编程思路、代码优化方法,以及编程规范,如PEP8,并提到了numpy库在矩阵运算中的应用。
摘要由CSDN通过智能技术生成

1、第4章-18 猴子选大王

一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

我的代码:
在这里插入图片描述

他人的代码:
在这里插入图片描述
反思:
这又是一道想了很久的题目,但是看到别人的代码的那一刻,我当场就是虎躯一震,这不是和我的思路差不多吗??!为了避免这种惨案再次发生,我对这两个代码进行了比较,以下是总结出来的主要问题:
思路上:首先,由于我一直没有一个很清晰的解题思路,所以想到什么方法就直接实践,一是没有做好记录,导致最后出来的包含了所有方法的一小部分,也就是由于代码没有进行及时的修改,现有的解题代码是在原来的解题代码上进行的,修改不彻底,无辜耗费大量时间和精力。其次,我没有很好地将每一个步骤想清楚如何用计算机语言表示出来,这也导致了上一个问题的出现
修改方法一:可以选择开多个窗口,在另一个窗口写下新的方法,再进行比对和修改,写出新的代码
好处:直观
坏处:要写好多次代码
**修改方法二:**在纸上写方法,然后自己脑子里面debug,直到找到最好的解决方法
好处:比起上一个方法,准确率更高
坏处:耗费时间长,脑子里面debug有可能算错,纸上写又很耗时间
目前打算两种都试试,看看哪个更适合,或者有新的

2、第4章-19 矩阵运算

给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。

我的代码:

# -*- coding: utf-8 -*-
import numpy as np

# 初始化
n = int(input())
t = n
total = 0
diagonal = 0
last_column = 0
last_row = 0
storage = []

# 生成矩阵
for _ in range(n):
    temporary = list(map(int, input().split()))
    storage.extend(temporary)
matrix = np.array(storage).reshape((n, n))

# 计算出副对角线,最后一列和最后一行的所有元素之和还有所有元素之和,把他们相减
for i in range(n):
    diagonal += matrix[t-1][i]
    t -= 1

for j in range(n):
    for m in range(n):
        total += matrix[j][m]
    last_row += matrix[n - 1][j]
    last_column += matrix[j][n-1]

print(total-last_row-last_column-diagonal+matrix[n-1][0]+matrix[0][n-1]+matrix[n-1][n-1]
      )

他人的代码:

n=int(input())
a=[]
sum=0
for i in range(n):
    s=input()
    a.append([int(n) for n in s.split()])
for j in range(n):
    for k in range(n):
        if j!=n-1 and k!=n-1 and j+k!=n-1:
            sum+=a[j][k]
print(sum)

反思:
①在他人的代码里面使用的变量sum在我这里写成了total,其实我一开始也是想用sum的,然而直接给我报错"shadows built in name"??!stack overflow里面的解释好像是说(英文水平有限,理解错了请谅解)这是某种bug?Warning里面说这是种W292 error,应该又是违反了PEP8协议了,由于犯错次数太多,我把我的错误整理在下面,以后忘记了再回来看看,不用再到处找:

PEP 8: E231 missing whitespace after ‘,’
这个意思是逗号后面要有一个空格

PEP 8: W292 no newline at end of file
这里是要求你在末尾新起一行

PEP 8: E262 inline comment should start with ‘# ’
行内注释应该以’#'加空格开始

②好家伙原来还可以这样使用append把输入的不确定个数的元素插入到列表里面:
s=input()
a.append([int(n) for n in s.split()])
我也试过如果直接使用a.append(map(int,input().split())的话,得到的是一个“[map in XXX000…]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值