Python 这段代码是如何创建一个数字“quot;“飞镖”吗;?
我已经尝试学习Python几个月了。 我一直在edabit.com上做练习,并且一直掌握着“难”和“非常难”的任务。我想我会给一个“专家”的问题一个机会,看看我会进入什么。 有人给我一个任务,只给我一个长度,从整数列表中创建一个正方形的“镖靶” 练习可以在这里找到: 输出应如下所示:Python 这段代码是如何创建一个数字“quot;“飞镖”吗;?,python,Python,我已经尝试学习Python几个月了。 我一直在edabit.com上做练习,并且一直掌握着“难”和“非常难”的任务。我想我会给一个“专家”的问题一个机会,看看我会进入什么。 有人给我一个任务,只给我一个长度,从整数列表中创建一个正方形的“镖靶” 练习可以在这里找到: 输出应如下所示: make_dartboard(8) ➞ [ 11111111, 12222221, 12333321, 12344321, 12344321, 12333321, 12222221,
make_dartboard(8) ➞ [
11111111,
12222221,
12333321,
12344321,
12344321,
12333321,
12222221,
11111111
]
def make_dartboard(n):
row, top = 0, []
for i in range(n, 0, -2):
row += int('{:0^{}}'.format('1'*i, n))
top.append(row)
bottom = top[::-1][1:] if n%2 else top[::-1]
return top + bottom
果然,我真的被难倒了。将其视为一个学习练习,我向前看了看其他用户的解决方案,发现了以下代码:
问题代码:
make_dartboard(8) ➞ [
11111111,
12222221,
12333321,
12344321,
12344321,
12333321,
12222221,
11111111
]
def make_dartboard(n):
row, top = 0, []
for i in range(n, 0, -2):
row += int('{:0^{}}'.format('1'*i, n))
top.append(row)
bottom = top[::-1][1:] if n%2 else top[::-1]
return top + bottom
我已经看了一个多小时了,但还不清楚这段代码是如何工作的。我承认有无数的Python概念、函数和语法我仍然不理解,但我真的很想理解(例如,.format()对我来说仍然是一个全新的函数,仍然不完全理解它)
有没有人能很好地解释一下这段代码中到底发生了什么?真正让我感到困惑的是第4行和第6行
我很感激你愿意给我的任何时间,也很感激你花时间阅读了这篇文章
*我想感谢edabit用户Joshua Señoron和zatoichi49分别创建和解决了这个问题。例如,我们正在制作一个5号的镖靶,输出应该是:
>>> make_dartboard(5)
[11111, 12221, 12321, 12221, 11111]
让我们逐行查看代码:
用于范围(n,0,-2)中的i:
->用于[5,3,1]中的i
row+=int({:0^{})。格式('1'*i,n))
指:
强制将场集中在可用空间内
'{:0^{}'。格式('1'*i,n))
,它给出了一个长度为n的字符串,其中i
的'1'
个数在中间填充'0'
。更多关于
i=5
和n=5
,它给出了“11111”i=3
和n=5
,它给出了“01110”i=1
和n=5
,它给出“00100”行
等于其在int
中的累积和(因此可以将其相加):
i=5
和n=5
,行
->11111i=3
和n=5
,行
->12221i=1
和n=5
,行
->12321行
按顺序追加到顶部
,其余代码按与底部
相反的顺序创建相同的列表。最后,返回top
和bottom
bottom=top[:-1][1:]如果n%2否则top[:-1]#code[:-1]会反转列表
bottom
从下到上复制top
列表。如果n
为偶数,则从最底部复制。如果n
是奇数,您可能会注意到,当concatbottom
到top
时,需要跳过一个唯一的中心行
如果有帮助,请告诉我。这个问题可能适合我,谢谢你的提醒!实际上,我试图向那个社区提出一个单独的问题,但他们关闭了它,因为我没有编写代码。。。是否有一个好的社区可以询问现有代码,试图了解它在做什么?有时,谷歌在试图理解某些概念时会发现自己一无是处。再次感谢!这是难以置信的帮助,谢谢你花时间为我解释。@AustinEckel很乐意帮忙,我的朋友。如果你觉得我的答案有用的话,我很乐意投票接受。快乐编码!