2

I am learning python and I meet some troubles.

I want to write the script to reverse a negative integer " -1234 to 4321- " and non-integer " 1.234 to 432.1". please help me. P.S. cannot use "str()" function

I just only can write the script to reverse positive integer 1234 to 4321

def reverse_int(n):

    x = 0
    while n > 0:
        x *= 10
        x += n % 10
        n /= 10
    return x
print reverse_int(1234)
smac89
  • 32,960
  • 13
  • 112
  • 152
GregMaddux
  • 87
  • 1
  • 1
  • 7

7 Answers7

2

how about using your code, but just concatenate a - when n is negative?

rev_int.py:

def reverse_int(m):
    x = 0
    n = m
    if m < 0 :
      n *= -1
    while n > 0 :
        x *= 10
        x += n % 10
        n /= 10
    if m < 0:
      #concatenate a - sign at the end
      return `x` + "-"
    return x

print reverse_int(1234)
print reverse_int(-1234)

This produces:

$ python rev_int.py
4321
4321-
Curious
  • 2,498
  • 1
  • 26
  • 38
  • How are you concatenating a string with an integer at `return \`x\` + "-"`? – TigerhawkT3 Apr 28 '15 at 18:04
  • I can't get this code to work properly for negative numbers, either in Skulpt or in my Python 3 (changing `print` to a function and `/=` to `//=`). – TigerhawkT3 Apr 28 '15 at 18:09
  • 1
    How is that any different from using `str()`? You might as well just do `return \`m\`[::-1]`. – TigerhawkT3 Apr 28 '15 at 18:13
  • @TigerhawkT3 The question is for reversing `integers`, the back ticks convert an integer to string; see [link](http://stackoverflow.com/questions/2847386/python-string-and-integer-concatenation) so the concatenation works. This code would work in Python 2.x, would need change for Python3. Also the question asks NOT to use `str()` – Curious Apr 28 '15 at 18:25
  • 1. I don't think using the syntactic equivalent of `repr()` matches the spirit of the question any better than using `str()`, 2. the question clearly mentions non-integers in both the title and the body, giving an example of `1.234`, and 3. if you're going to use `repr()`/`\`\``, you might as well replace the whole body of the function with `return repr(m)[::-1]`, and then it'll work on Python 2 and 3, for both `int`s and `float`s. – TigerhawkT3 Apr 28 '15 at 18:30
  • backticks are deprecated, should not be used. http://stackoverflow.com/a/1673087/1860929 – Anshul Goyal May 01 '15 at 06:36
2
def reve(x):
    x=str(x)
    if x[0]=='-':
        a=x[::-1]
        return f"{x[0]}{a[:-1]}"
    else:
        return x[::-1]

print(reve("abc"))
print(reve(123))
print(reve(-123))

#output cba 321 -321

  • 2
    While this code might answer the OP's question, you could make your answer much better by appending an explanation on how your code solves the problem – Simas Joneliunas Jul 06 '21 at 00:09
0

Using SLICING EASILY DONE IT

def uuu(num):
if num >= 0: 
    return int(str(num)[::-1])
else:
    return int('-{val}'.format(val = str(num)[1:][::-1]))
Sunil Chaudhary
  • 1,109
  • 11
  • 25
0

Below code runs fine on Python-3 and handles positive and negative integer case. Below code takes STDIN and prints the output on STDOUT.

Note: below code handles only the integer case and doesn't handles the non-integer case.

def reverseNumber(number):
        x = 0
        #Taking absolute of number for reversion logic
        n = abs(number)
        rev = 0
        #Below logic is to reverse the integer
        while(n > 0):
            a = n % 10
            rev = rev * 10 + a
            n = n // 10
        #Below case handles negative integer case
        if(number < 0):
            return (str(rev) + "-")
        return (rev)
#Takes STDIN input from the user
number=int(input())
#Calls the reverseNumber function and prints the output to STDOUT
print(reverseNumber(number))
Ankit Raj
  • 829
  • 1
  • 7
  • 17
0

Using str convert method.

num = 123
print(str(num)[::-1])
  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community May 11 '22 at 15:07
-1

Use this as a guide and make it work for floating point values as well:

import math

def reverse_int(n):
    if abs(n) < 10:
        v = chr(abs(n) + ord('0'))
        if n < 0: v += '-'
        return v
    else:
        x = abs(n) % 10
        if n < 0: return chr(x + ord('0')) + reverse_int(math.ceil(n / 10))
        else: return chr(x + ord('0')) + reverse_int(math.floor(n / 10))

print reverse_int(1234)
smac89
  • 32,960
  • 13
  • 112
  • 152
-3

Why not just do the following?:

def reverse(num):
    revNum = ''
    for i in `num`:
        revNum = i + revNum
    return revNum

print reverse(1.12345)
print reverse(-12345)

These would print 54321.1 and 54321-.

Lol, I don't understand the down-vote.. I guess this is too simple and doesn't require over complicating the process to get to the same result? Does this not solve the problem at hand no matter the number used?

Aaron
  • 1
  • 1
  • If you wanted simple, you could've copied my `return \`m\`[::-1]` comment exactly instead of adding a loop. And, of course, I don't think `repr()` (what `\`\`` does in Python 2 - `repr()` would be better anyway because it works in 2 and 3) is any better than `str()`. – TigerhawkT3 Apr 28 '15 at 18:46
  • As written, your script produces 1000000000054321.1 for 1.12345. – Mike Andrews Apr 28 '15 at 18:46