我正在创建一个程序,检查信用卡号是否有效。 我将贴出一张确切说明的图片,以便您更好地了解我要在这里做什么。说明表明他已要求我们创建两个函数来计算奇数的总和。到目前为止,我有这个:
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
答案 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