我正在尝试创建一个方法,当接收到以下格式的出生日期输入时,该方法将返回一个数字:YYYYMMDD。要求如下(见下图):
我尝试了以下方法:
def split(word):
return [char for char in word]
date = input("Enter your date of birth in YYYYMMDD format: > ")
sum_list = []
def digitOfLife(date):
sum = 0
if(len(date) > 8):
print("Input data too long")
return
else:
date_list = []
for char in date:
date_list.append(int(char))
while len(date_list) >= 1:
print(len(date_list))
for num in date_list:
if sum > 9:
sum = 0
sum+=num
date_list.pop()
return sum
print(digitOfLife(date))
然而,我没有得到这个算法应该产生的结果,我知道这与我的逻辑有关,它在列表弹出后添加了列表的数字,但我不确定它是什么。
任何见解都将不胜感激。
7条答案
按热度按时间ih99xse11#
看起来你只需要对累积加法执行模10运算:
at0kjp5o2#
检查上面的代码,也许这会帮助你.也检查文档的pop()函数从here Pop函数删除列表中的最后一个元素,并返回它.像这样:
***后来我想到,你也可以直接把它们相加,然后以10为模。
cbeh67ev3#
循环中的.pop()可能会导致问题,因为列表的大小在迭代过程中会发生变化。此外,.pop()会删除最后一个元素。
我建议采取以下解决办法:
另外,“sum”是一个保留字,所以我将variable重命名为sum_
xoefb8l84#
从你的代码开始:
这将为您提供以下代码片段:
这将输出您所期望的内容:
其他改进仍然是可能的,但这向您展示了在代码中进行更改更容易。
w6lpcovy5#
寿命数字的简称:
58wvjzkj6#
代码:
这可能有助于您使用递归
8mmmxcuj7#
我今天也做了同样的练习。