我刚刚开始使用Python 2.7,但我仍然坚持这个问题:
制作一个打印" M"星号的图案。用户应输入图案的高度。
这是问题的图片:
h=raw_input("Enter the height of MStar here:")
h=int(h)
for row in range(0,(h-1)/2):
for column in range(row+1):
print "*",
print
for row in range((h-1)/2,h):
for column in range(h):
print "^",
print
还建议我可以为模式做两个循环,因为它可以看作两个部分,上面一个是星星和空格,第二个部分看起来像我做过的矩形。我的代码需要一些帮助,因为我真的不知道如何添加第二个三角形,我只能做第一个。
答案 0 :(得分:2)
我认为这个问题是两个三角形相互重叠。您可以编写两个函数来检查坐标是否在三角形中。例如,此代码
for i in range(n):
for j in range(n):
if left(i,j):
print '*',
else:
print '.',
print
给出了这个输出:
* . . . . . .
* * . . . . .
* * * . . . .
* * * * . . .
* * * * * . .
* * * * * * .
* * * * * * *
将left
更改为right
会显示镜像:
. . . . . . *
. . . . . * *
. . . . * * *
. . . * * * *
. . * * * * *
. * * * * * *
* * * * * * *
一旦您确定left
和right
的正确实施,只需将两者合并为left(i,j) or right(i,j)
即可获得M
形状:
* . . . . . *
* * . . . * *
* * * . * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
答案 1 :(得分:1)
限制:仅输入大于3的旧数字
逻辑:
raw_input()
3
,只有第一行有1
个空格,(ii)对于输入5
- >第一行包含空格3
,第二行包含空格1
。for
为n
的情况下运行n
循环user value
。*
。*
。代码:
no = int (raw_input("Enter a number: "))
space_no = no - 2
print_line = "*"*no
for i in xrange(1,no+1):
if space_no>0:
print_line_n = "*"*i+" "*space_no+"*"*i
space_no -=2
print print_line_n
else:
print print_line
输出:
vivek@vivek:~/Desktop/stackoverflow$ python 9.py
Enter a number: 3
* *
***
***
vivek@vivek:~/Desktop/stackoverflow$ python 9.py
Enter a number: 5
* *
** **
*****
*****
*****
vivek@vivek:~/Desktop/stackoverflow$ python 9.py
Enter a number: 9
* *
** **
*** ***
**** ****
*********
*********
*********
*********
*********
vivek@vivek:~/Desktop/stackoverflow$
答案 2 :(得分:0)
有时,绘制一个需要生成的值的表格会有所帮助:
h notch_rows no_notch_rows row "*"s " "s "*"s
3 1 1 1 1 1
2 1 3
2 3
5 2 1 1 3 1
2 2 1 2
3 1 5
2 5
3 5
7 3 1 1 5 1
2 2 3 2
3 3 1 3
4 1 7
2 7
3 7
4 7
这会产生类似
的实现def mstar(h, star_ch="*", space_ch=" "):
assert h % 2, "h must be odd"
notch_rows = h // 2
no_notch_rows = notch_rows + 1
rows = []
for row in range(1, notch_rows + 1):
stars = star_ch * row
spaces = space_ch * (h - 2 * row)
rows.append(stars + spaces + stars)
for row in range(1, no_notch_rows + 1):
stars = star_ch * h
rows.append(stars)
return "\n".join(rows)
def main():
h = int(input("Height of M-Star? ")) # use raw_input for Python 2.x
print(mstar(h))
if __name__ == "__main__":
main()
并像
一样运行Height of M-Star? 5
* *
** **
*****
*****
*****
Height of M-Star? 9
* *
** **
*** ***
**** ****
*********
*********
*********
*********
*********
答案 3 :(得分:0)
最愚蠢的方法是打印越来越多的左右对齐的星,直到它们的数量达到N//2
(地板分割),其余的很容易。
for n in range(1,N//2+1):
line = bytearray(' ' * N)
line[:n] = line[-n:] = '*' * n
print line
哈,有了这个,你甚至可以一直循环到N
而不是N//2
- 因为分配到交叉范围不会有任何伤害。