python - 如何在 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
解决方案
您正在交叉链接多个功能,这使得它很难理解。我会尽量让它更直接。
第 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
推荐阅读
- laravel - Laravel可邮寄,实现ShouldQueue时数据不会传递给Blade
- d3.js - 单击按钮切换数据集时无法更新图表
- spring - SourcePollingChannelAdapter:应用程序启动后可以任意延迟启动轮询触发器吗?
- python - 为什么在单行中使用条件时我不能在 python if else 语句中使用 pass
- javascript - React - 传单删除标记
- mysql - SQLITE - 触发错误内的 IF 语句
- java - 使用 Java Spark foreach 函数迭代数据帧时出错
- python - 无法使用 datetime 对象对 DatetimeIndex 进行切片
- python - 无法访问我是内容所有者的频道的 YouTube 分析 API 数据 - Python
- zerobrane - 如何在 ZeroBrane Studio 中拆分编辑窗口