gpt4 book ai didi

python :嵌套

转载 作者:行者123 更新时间:2023-12-01 02:42:30 27 4
gpt4 key购买 nike

我正在尝试编写代码来显示具有奇数宽度的形状。形状完成后,将其放置在外部形状内。用户将能够输入用于形状的字符和行数。我希望生成一个形状,并通过 for 循环生成一个外部形状。

*****       .           
*** ...
* .....
.*****.
...***...
.....*.....

这是我当前的代码。我只知道如何创建一个形状。

char = (input("Enter first charactrer"))

rows = int(input("enter the number of rows"))

for m in range(rows, 0, -1):
for n in range(0, rows-m):
print(end=" ")
for n in range(0,m):
print(char,end=" ")
print()

最佳答案

不需要某些 for 循环:

Python 中的一个有用功能是可以将 char 相乘。通过int获得 string重复的char .

例如,如果您这样做:

'c' * 10

你得到:

'cccccccccc'

这对您的情况有用的原因是您可以使用它来打印 spaceschars 。这将比 for-loops 更简洁as 而不是打印单个 chars一遍又一遍地不换行,您可以通过一次调用将完整的空格数打印为字符串。

为了明白我的意思,我用这个编写了你的​​原始代码:

char = input("enter the char ")
rows = int(input("enter the number of inner rows "))

for r in range(rows, 0, -1):
print(' ' * 2 * (rows-r), end='')
print((char+' ') * (2*r+1))

看看它整洁了多少?另外,您还可以注意到,在每行的第二次打印中 chars ,我用了计算:2*r +1 。这是转换此模式所需的内容:

3. * * * *
2. * * *
1. * *
0. *

致此(根据您的要求):

3. *******
2. *****
1. ***
0. *

你可以看到,对于第二行的每一行,chars的数量是 2 * row +1 。所以排37 字符,行 25等等

如果你愿意,因为你已经摆脱了不必要的for-loops现在,您可以同时输入 prints在一份声明中:

print(' ' * 2 * (rows-r) + (char+' ') * (2*r+1))

但是,第一个可能被认为更简洁、更清晰,因此您可能需要坚持使用单独的语句。

将内部三角形嵌入到外部三角形中

首先,我们需要 input两个不同chars对于内三角形和外三角形。这将使我们能够区分哪个是哪个。

我认为最好的方法是保留 print像以前一样在三角形之前创建空格的语句,但修改了我们绘制字符及其图案的方式。

这就是我们想要的输入 4行:

0.        .
1. ...
2. .....
3. .......
4. .*******.
5. ...*****...
6. .....***.....
7. .......*.......

注意如何最简单地分割 printing过程减半。因此,对于上半部分,只需打印一个正三角形,而对于下半部分,则打印一个 regular , 一 flipped另一个regular .

为此,我们要循环遍历 8 中的每个行并检查我们何时完成一半。如果超过一半,我们希望每个较小三角形的计算都认为它们位于三角形的顶部,即重置 row计算它们,所以当printing时行4 ,我们计算就像在行 0 上打印一样。为了实现这一点,一旦过了一半,我们需要对row取模可变总数的一半rows (现在的总行数不是输入的,而是输入数量的两倍,您可以看到我们有一个带有 8 行的三角形,但输入的行值为 4 )。这将达到三角形大小为整个三角形一半的预期效果。

最后,要考虑的最后一件事是中心/内三角形需要像我们之前所做的那样翻转。因为我们的行数现在从 0从上到下而不是相反,我们需要将该行的计算更改为 rows - r所以它被翻转了。

考虑到所有这些,最终的代码可能如下所示:

innerChar = input("enter the inner char ")
outerChar = input("enter the outer char ")

rows = int(input("enter the number of inner rows "))

for r in range(2 * rows):
#print the white space on the left
print(' ' * 2 * (2 * rows-r), end='')
if r < rows:
#top triangle
print((outerChar+' ') * (2*r + 1))
else:
#working with the row modulo 2
r %= rows
#bottom three triangles
print((outerChar+' ') * (2*r + 1), end='')
print((innerChar+' ') * (2*(rows-r) - 1), end='')
print((outerChar+' ') * (2*r + 1))

关于 python :嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45531352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com