human
What is a the Python code you requested given the following:
I found an interesting problem on https://www.codewars.com/kata/566be96bb3174e155300001b:
You throw a ball vertically upwards with an initial speed `v (in km per hour)`. The height `h` of the ball at each time `t`
is given by `h = v*t - 0.5*g*t*t` where `g` is Earth's gravity `(g ~ 9.81 m/s**2)`. A device is recording at every **tenth
of second** the height of the ball.
For example with `v = 15 km/h` the device gets something of the following form:
`(0, 0.0), (1, 0.367...), (2, 0.637...), (3, 0.808...), (4, 0.881..) ...`
where the first number is the time in tenth of second and the second number the height in meter.
# Task
Write a function `max_ball` with parameter `v (in km per hour)` that returns the `time in tenth of second`
of the maximum height recorded by the device.
# Examples:
`max_ball(15) should return 4`

`max_ball(25) should return 7`
# Notes
- Remember to convert the velocity from km/h to m/s or from m/s in km/h when necessary.
- The maximum height recorded by the device is not necessarily the maximum height reached by the ball.

I tried it in Python, but could not do it. Can you solve it?
assistant
#Here is the Python code you requested.

def max_ball(v0):
    # acceleration
    g = 9.81 
    # height from ground, u is time in s, v speed in m/s
    def h(u):
        return v*u - 0.5*g*u*u
    # from km/h to m/s
    v = v0 * 1000 / 3600.0
    # in t = v/g the derivative is 0, the height is max
    t = v / g
    # record done every 0.1 s; tm is in tenth of second
    tm = int(t*10)
    # device max is before (<=) or after tm (>)
    h1 = h( tm/10.0 )
    h2 = h( (tm+1)/10.0 )
    mx = max( h1, h2 )
    # is the recorded max before or after the theoric max
    if (mx == h( tm/10.0 )):
        return tm
    else:
        return tm+1