Python初学者:循环中的选择性打印

Jon*_*aus 5 python for-loop

我是一个非常新的python用户(就编程而言,只有一点点html/javascript的经验),并且试图找到一些方法在我的循环中只输出间歇性数字用于基本的自行车赛车模拟(10,000行骑自行车的位置会相当过分:P).

我在这个循环中尝试了几种"合理的"方法来传达浮点数等于其整数层(int,floor division)的条件,以便每100次迭代打印出来:

 for i in range (0,10000):
  i = i + 1
  t = t + t_step #t is initialized at 0 while t_step is set at .01
  acceleration_rider1 = (power_rider1 / (70 * velocity_rider1)) - (force_drag1 / 70)
  velocity_rider1 = velocity_rider1 + (acceleration_rider1 * t_step)
  position_rider1 = position_rider1 + (velocity_rider1 * t_step)
  force_drag1 = area_rider1 * (velocity_rider1 ** 2) 
  acceleration_rider2 = (power_rider2 / (70 * velocity_rider1)) - (force_drag2 / 70)
  velocity_rider2 = velocity_rider2 + (acceleration_rider2 * t_step)
  position_rider2 = position_rider2 + (velocity_rider2 * t_step)
  force_drag2 = area_rider1 * (velocity_rider2 ** 2)

  if t == int(t): #TRIED t == t // 1 AND OTHER VARIANTS THAT DON'T WORK HERE:(
   print t, "biker 1", position_rider1, "m", "\t", "biker 2", position_rider2, "m" 
Run Code Online (Sandbox Code Playgroud)

Ste*_*hen 15

for循环自动递增,因此您无需使用i = i + 1.

你不需要t,只需使用%(modulo)运算符来查找数字的倍数.

# Log every 1000 lines.
LOG_EVERY_N = 1000

for i in range(1000):
  ... # calculations with i

  if (i % LOG_EVERY_N) == 0:
    print "logging: ..."
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 6

我建议每 100 次迭代打印一次

if i % 100 == 0: ...
Run Code Online (Sandbox Code Playgroud)

如果您不想第一次打印,那么也许

if i and i % 100 == 0: ...
Run Code Online (Sandbox Code Playgroud)

(正如另一个答案所指出的,i = i + 1鉴于这i是 for 循环的控制变量,这是多余的——尽管它并不是特别具有破坏性if,只是有些多余,并且与为什么不触发的问题并不真正相关)。

虽然基于该条件t似乎很有吸引力,但t == int(t)不太可能起作用,除非该值是某个整数的t_step倍数——除非该条件成立,否则分数不能在浮点数中精确表示,因为浮点数使用二进制基数。(您可以使用,但这会严重影响计算速度,因为计算由机器硬件直接支持,而十进制计算则不然)。1.0 / 2**NNdecimal.Decimalfloat