我对这类事情很陌生,并试图找到如何计算出一个带有两个整数值的函数,起始值和总共有多少节点应该在链中。节点链中的每个值都是根据先前值加上前一个值的数字之和计算得出的。例如:
(409, 5)
将生成
链409
422
430
437
451
我的代码现在:
class Node:
def __init__(self, init_data):
self.data = init_data
self.next = None
def get_data(self):
return self.data
def get_next(self):
return self.next
def set_data(self, new_data):
self.data = new_data
def set_next(self, new_next):
self.next = new_next
def __str__(self):
return str(self.data)
def generate_chain(start, n):
node = Node(start)
current = start
string_of_nodes = str(start)
list_of_nodes = []
print(current)
for digit in string_of_nodes:
list_of_nodes.append(int(digit))
for i in range(n-1):
node.set_next(sum (int(a) for a in list_of_nodes) + int(current))
current += (node.get_data())
print(current)
生成输出:
409
818
1227
1636
2045
2454
我想知道是否有人可以帮助我找到错误并以正确的方式指导我。谢谢。
答案 0 :(得分:1)
这可以很好地实现为我认为的生成器:
def chain(steps, value):
for i in range(steps):
yield value
value+=sum([int(i) for i in str(value)])
x = chain(5, 409)
for i in x:
print(i)
如果要使用Node类,可以使用此功能:
def generate_chain(start, n):
node = Node(start)
for k in range(n):
yield node.get_data()
node.set_next(node.get_data() + sum(int(i) for i in str(node)))
node.set_data(node.get_next())
value = node.get_data()
I = generate_chain(409, 5)
for i in I:
print(i)
答案 1 :(得分:1)
使用Node
类的替代实现可以是:
def generate_chain(start, n):
head = node = Node(start)
for _ in range(n):
sum_of_digits = 0
v = node.get_data()
while v > 0:
sum_of_digits += v % 10
v //= 10
node.set_next(Node(node.get_data() + sum_of_digits))
node = node.get_next()
node = head
while node:
print(node.get_data())
node = node.get_next()
此代码创建一个节点链然后打印。原始代码中的问题似乎是由于set_next
使用int
而不是Node
调用,因此未正确构建链。
答案 2 :(得分:1)
使用s.append(x)
函数和算术模运算符%
的简短解决方案:
def generate_chain(num, total):
chain = [num] # setting the initial value
total -= 1
while total:
chain.append(chain[-1] + chain[-1] // 100 + chain[-1] // 10 % 10 + chain[-1] % 10)
total -= 1
return chain
print(generate_chain(409, 5))
输出:
[409, 422, 430, 437, 451]