最小正数 - Python - Codility

如何解决最小正数 - 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?