Нужна помощь, чтобы преобразовать эту маленькую функцию Php в Python - PullRequest
0 голосов
/ 13 декабря 2018
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]) иначе 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 голосов
/ 13 декабря 2018

Я не уверен в логике, но попробую что-то вроде этого.

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
0 голосов
/ 13 декабря 2018

Исходя из кода PHP, оператор if должен выглядеть примерно так:

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

Кроме того, код внутри функции imei() должен иметь отступ.Отступы не являются необязательными в Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...