出于教育目的,将vb.net代码转换为python。未出现数值的输出

出于教育目的,将vb.net代码转换为python。未出现数值的输出,python,vb.net,Python,Vb.net,我的日常工作主要是用vb.net编程,所以我对它非常熟悉。在做我的前几十个项目euler问题时,我使用vb.net只是为了掌握问题的诀窍。现在我想使用ProjectEuler来帮助我学习一种新的语言,并且已经在python中运行了一些。然而。我遇到了困难 以下代码将打印给定数字的最大素数因子: Protected Function isPrime(ByVal n As Long) As Boolean If n = 2 Then Return True End I

我的日常工作主要是用vb.net编程,所以我对它非常熟悉。在做我的前几十个项目euler问题时,我使用vb.net只是为了掌握问题的诀窍。现在我想使用ProjectEuler来帮助我学习一种新的语言,并且已经在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
受保护函数isPrime(ByVal n长度)为布尔值
如果n=2,则
返回真值
如果结束
如果n Mod 2=0,则
返回错误
如果结束
Dim maxFactor As Long=Math.Sqrt(n)
尺寸i为整数=3
而我2
如果(n模系数)=0,则
如果是优先(因子),那么
Me.lblAnswer.Text=系数
系数=0
如果结束
如果结束
系数=系数-1
结束时
端接头
此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
从数学导入sqrt
def iPrime(n):
如果n==2:返回true
如果不是n%2:返回false
maxFactor=sqrt(n)
i=3
而我2:
如果不是n%,系数:
如果是iPrime(因子):
打印因子
系数=0
系数-=1

然而,这一因素永远不会以印刷而告终。我是否错过了python的细微差别?我哪里会出错?谢谢:)

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

  • VB.net代码在整数上运行,Python代码在浮点上运行,这显然在某些地方失败了
  • 如前所述,关键字大写(True/False)
  • 您可以毫无问题地使用foo%bar==0
  • 您在“factor=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
    
    从数学导入sqrt
    def iPrime(n):
    如果n==2:返回True
    如果n%2==0:返回False
    maxFactor=长(sqrt(n))
    i=3
    而我2:
    如果n%系数==0:
    如果是iPrime(因子):
    打印因子
    系数=0
    系数-=1
    
    非常感谢!我的失败是错误的!=错误问题和sqrt解析为不同于我预期的类型。