【问题标题】:Converting vb.net code to python for educational purposes. Output of a numeric value not occuring出于教育目的将 vb.net 代码转换为 python。未出现数值的输出
【发布时间】:2009-09-08 15:43:48
【问题描述】:

我的日常工作主要是在 vb.net 中编码,所以我对它非常熟悉。在处理我最初的几十个项目欧拉问题时,我使用 vb.net 只是为了掌握问题样式。现在我想使用 euler 项目来帮助我学习一门新语言,并且已经在 python 中运行了一些。然而。我遇到了一个障碍。

以下代码将打印给定数字的最大素数:

Protected Function isPrime(ByVal n As Long) As Boolean
    If n = 2 Then
        Return True
    End If
    If n Mod 2 = 0 Then
        Return False
    End If

    Dim maxFactor As Long = Math.Sqrt(n)
    Dim i As Integer = 3
    While i <= maxFactor
        If n Mod i = 0 Then
            Return False
        End If
        i = i + 2
    End While
    Return True
End Function

Protected Sub LargestPrimeFactor(ByVal n As Long)
    Dim factor As Long = Math.Sqrt(n) ''#largest factor of n will be sqrt(n)
    While factor > 2
        If (n Mod factor) = 0 Then
            If isPrime(factor) Then
                Me.lblAnswer.Text = factor
                factor = 0
            End If
        End If
        factor = factor - 1
    End While
End Sub

这个 vb.net 代码运行完美。 python中的等价物,我相信是:

from math import sqrt

    def IsPrime(n):
        if n==2: return true
        if not n % 2: return false

        maxFactor = sqrt(n)
        i = 3
        while i <= maxFactor:
            if not n % i: return false
            i += 2
        return true

    n = 600851475143
    factor = sqrt(n)
    while factor > 2:
        if not n % factor:
            if IsPrime(factor):
                print factor
            factor = 0
        factor -= 1

但是,该因素永远不会最终打印出来。我错过了python的细微差别吗?我可能哪里出错了?谢谢:)

【问题讨论】:

    标签: python vb.net


    【解决方案1】:

    以前的解决方案会产生错误的答案。

    1. VB.net 代码对整数进行操作,而您的 Python 代码对浮点数进行操作,这显然在某处失败。
    2. 如前所述,关键字大写(真/假)。
    3. 您可以毫无问题地使用 foo % bar == 0。
    4. 您错过了“因子 = 0”行中的一级缩进。

    此代码产生正确答案,6857:

    from math import sqrt
    
    def IsPrime(n):
        if n==2: return True
        if n % 2 == 0: return False
    
        maxFactor = long(sqrt(n))
        i = 3
        while i <= maxFactor:
            if n % i == 0: return False
            i += 2
        return True
    
    n = 600851475143
    factor = long(sqrt(n))
    while factor > 2:
        if n % factor == 0:
            if IsPrime(factor):
                print factor
                factor = 0
        factor -= 1
    

    【讨论】:

    • 非常感谢!我的失败是 false != False 问题和 sqrt 解析为与我预期不同的类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多