You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python代码无法绘制圆形仅输出3个点,C++可正常运行?

为啥你的Python代码只画出3个点?问题拆解+修复方案

嘿,我来帮你捋捋这个问题——你的代码只输出3个点,核心问题其实是半径和遍历的坐标范围完全不搭,再加上输出逻辑的小bug,才导致了这个尴尬的结果。咱们一步步说:

1. 最关键的错误:半径1 vs 坐标0-1000,完全不匹配

你设置的radius=1,但x和y却从0跑到1000——你想啊,只要x≥2,x²就已经是4了,比radius²=1大好多,那(radius**2)-(x**2)-(y**2)肯定是负数,根本触发不了print('.')。

能满足条件的只有三个点:

  • x=0, y=0 → 1-0-0=1≥0
  • x=0, y=1 →1-0-1=0≥0
  • x=1, y=0 →1-1-0=0≥0

这就是为啥只输出3个点的原因。你说C代码正常运行,估计是C里的坐标范围和半径是匹配的(比如C++遍历的是从-r到r的范围,或者半径设得很大),逻辑看似相同,但参数差得远,结果自然不一样。

2. 输出格式的小问题:每个点单独换行

你的代码里,每次打印.后都执行print(' '),这会让每个点单独占一行,而不是在同一行里横向绘制,视觉上也会乱成一团。

修复后的代码示例

咱们调整半径和坐标范围,同时修复输出逻辑,比如画一个半径50的完整圆:

radius = 50
# 遍历从-radius到radius,覆盖四个象限
for y in range(-radius, radius + 1):
    current_line = ""
    for x in range(-radius, radius + 1):
        # 圆的核心判断:点到原点的距离平方 ≤ 半径平方
        if x**2 + y**2 <= radius**2:
            current_line += "."
        else:
            current_line += " "
    print(current_line)

如果只需要第一象限的四分之一圆,就把范围改成0到radius:

radius = 50
for y in range(0, radius + 1):
    current_line = ""
    for x in range(0, radius + 1):
        if x**2 + y**2 <= radius**2:
            current_line += "."
        else:
            current_line += " "
    print(current_line)

进阶小技巧:更平滑的圆形

如果想要边缘更顺滑的圆,可以用math.hypot()直接计算点到原点的距离,代码更简洁:

import math

radius = 50
for y in range(-radius, radius + 1):
    current_line = ""
    for x in range(-radius, radius + 1):
        # 直接判断距离是否≤半径
        if math.hypot(x, y) <= radius:
            current_line += "."
        else:
            current_line += " "
    print(current_line)

这样跑起来就能看到清晰的圆形啦~

内容的提问来源于stack exchange,提问作者Kriegher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:22:29