首页 > 解决方案 > 如何在 Python 中将多个值从一个函数返回到另一个函数?

问题描述

我正在创建一个程序来检查信用卡号是否有效。程序说明我将发布一张说明的确切内容的图片,以便您更好地了解我在这里的目的。说明显示他要求我们创建两个函数来计算奇数的总和。到目前为止,我有这个:

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

标签: pythonstringlistfunctionreturn

解决方案


您正在交叉链接多个功能,这使得它很难理解。我会尽量让它更直接。

第 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

推荐阅读