0

次の PHP 関数を Python に変換しようとしていますが、次のエラーが発生します。以下の PHP 関数に相当する Python の機能は何でしょうか?

xrange(start_scale、scale > 1、scale = scale* scale_update) のスケールの doDetectBigToSmall の 140 行目: UnboundLocalError: ローカル変数 'scale' が割り当て前に参照されました

PHP コード:

 protected function doDetectBigToSmall($ii, $ii2, $width, $height)  
 {  
  $s_w = $width/20.0;  
  $s_h = $height/20.0;  
  $start_scale = $s_h < $s_w ? $s_h : $s_w;  
  $scale_update = 1 / 1.2; 


        for ($scale = $start_scale; $scale > 1; $scale *= $scale_update) {  
        $w = (20*$scale) >> 0;  
        $endx = $width - $w - 1;  
        $endy = $height - $w - 1;  
        $step = max($scale, 2) >> 0;  
        $inv_area = 1 / ($w*$w);  
        for ($y = 0; $y < $endy; $y += $step) {  
            for ($x = 0; $x < $endx; $x += $step) {  
                $passed = $this->detectOnSubImage($x, $y, $scale, $ii, $ii2, $w, $width+1, $inv_area);  
                if ($passed) {  
                    return array('x'=>$x, 'y'=>$y, 'w'=>$w);  
                }  
            } // end x  
        } // end y  
    }  // end scale  
    return null;  
}  

パイソンコード:

 def doDetectBigToSmall(self,ii, ii2, width, height):
    s_w = width/20.0
    s_h = height/20.0
    start_scale = s_h if s_h < s_w else s_w
    scale_update = 1 / 1.2
    for scale in xrange(start_scale, scale > 1,scale = scale* scale_update):
        w = (20*scale) >> 0
        endx = width - w - 1
        endy = height - w - 1
        step = max(scale, 2) >> 0
        inv_area = 1 / (w*w)

        for y in xrange(0,y < endy,y = y + step):
            for x in xrange(0, x < endx, x= x + step):
                passed = self.detectOnSubImage(x, y, scale, ii, ii2, w, width+1, inv_area)
                if (passed):
                    return {'x': x, 'y': y, 'w': w}
4

3 に答える 3

0

これは私のために働く:

def strpos_r(haystack, needle):
    positions = []
    position = haystack.rfind(needle)

    while position != -1:
        positions.append(position)
        haystack = haystack[:position]
        position = haystack.rfind(needle)

return positions

また、関数は入力エラーを実際に処理するべきではありません。通常は False を返すか、関数に実行エラーをスローさせます。

于 2013-10-14T04:38:22.990 に答える