需要帮助将此小Php函数转换为Python

时间:2018-12-13 10:12:23

标签: php python function

function imei(){
    $nu = "3514512";
        $num = rand(1111111,9999999);
    $s = ''.$nu.''.$num.'';

    // Add a zero check digit
    $s = $s . '0';
    $sum = 0;
    // Find the last character
    $i = strlen($s);
    $odd_length = $i % 2;
    // Iterate all digits backwards
    while ($i-- > 0) {
        // Add the current digit
        $sum+=$s[$i];
        // If the digit is even, add it again. Adjust for digits 10+ by subtracting 9.
        ($odd_length == ($i % 2)) ? ($s[$i] > 4) ? ($sum+=($s[$i] - 9)) : ($sum+=$s[$i]) : false;
    }
    $ime = (10 - ($sum % 10)) % 10;

    $imei = ''.$nu.''.$num.''.$ime.'';

    return $imei;
}

我需要将此函数转换为python,我尝试了很多,但始终失败,并出现许多错误。

我想到了这个:

def imei():
nu = "8613750"
num = random.randrange(1111111,9999999)
s = '' + nu + '' + num + ''
s = s + '0'
sum = 0
i = len(s)
odd_length = i % 2

while i > 0: 
    sum += s[i]
    if (odd_length == (i % 2)): elif (s[i] > 4): elif (sum += (s[i] - 9)): (sum += s[i]) else false
    i -= 1

ime = (10 - (sum % 10)) % 10
imei = '' + nu + '' + num + '' + ime + ''

return imei

错误:

文件“ functions.py”,第30行 if(odd_length ==(i%2)):elif(s [i]> 4):elif(sum + =(s [i]-9)):(sum + = s [i])else false

建议编辑后

def imei():
nu = '8613750'
num = str(random.randrange(1111111,9999999))
s = '' + nu + '' + num + ''
s = s + '0'
sum = 0
i = len(s) - 1
odd_length = i % 2

while i > 0:
    sum += s[i]
    if odd_length == i % 2:
        if s[i] > 4:
            sum += s[i] - 9
        else:
            sum += s[i]

i -= 1

ime = (10 - (sum % 10)) % 10
imei = '' + str(nu) + '' + str(num) + '' + str(ime) + ''

return imei

print(imei())                             ^

2 个答案:

答案 0 :(得分:0)

基于PHP代码,if语句应如下所示:

if odd_length == i % 2:
    if s[i] > 4:
        sum += s[i] - 9
    else:
        sum += s[i]

此外,imei()函数内的代码需要缩进。缩进在Python中不是可选的。

答案 1 :(得分:0)

我不确定逻辑,但是尝试这样的事情。

import random
def imei():
    nu = "8613750"
    num = random.randrange(1111111,9999999)
    s = '' + str(nu) + '' + str(num) + ''
    s = s + '0'
    Sum = str(0)
    i = len(s) - 1
    odd_length = i % 2

    while i > 0: 
        Sum += s[i]
        if (odd_length == (i % 2)) or (s[i] > 4):
            Sum += str(int(s[i]) - 0)
        else :
            Sum += s[i]

        i -= 1

    ime = (10 - (int(Sum) % 10)) % 10
    Imei = '' + str(nu) + '' + str(num) + '' + str(ime) + ''

    return Imei