Как вернуть несколько значений из одной функции в другую в Python? - PullRequest
0 голосов
/ 25 октября 2018

Я создаю программу, которая проверяет, действительны ли номера кредитных карт.instructions for program Я опубликую фотографию с точными инструкциями, чтобы вы лучше поняли, о чем я здесь.Инструкции показывают, что он попросил нас создать две функции для вычисления суммы нечетных чисел.пока у меня есть это:

def main():
cardNum=int(input("Enter credit card number as a long integer: "))
singleDigit=getDigit(cardNum)
evenNum=sumOfDoubleEvenPlace(cardNum,singleDigit)
oddNum=sumOfOddPlace(cardNum)
print(evenNum)
print(oddNum)
checker=isValid(cardNum,sumOfDoubleEvenPlace,sumOfOddPlace)
if checker==True:
    print(cardNum,"is valid")
else:
    print(cardNum,"is invalid")


def isValid(cardNum:int,sumOfDoubleEvenPlace:int,sumOfOddPlace:int):
    checker=False
    singleDigit=getDigit(cardNum)
    evenNum=sumOfDoubleEvenPlace(cardNum,singleDigit)
    oddNum=sumOfOddPlace(cardNum)
    if (oddNum+evenNum)%10==0:
        checker=True
    else:
        checker=False
    return checker



def getDigit(cardNum:int)->int:
        for ch in str(cardNum)[0::2]:
            if 2*int(ch)<10:
                singleDigit=2*int(ch)
            else:
                singleDigit=((2*int(ch))%10)+((2*int(ch))//10)
            return singleDigit


def sumOfDoubleEvenPlace (cardNum:int,singleDigit:int)->int:
        evenNum=0
        i=0
        while i<(len(str(cardNum))//2):
            evenNum+=singleDigit
            i+=1
        return evenNum


def sumOfOddPlace(cardNum:int)->int:
    oddNum=0
    for ch in str(cardNum)[1::2]:
        oddNum+=int(ch)
    return oddNum

if __name__=="__main__":
    main()

Я застрял на функции getDigit() и sumOfDoubleEvenPlace().Я не знаю, как преобразовать удвоенное число в одну цифру в getDigit() и отправить их по sumOfDoubleEvenPlace() по одному для суммирования.

Я понимаю, что это легко можно сделать за одинфункция, но это не то, что хочет мой учитель: /

::::: ОБНОВЛЕНИЕ ::::: Я получил лучшее понимание того, что эти две функции делают от моего учителя.Я обновил свой код, но теперь я сталкиваюсь с проблемами глобальных / локальных переменных, так как две функции ссылаются друг на друга.

Я изменил getDigit () и sumOfDoubleEvenPlace () на следующее:

def getDigit(cardNum:int)->int:
doubleDigit=sumOfDoubleEvenPlace (cardNum)
if doubleDigit<10:
    singleDigit=doubleDigit
else:
    singleDigit=(doubleDigit%10)+(doubleDigit//10)

def sumOfDoubleEvenPlace (cardNum:int)->int:
evenNum=0
doubleDigit=0
singleDigit=getDigit(doubleDigit)
for ch in str(cardNum)[0::2]:
    doubleDigit=2*int(ch)
    getDigit(doubleDigit)
    evenNum+=singleDigit
return evenNum

1 Ответ

0 голосов
/ 25 октября 2018

Вы перекрестно связываете несколько функций, что делает его довольно сложным для понимания.Я постараюсь сделать его более простым.

Шаг 1 и 2: Удвоить каждую вторую цифру и получить сумму.

def step_one_and_two(number):
    result = 0
    for i in number[0::2]: # get all double digits
        num = int(i)*2
        if num <10:
            result += num
        else:
            result += num-10+1 #Add up the two digits to get single digit num
    return result

Шаг 3:

def step_three(number):
    result = 0
    for i in number[1::2]: #get odd place digits
        result += int(i)
    return result

Результат:

first_card = "4388576018402626"
second_card = "4388576018410707"

print (step_one_and_two(first_card), step_three(first_card))
print (step_one_and_two(second_card),step_three(second_card))

37 38
29 41
...