python - Python中的嵌套循环奇数模式
问题描述
我想制作如下图所示的图案:
N = 1
*
N = 3
*
***
*
N = 5
*
***
*****
***
*
等等...
不过,我写的这个程序只适用于 N = 5。谁能解释一下错误是什么以及解决方案是什么?谢谢。
N = int(input())
k = 1
for i in range(1, N - 1):
for j in range(1, N + 1):
if(j <= N - k):
print(' ', end = '')
else:
print('*', end = '')
k = k + 2
print()
k = 2
for i in range(1, N - 2):
for j in range(1, N + 1):
if(j >= N - k):
print('*', end = '')
else:
print(' ', end = '')
k = k - 2
print()
解决方案
您正在尝试使用范围打印带有两个 for 循环的 N 行金字塔。所以你的两个范围的长度之和应该是N。
现在考虑for i in range(1, N - 1)
和for i in range(1, N - 2)
与一些大 N 的总和。以 N=99 为例:
len(range(1, 99 - 1)) + len(range(1, 99 - 2))
>>> 193
这是你的第一个错误。该函数仅适用于 N=5,因为您为范围选择了两个减号。你需要在这里做的是重写你的数学:
len(range((99+1)//2)) + len(range((99-1)//2))
>>> 99
请注意,我从范围中删除了起始值,因为这里不需要它。默认情况下,范围从 0 开始计数,并在结束值之前结束一个数字。
您遇到的第二个错误是您如何打印三角形的下半部分。基本上,您试图反转所有内容以反向打印所有内容,但这以某种方式破坏了逻辑。这里我们要做的是为每行打印 k 个空格,每行将 k 增加 2。
修复最少的功能:
N = int(input())
k = 1
for i in range((N+1)//2):
for j in range(1, N + 1):
if(j <= N - k):
print(' ', end = '')
else:
print('*', end = '')
k = k + 2
print()
k = 2
for i in range((N-1)//2):
for j in range(1, N + 1):
if(j > k):
print('*', end = '')
else:
print(' ', end = '')
k = k + 2
print()
推荐阅读
- floating-point - IEEE 754 乘法小数
- html - CSS Clip-path 在多路径形状中无法按预期工作
- mule - JMX 连接到本地运行的 Mule 4 项目
- web-scraping - Metascraper 合并数据
- python - “游戏功能”中的pygame帮助循环值不增加也不减少
- save - 带有图像和背景视频的 Konva 加载阶段
- c++ - 在 Visual Studio 平台上使用 OpenCV C++ 时播放视频时出错
- javascript - 从已经反应的消息中删除特定的表情符号
- python - 如何从 Django 模型类中获取 content_type?
- azure - AAD B2C IEF:如何通过成本策略将错误代码和消息从 REST API 传递到应用程序?