如何使用Python 2.7绘制此蝴蝶结图案?
我需要使用Python While循环绘制以下模式 我花了相当多的时间,并提出了这个代码,打印它完美,但这个代码是如此之长,我觉得它不是一个好的代码之一 如果这里有人能帮我缩小这段代码或者建议一种更好的输出方式 代码如下:如何使用Python 2.7绘制此蝴蝶结图案?,python,python-2.7,Python,Python 2.7,我需要使用Python While循环绘制以下模式 我花了相当多的时间,并提出了这个代码,打印它完美,但这个代码是如此之长,我觉得它不是一个好的代码之一 如果这里有人能帮我缩小这段代码或者建议一种更好的输出方式 代码如下: #Question 10, Alternate Approach temp = 1 pattern = "" innerSpace = 7 starCount = 1 while temp <= 5: st = 1 while st <= sta
#Question 10, Alternate Approach
temp = 1
pattern = ""
innerSpace = 7
starCount = 1
while temp <= 5:
st = 1
while st <= starCount:
pattern = pattern + "*"
if st != starCount:
pattern = pattern + " "
st = st + 1
sp = 0
if temp == 5:
innerSpace = 1
while sp < innerSpace:
pattern = pattern + " "
sp = sp + 1
st = 1
while st <= starCount:
if temp == 5:
st = st + 1
pattern = pattern + "*"
if st != starCount:
pattern = pattern + " "
st = st + 1
temp = temp + 1
innerSpace = innerSpace - 2
pattern = pattern + "\n"
if temp % 2 == 0:
pattern = pattern + " "
else:
starCount = starCount + 1
starCount = 2
innerSpace = 1
while temp > 5 and temp <= 9:
st = 1
while st <= starCount:
pattern = pattern + "*"
if st != starCount:
pattern = pattern + " "
st = st + 1
sp = 0
while sp < innerSpace:
pattern = pattern + " "
sp = sp + 1
st = 1
while st <= starCount:
pattern = pattern + "*"
if st != starCount:
pattern = pattern + " "
st = st + 1
temp = temp + 1
innerSpace = innerSpace + 2
pattern = pattern + "\n"
if temp % 2 == 0:
starCount = starCount - 1
pattern = pattern + " "
print pattern
#问题10,替代方法
温度=1
pattern=“”
内部空间=7
星数=1
而温度使用星号、间距和计数变量
counting=1
star_amount=1
space_amount=6
loop_var=7
while loop_var>0:
loop_var-=1
if space_amount==0:
counting*=-1
stars=" * "*star_amount
spaces=" "*space_amount
print(stars+spaces+stars)
star_amount+=counting
space_amount-= counting*2
因为这看起来像是一个作业,我会给你一个提示,我会怎么做
利用弓的对称性。它围绕水平轴和垂直轴对称。因此,您实际上只需要解算一个角点,然后复制/镜像结果即可得到其余的角点
该代码给出了一种解决问题的方法,即移动初始弦(弓的中间)以获得所需的形状:
m = '*'
size = 4
n = 5 # must be odd
pad = ' ' * n
middle = (m + pad) * size
half = int(n / 2) + 1
print middle
print middle[half*1:]
print middle[half*2:]
print middle[half*3:]
print middle[half*4:]
print middle[half*5:]
print middle[half*6:]
这就产生了:
* * * *
* * *
* * *
* *
* *
*
*
祝你好运 我会使用列表理解和字符串,并利用图形的对称性
不是完整的解决方案,但可能是循环体的一部分
In [2]: a = '*' + ' '*8
In [3]: a
Out[3]: '* '
In [24]: result = ''
In [25]: result += a
In [26]: result
Out[26]: '* '
In [27]: result += a[-1::-1]
In [28]: result
Out[28]: '* *'
In [29]: result += '\n'
In [30]: a = ' '+'*' + ' '*7
In [31]: a
Out[31]: ' * '
In [32]: result += a
In [33]: result += a[-1::-1]
In [34]: result += '\n'
In [36]: print result
* *
* *
我知道你如何使用while循环,就好像他们使用where for循环一样。
我认为这不是你老师想要的
while背后的想法是运行直到满足某个条件,而不是
当迭代次数超过某个限制时
该条件不需要包含在while语句中,您可以稍后进行检查,并使用break命令退出循环
请尝试以下示例:
start = '*'
while True:
print start
if start[0] == '*':
start = ' ' + start
else:
start = '*' + start
if (start == '* * *'):
break
输出只是你作业的一部分,我想你应该能够完成它,最终达到预期的结果 希望此时HW已经完成。由于我使用动态编程解决了这个问题,所以我想在这里列出解决方案
意见:
在观察其模式时,观察到下半部分是上半部分的回文。因此,我们只需要计算上半部分
接下来我们看到,对于每一行计数,我们都有类似于,
第1行=1,n
第2行=2,n-1
第3行=1,3,n-2,n
第4行=2,4,n-3,n-1
.. 等等
使用迭代索引作为行计数,n
作为输入值,我们可以非常高效地动态计算剩余值
源代码
def get_list(bound, alist):
tmp_list = []
for i in xrange(1,bound + 1):
tmp_list.append(star if i in alist else dot)
return tmp_list
star = "*"
dot = " "
n = 20 #How large of BowTie do you want?
m = (n * 2) - 1
#get top half list
th = []
for idx,k in enumerate(xrange(1,n+1)): #run through 1 - n
row = idx + 1
tmplst = []
if row % 2 != 0:
tmplst.append(i for i in xrange(1,row + 1) if i % 2 != 0)
tmplst.append(i for i in xrange(m, m-row, -1) if i % 2 != 0)
else:
tmplst.append(i for i in xrange(1,row + 1) if i % 2 == 0)
tmplst.append(i for i in xrange(m, m-row, -1) if i % 2 == 0)
#append each row value to top half list.
th.append(sorted(set([j for i in tmplst for j in i])))
#create palindrome of top half which is our bottom half
th = th + th[len(th) -2::-1]
#create list of * and blanks
final = [get_list(m, i) for i in th]
#Print BowTie
for i in final:
print ' '.join(i)
不,不是。那个领结和我的不同。修改它,程序员就是这么做的!考虑将结果呈现为临时(随机访问)缓冲区而不是直接流向流。可能是原始问题中没有指定的collections.defaultdict
?@HenrySpike。嘿,非常感谢,我试过了。虽然有一个bug,但最后两个语句应该是:star\u amount+=counting和space\u amount+=countingperfect。谢谢