如何在Python中将多个值从一个函数返回到另一个函数?

时间:2018-10-25 03:41:10

标签: python string list function return

我正在创建一个程序,检查信用卡号是否有效。 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()进行求和。

我知道可以很容易地在一个功能中完成此操作,但这不是我的老师想要的:/

:::::: UPDATE ::::: 我的老师对这两个功能的作用有了更好的了解。我更新了代码,但由于两个函数相互引用,因此我现在遇到了全局/局部变量问题。

我将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 :(得分:1)

您正在交叉链接多个功能,因此很难理解。我将尝试使其更简单。

第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