Я создаю программу, которая проверяет, действительны ли номера кредитных карт.
Я опубликую фотографию с точными инструкциями, чтобы вы лучше поняли, о чем я здесь.Инструкции показывают, что он попросил нас создать две функции для вычисления суммы нечетных чисел.пока у меня есть это:
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