如何解决最小正数 - Python - Codility
当我刚开始学习 Python 时,我正在使用 Codelite 来训练自己。在练习“最小正数”中,我使用了下面的代码并且一些测试用例通过了,但大多数没有通过。如何改进我的代码? (测试用例如 [1,2,3,4] 和重复数字如 [5,6,4,6]。
A = [2,1,-2,5,-6]
m = max(A)
temp = []
index = []
result = []
if m < 1:
print ("1")
elif len(A) == 1:
if A[0] == 1:
print("2")
else:
print("1")
else:
for i in range(len(A)):
if A[i] > 0:
temp.append(A[i])
temp.sort()
print(temp)
for j in range(len(temp)):
index.append(j+1)
if temp[j] != index[j]:
result.append(index[j])
print(min(result))
谢谢!
解决方法
首先,您需要存储最小的正数。从列表的第一个元素开始。
small_positive = A[0]
然后你会想要遍历输入
for number in A:
然后检查数字是否为正数。最简单的方法是查看它是否大于零。
if number > 0:
之后,检查数字是否小于当前最小的数字。如果是,请覆盖它。
if number < small_positive:
small_positive = number
最后,您需要检查列表中是否包含所有负数。如果循环后 small_positive 为负数,则列表中没有正数。
if small_positive < 0:
return None
这是理解解决方案的最简单方法,但有许多内置函数比这个简单得多。
,首先,这不适用于列表 [-42]
:
m = max(A)
if m < 1:
print ("1")
没有 1
在该给定列表中的任何位置,因此不应将其报告为解决方案。在这种情况下,Python 通常会给你 None
,但你设置的谜题可能有其他想法。它也不适用于列表 []
,因为 max()
会抱怨空列表。
您可能认为这两种情况中的一种或两种不太可能,但这是区分优秀编码员和不太优秀编码员的原因之一。前者假设他们的用户和测试人员是精神病天才,他们知道如何以接近零的努力破解代码:-)
要自己编写代码,可以使用以下伪代码(1)作为基础:
num_list = (some list of numbers)
min_pos = nothing
for num in num_list:
if num > 0 and (min_pos is nothing or num < min_pos): # >= ?
min_pos = num
print(min_pos)
当然,如果您正在学习Python而不是学习编程,您可能应该只使用该语言的功能,事情会容易得多: >
pos_list = [item for item in the_list if item > 0] # >= ?
min_pos = min(pos_list) if len(pos_list) > 0 else None
print(min_pos)
而且,如果您认为零是正数,请确保在上面指示的两个代码块中使用 >= 0
而不是 > 0
。
这两个片段都将成功处理没有正数的列表,为您提供一个哨兵值(Python None
或伪代码 nothing
)。
(1) 是的,它看起来有点像 Python 但这只是因为 Python 是最终的伪代码语言 :-)
,A = [2,-2,5,-6]
def small(a,b):
if a >= b: return b
else: return a
positive_list = [ele for ele in A if ele > 0]
res = min(positive_list)
if len(positive_list) == 0:
print("no positive number.")
else:
for i in range(len(positive_list)):
res = small(res,positive_list[i])
print(f"Smallest Positive number : {res}")
这样,你就可以轻松得到结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。