python做题记录001

最近重拾python,在廖雪峰的网站上学习了许多。闺蜜刚好问了我几道题,我就顺手做了一下,不得不说还是python代码写起来容易有成就感。于是这里把答案和代码记录一下,再写一下自己这个初学者的做题感受和收获。
除此之外,最近我还学了区块链技术和git使用技巧。这两个内容之后的文章也会介绍。

第一题

question1.png

要点

可以从题中看出,我们需要根据不同的输入,输出单词或数字(-1),python函数支持返回值的数据类型不同。例如,

1
2
3
4
if length_max == 0:
return -1
else:
return ans

输入的内容一般都可以用下面的代码储存:

1
2
str_in = input()
l = [x for x in str_in.split()]

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def select(sentence): #sentence 是一个list
length_max = 0
ans = str()

for word in sentence:
word_flag = -1

for i in word:
if i == "a" or i == "A":
word_flag = 1 # word flag 值为1,说明该词含有a或A

# 判断word有没有a或A
if len(word) > length_max and word_flag == 1:
length_max = len(word)
ans = word
else:
# 有a计算长度存入length_max
# 没有a进入下一个循环
continue


if length_max == 0:
return -1
else:
return ans # length_max 对应的字符串


if __name__ == "__main__":
str_in = input()
l = [x for x in str_in.split()]
print(select(l))

第二题

question2.png

要点

主要过程是

  1. 把整个矩阵正确传入
  2. 计算元素周围值的总和
  3. 比较总和的大小
  4. 输出最大值、最大值的个数、最大值的坐标

我遇到了一个矩阵初始化的错误。如下:

1
2
3
4
5
6
7
8
9
10
11
12
# 错误的初始化
m = [[0]*4]*4
# 改变其中的值
m[0][0] = 1
m[0][1] = 2
m[0][2] = 3
m[0][3] = 4

m[1][0] = 5
m[2][1] = 6
m[3][2] = 7
m[4][3] = 8

如果此时print(m)输出matrix,结果如下:

1
[[5, 6, 7, 8], [5, 6, 7, 8], [5, 6, 7, 8], [5, 6, 7, 8]]

初始化部分应该改为

1
2
# 正确的初始化
m = [[0 for i in range(column+2)] for j in range(row+2)]

这道题我用了一个方法避免索引溢出。
把整个matrix扩充一大圈就好。也就是扩充为(row+2)*(column+2)

之后,用index找到对应位置的值以及和它相邻位置的值,然后传参计算值

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
def input_matric():
str_in = input()
row,column = [int(x) for x in str_in.split()] #
m = [[0 for i in range(column+2)] for j in range(row+2)] # 初始化矩阵

# print(m)
# 传入各个位置的值
for i in range(row):
str_i = input()
i_row = [int(w) for w in str_i.split()]
for j in range(column):
m[i+1][j+1] = i_row[j]

return m


def find_max(mtx):
sum_max = 0 # 最大值
max_num = 1 # 最大值个数,肯定有一个最大值
max_position = [[0,0]] # 储存形式[[x1,y1],[x2,y2]...]

row = len(mtx)
column = len(mtx[0])

for i in range(row-2):
for j in range(column-2):
left = mtx[i+1][j]
right = mtx[i+1][j+2]
val = mtx[i+1][j+1]
up = mtx[i][j+1]
down = mtx[i+2][j+1]
sum = left + right + val + up + down #上下左右所有值加起来

if sum > sum_max:
sum_max = sum
max_position[0] = [i,j] # 真正的位置在(i,j)这个坐标下
elif sum == sum_max:
max_num = max_num +1
max_position.append([i,j])
print(str(sum_max) + " " + str(max_num))
for k in range(len(max_position)):
print(str(max_position[k][0]) + " " + str(max_position[k][1]))
# 找到对应位置的值以及和它相邻位置的值,然后传参计算值
# 这里为了方便计算、找值把矩阵扩充为(row+2)*(column+2)

if __name__ == "__main__":
mtrx = input_matric()
# print(mtrx)
find_max(mtrx) # 找到最大值的位置和最大值

----本文结束啦感谢您阅读----

欢迎关注我的其它发布渠道