0

Does anybody know how to convert this javascript function to python ?

javascript:

function ding(t, a, e, n) {
  return t > a && t <= e && (t += n % (e - a)) > e && (t = t - e + a), t
}

This is my try on doing so:

def ding(t, a, e, n):
    return t > a and t <= e and (t + n % (e - a)) > e and (t = (t - e + a)), t

It returns a syntax error at the "=" in (t = (t - e + a)) and idk how to solve this right.

When giving it these values: ding(53, 47, 57, 97) it should return 50 in the original javascript function.

8
  • You need to use the walrus operator := to use an assignment in an expression. Commented Jan 24, 2022 at 20:24
  • Python's comma operator isn't the same as JS's. You're creating a tuple in the python version. Commented Jan 24, 2022 at 20:24
  • I suggest you first convert the JS version to if syntax instead of ternary. Then it will be easier to see how to convert it to Python. Commented Jan 24, 2022 at 20:25
  • 1
    Is there a reason why you're trying to do this all in one line with minified variable names? Commented Jan 24, 2022 at 20:26
  • @Barmar I tried doing so t := (t - e + a), but it still returns a bad value 43, it should return 50 Commented Jan 24, 2022 at 20:27

2 Answers 2

1

Does it have to be a one-liner? Why not just split it into a few lines:

def ding(t, a, e, n):
    if t > a and t <= e:
        t += n % (e - a)

        if t > e:
            t -= e - a
    
    return t
    
print(ding(53, 47, 57, 97)) # 50
Sign up to request clarification or add additional context in comments.

3 Comments

You could also use Python's comparisong chaining a < t <= e
Thank's a lot, it works perfectly !
And no it doesn't have to be a one-liner :)
0

that is because python doesn't support evaluating value assignment as assigned value. (t = (t - e + a)) causes SyntaxError instead of returning (t - e + a).

&& operators on the original code seems to be used to eliminate the usage of if operators. This should behave the same way as it did on JS.

def ding(t, a, e, n):
    if a < t <= e:
        t += n % (e - a)
        if t > e:
            t -= (e - a)
    return t

1 Comment

Thank you, it works just fine !!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.