使用星号打印空心圆(所以没有乌龟)

时间:2016-10-05 19:05:48

标签: python-3.x for-loop

对于学校作业,我需要用空心圆圈打印笑脸。

def circle(i):
    i += 1
    from math import sqrt
    result = ""
    midden = i / 2.0
    for a in range(i):
        for b in range(i):
            c = sqrt((midden - a)**2 + (midden - b)**2)
            if midden > c:
                result += "#"
            else:
                result += " "
        result += "\n"
    print(result)
circle(11)

上面的代码是我用来打印一个实心圆圈的代码,但我不能为我的生活弄清楚如何使圆圈空心

1 个答案:

答案 0 :(得分:1)

以下代码首先创建一个带空格的矩阵,然后沿着圆圈的1/8行走,放置“#”字符。可以同时设置7个镜像位置,填充整个圆圈。最后,矩阵被转换为返回的字符串。

from math import sqrt

def circle(radius):
    pixels = [[' ' for x in range(2*radius+1)] for y in range(2*radius+1)]
    y = radius
    x = 0
    max = (radius + 0.5)**2
    while x <= y:
        pixels[radius+y][radius+x] = '#'
        pixels[radius+y][radius-x] = '#'
        pixels[radius-y][radius+x] = '#'
        pixels[radius-y][radius-x] = '#'
        pixels[radius+x][radius+y] = '#'
        pixels[radius+x][radius-y] = '#'
        pixels[radius-x][radius+y] = '#'
        pixels[radius-x][radius-y] = '#'
        x += 1
        if x*x + y*y >= max:
            y -= 1

    return '\n'.join([''.join([v for v in row]) for row in pixels])

print(circle(11))