python - pi、euler、黄金比例等常数的金字塔形表示
问题描述
我在互联网上找不到它,但一个常量的 piramidial 表示如下:
在第 i 层有 n 行,从上到下编号(i = 1, 2, ... , n)是第 i 个数字,每个数字是常数中接下来 i 个数字的总和.
我们得到常数和行数作为输入,然后我们需要这个金字塔作为输出。我知道我必须使用 2 个 for 循环,但我对如何使用它们感到非常困惑。
cte = input()
verdiep = int(input())
for i in range(1, verdiep+1):
pyramid = 0
rij = ''
for sum in range(i, len(cte)):
if cte[i] != '.':
pyramid += int(cte[i])
rij += str(pyramid)
print(rij)
到目前为止,这是我的代码,我知道我不应该在我的第二个 for 循环中使用 in range(i, len(cte)) 但我不知道如何在不使用 3 个 for 循环的情况下执行此操作,因为那时我认为我的程序只是崩溃,因为它需要太长时间。如何获取常量的索引?
解决方案
我对这些金字塔的第一个观察是,在每一步,它都会从给定序列中提取 step^2 数量的符号。
在您在上面分享的 pix 中,金字塔级别 ^2(从顶部开始,从 1 开始)来自 pi 的数字。
我们可以如下编程
b = 31415926535897936 # assume we have such number
step = 1
stop = 3 # pyramid level - from top
start = 0
while step <= stop:
end = start + step**2
c = str(b)
row = c[start:end]
row_blocks = [{'numbers': [i for i in xs], 'sum': sum(int(i) for i in xs)} for xs in in_groups(row, step)]
print(row_blocks)
start = end
step += 1
输出结果,例如,
[{'numbers': ['3'], 'sum': 3}]
[{'numbers': ['1', '4'], 'sum': 5}, {'numbers': ['1', '5'], 'sum': 6}]
[{'numbers': ['9', '2', '6'], 'sum': 17}, {'numbers': ['5', '3', '5'], 'sum': 13}, {'numbers': ['8', '9', '7'], 'sum': 24}]
ps
in_groups
是一个辅助方法,它的行为是这样的
>>> [i for i in in_groups('1234567890', 3)]
['123', '456', '789', '0']
>>> [i for i in in_groups('1234567890', 2)]
['12', '34', '56', '78', '90']
功能体
def in_groups(iterable, size):
for i in range(0,len(iterable), size):
yield iterable[i: i+size]
我确定 itertools 有替代方案,但现在无法记住。
推荐阅读
- java - Spring Kafka 消费者无法连接到代理
- python - 船不会发射子弹蟒蛇速成课程第2版
- android - 如果在android中被拒绝,如何再次请求许可
- reactjs - 使用 react/firebase api 创建书店列表
- apache - 什么是相当于 HTTPS 服务器的 Google Cloud 服务?
- javascript - 如何在Javascript中从数组中输出未配对元素的值?
- java - 在弹簧实体中使用枚举
- buildpack - Pack 的 CLI buildpack package 命令返回 ERROR 未知配置元素
- python - 如何将 .mat 文件转换为 Berkeley Segmentation Dataset 500 中的 .tif 图像?
- sql - JPA 需要很长时间才能做出回应