Kar*_*kar 11 python python-2.7 python-3.x
编写一个程序,询问用户输入n(假设用户输入正整数)并使用'*'高度星号打印三角形的边界n.
例如,如果用户输入6,则三角形的高度应为6,如下所示,并且顶行上的星号之间不应有空格:
******
* *
* *
* *
**
*
Run Code Online (Sandbox Code Playgroud)
我无法理解如何在模式的顶部和末尾之间打印部分?这是我的代码:
n = int(input("Enter a positive integer value: "))
for i in range (n, 0, -1):
print ("*" * i)
Run Code Online (Sandbox Code Playgroud)
该for环路是用于打印反向星号三角形.障碍是打印中间部分.
Ton*_*ino 15
在循环的每次迭代中,for您打印一行模式,其长度为i.所以,在你将拥有的模式的第一行和最后一行"*" * i.在模式的每个其他行中,您必须*在行的开头打印一个,*在末尾打印一个,(i - 2)在中间打印空格,因为已经打印出2个星,这导致了"*" + (" " * (i - 2)) + "*".结合这两种情况后,我们得到以下代码:
n = int(input("Enter a positive integer value: "))
for i in range(n, 0, -1):
if i == 1 or i == n:
print("*" * i)
else:
print("*" + (" " * (i - 2)) + "*")
Run Code Online (Sandbox Code Playgroud)
Mar*_*ans 10
尝试以下方法,它避免if在for循环中使用语句:
n = int(input("Enter a positive integer value: "))
print('*' * n)
for i in range (n-3, -1, -1):
print ("*{}*".format(' ' * i))
print('*')
Run Code Online (Sandbox Code Playgroud)
对于6,您将获得以下输出:
******
* *
* *
* *
**
*
Run Code Online (Sandbox Code Playgroud)
您还可以处理以下特殊情况1:
n = int(input("Enter a positive integer value: "))
if n == 1:
print '*'
else:
print('*' * n)
for i in range (n-3, -1, -1):
print ("*{}*".format(' ' * i))
print('*')
Run Code Online (Sandbox Code Playgroud)
为不同的打印方式设置不同的条件.
使用三元运算符,您可以使它成为一行代码:
n = int(input("Enter a positive integer value: "))
for i in range (n, 0, -1):
print ("*" * i if i == n or i == 1 else "*" + " " * (i - 2) + "*")
Run Code Online (Sandbox Code Playgroud)
请注意,您只有两种打印方式.
诀窍是:
请注意,您实际连续打印时i == n or i == 1:
******
*
Run Code Online (Sandbox Code Playgroud)
但除此之外,你给出的空间尽可能多 (i - 2)
* * #for 5, 3 spaces
* * #for 4, 2 spaces
* * #for 3, 1 space
** #for 2, 0 space
Run Code Online (Sandbox Code Playgroud)
(注:**尽管如此,可归类为两种情况)
所以你可以用1行语句来完成它.
编辑:
或者,正如Bakuriu在评论中建议的那样,你可以利用Python布尔评估结果为1时为true,0时为false时打印它而没有像这样的三元运算符:
n = int(input("Enter a positive integer value: "))
for i in range (n, 0, -1):
print('*' + '*'[i==n]*(i-2) + '*' * (i>1))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2698 次 |
| 最近记录: |