【问题标题】:For loop conversion problem from python to PHP对于从 python 到 PHP 的循环转换问题
【发布时间】:2021-04-21 04:44:34
【问题描述】:

我尝试转换以下 Python 函数:

def Sous(dist,d):

    l = len(dist)
    L = [[]]
    for i in range(l):
        K = []
        s = sum(dist[i+1:])
        for p in L:
            q = sum(p)
            m = max(d - q - s, 0)
            M = min(dist[i], d - q)
            for j in range(m, M+1):
                K.append(p + [j])
        L = K
    return L

到一个 PHP 函数中:

function sous($dist, $d){
    $l = count($dist);
    $L = [[]];
    foreach(range(0,$l) as $i){
        $K = [];
        $s = array_sum(array_slice($dist, $i+1));
        foreach($L as $p){
            $q = array_sum($p);
            $m = max($d-$q-$s, 0);
            $M = min($dist[$i], $d-$q);
            foreach(range($m, $M+1) as $j){
                $K[] = $p+$j;
            }
        }
        $L = $K;
    }
    return $L;
}

当我测试它时:

var_dump(sous([3,2,2,1,1,0], 2));

我得到错误:

Uncaught Error: Unsupported operand types

换行

$K[] = $p+$j;

我也不知道怎么解决,你有什么想法吗?

【问题讨论】:

  • 看起来 $p 是一个数组,并且(在 PHP 中)您不能只使用 + 将数字添加到数组中。
  • 我认为问题在于 [j] 在 PHP 中并不意味着 $j,但它是什么意思?

标签: python php for-loop type-conversion


【解决方案1】:

Python 的range(n) 返回一个从0n-1 的数组,而PHP 的range($n, $m) 返回一个从$n$m 的数组,所以你必须在那里使用range(0, $l -1)

还应将K.append(p+[j]) 转换为$K[] = $p+[$j];,因为$j 不是数组。

以下功能应该可以工作:

function sous($dist, $d){
    $l = count($dist);
    $L = [[]];
    foreach(range(0,$l - 1) as $i){
        $K = [];
        $s = array_sum(array_slice($dist, $i+1));
        foreach($L as $p){
            $q = array_sum($p);
            $m = max($d-$q-$s, 0);
            $M = min($dist[$i], $d-$q);
            foreach(range($m, $M+1) as $j){
                $K[] = $p+[$j];
            }
        }
        $L = $K;
    }
    return $L;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多