Python中的生命数字

k97glaaz  于 2023-02-06  发布在  Python
关注(0)|答案(7)|浏览(149)

我正在尝试创建一个方法,当接收到以下格式的出生日期输入时,该方法将返回一个数字: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))

然而,我没有得到这个算法应该产生的结果,我知道这与我的逻辑有关,它在列表弹出后添加了列表的数字,但我不确定它是什么。
任何见解都将不胜感激。

ih99xse1

ih99xse11#

看起来你只需要对累积加法执行模10运算:

def dol(N): return N if N < 10 else dol(N//10+N%10)

date = "19991229"
dol(int(date)) # 6
at0kjp5o

at0kjp5o2#

while len(date_list) >= 1:
        print(len(date_list))
        # check if it's over 9
        if sum > 9:
            sum =0
        num = date_list.pop()
        sum += num

检查上面的代码,也许这会帮助你.也检查文档的pop()函数从here Pop函数删除列表中的最后一个元素,并返回它.像这样:

L = [1, 2, 3]
x = L.pop()
print(x) # this will return 3

***后来我想到,你也可以直接把它们相加,然后以10为模。

cbeh67ev

cbeh67ev3#

循环中的.pop()可能会导致问题,因为列表的大小在迭代过程中会发生变化。此外,.pop()会删除最后一个元素。
我建议采取以下解决办法:

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))

        sum_ = sum(date_list) # calculate the sum of list of digits
        while len(str(sum_)) > 1: # repeat while the sum has more than 1 digit
            sum_ = sum(date_list)
            date_list = [int(x) for x in str(sum_)]

    return sum_

另外,“sum”是一个保留字,所以我将variable重命名为sum_

xoefb8l8

xoefb8l84#

从你的代码开始:

  • 你应该使用for循环而不是带有pop的while循环。这会让事情变得更容易。
  • 那么当sum〉9时,你不应该把和重置为0,而是把数字加在一起。

这将为您提供以下代码片段:

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))
            
        for num in date_list:
            sum+=num
            if sum > 9:
                sum = sum%10 +sum//10
    return sum
    
print(digitOfLife(date))

这将输出您所期望的内容:

Enter your date of birth in YYYYMMDD format: > 19991229
6

其他改进仍然是可能的,但这向您展示了在代码中进行更改更容易。

w6lpcovy

w6lpcovy5#

寿命数字的简称:

def digitoflife(date):
    if len(date) > 8:
        print("date inputed is long")
    else:
        num = num2 = 0
        for digit in date:
            num += int(digit)
        for i in str(num):
                num2 += int(i)
        return num2
date = str(input('Enter the date: '))
print("The digit of life is: ",digitoflife(date))
58wvjzkj

58wvjzkj6#

代码:

def bd_digit(string):
    total = 0
    for digit in string:
        total+=int(digit)
    
    if total >=10:
        return bd_digit(str(total))
    else:
        return total   
print(bd_digit('19991229'))

这可能有助于您使用递归

8mmmxcuj

8mmmxcuj7#

我今天也做了同样的练习。

date = '19991229'
list1=[]
for i in date:
    list1.append(int(i)) 

date2 = str(sum(list1))
list2 = []

for i in date2:
    list2.append(int(i))
    
total = sum(list2)
print(total)

相关问题