为何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
相关产品推荐
相关产品推荐

