Python 变形的斐波那契数列

键盘输入两个1到100之间的整数,作为这个数列的第一、二项,这个数列从第三项开始,满足:先将这一项的前两项相加, 如果和是偶数,则将和除以2,并放入这一项中;如果和是奇数,则将和乘以2并加上1,放入这一项中。编程输出该数列的前20项

参考代码

def get_number():
    """获取用户输入的两个整数"""
    a = int(input())
    b = int(input())
    return a, b


def generate_number_sequence(a, b, n):
    """生成数列前n项并返回"""
    seq = [a, b]
    for i in range(2, n):
        c = seq[i-2] + seq[i-1]  # 计算新一项的值
        if c % 2 == 0:
            seq.append(c // 2)
        else:
            seq.append(c * 2 + 1)
    return seq


# 获取用户输入的两个整数
a, b = get_number()

# 生成数列前20项并输出
seq = generate_number_sequence(a, b, 20)
for i, x in enumerate(seq):
    print(f'a[{i}] = {x}')


a, b = map(int, input("输入前两项,用空格隔开:").split())
print(a, b, end=" ")
for i in range(18):
    if (a + b) % 2 == 0:
        c = (a + b) // 2
    else:
        c = (a + b) * 2 + 1
    print(c, end=" ")
    a, b = b, c

  • 代码运行效果截屏图片

    img


    img

  • 代码

#!/sur/bin/nve python
# coding: utf-8

a, b = map(int, input(f"\n{' 裴波拉契数列“变种” ':~^42}\n\n{'请输入前两项(如 5 9):'}").strip().split())
print(f"{'第':>12}{1:0>2}项:{a:>10}")
print(f"{'第':>12}{2:0>2}项:{b:>10}")

for i in range(20-2): # 循环打印3~20项。
    c = (a + b)//2 if not (a+b)%2 else (a+b)*2+1 # 按“题目规则”计算第三项。
    print(f"{'第':>12}{i+3:0>2}项:{c:>10}")
    b, a = c, b # 更新前两项。