Python 在不使用反转函数或列表的情况下反转整数

Python 在不使用反转函数或列表的情况下反转整数,python,Python,我一直在为我班上的一个问题而挣扎,当我提出一个解决方案时,我的教授告诉我这是不正确的,尽管我得到了他要求的结果,同时又遵守了他为这个问题制定的规则 该问题要求我执行以下操作: 编写一个Python程序,从键盘读取一个整数,并将其反方向写入屏幕。您需要使用for循环,不要使用reverse函数或列表 我的代码如下所示: num = int(input("So you like things backwards eh? Well, enter a number and I'll do m

我一直在为我班上的一个问题而挣扎,当我提出一个解决方案时,我的教授告诉我这是不正确的,尽管我得到了他要求的结果,同时又遵守了他为这个问题制定的规则

该问题要求我执行以下操作:

编写一个Python程序,从键盘读取一个整数,并将其反方向写入屏幕。您需要使用for循环,不要使用reverse函数或列表

我的代码如下所示:

num = int(input("So you like things backwards eh? Well, enter a number and 
I'll do my best: "))
Onum = str(num)
revStr = ""
for x in Onum:
  revStr = x + revStr

print("Your wish is my command! Your" , num, "looks like", revStr, "Backwards!")
它适用于任何以0结尾的数字甚至数字

我不知道如果有限制,我还能怎么做。我可能做错了什么?

试试这个:

def reverse(n):
    m = 0
    while n > 0:
        n, r = divmod(n, 10)
        m = 10 * m + r
    return m
然而,对于一个实际的应用程序,我希望以下速度会快得多:

def reverse(n):
    return int(str(n)[::-1])

尝试满足注释中给出的愚蠢约束的其他几种方法:

n = 45712090
s = str(n)
t = ""
m = len(s)
for i in range(m):
    t = s[i] + t
print(t)


n = 45712090
s = str(n)
m = len(s)
for i in range(m - 1, -1, -1):
    print(s[i], end="")
print()


import math
n = 45712090
m = math.ceil(math.log10(max(1, n)))
for i in range(m):
    n, r = divmod(n, 10)
    print(r, end="")
print()

在while循环中,我们传递条件,直到a(12345)小于0,开始时b=0,这样b*10等于0+a(12345)%10=5(将是a的最后一位),然后在下一行中,当你在a(12345)//10中进行楼层划分时,它将去掉a的最后一位,变成1234,这个循环再次运行,并检查a(1234)是否>0然后转到第二行,这一次b=b(5)*10+a(1234)%10,b变为50,a变为123,直到它们在a中不剩下任何数字,我希望你得到它

是的,我想要一个整数。但当我尝试使用以0结尾的整数执行此操作时,反向输出删除了0。除了将输入转换为字符串外,我不知道如何保存它。如果它是整数,则0将丢失,但可能这正是您的techear所需要的。直到
divmod
-一直以来都在以艰难的方式进行此操作。这非常清楚和简洁,我真的为此感谢您。但是,我不允许使用反向函数来解决这个问题。额外信贷部门:问题陈述说“整数”;代码无法处理n<0。不过,我们不清楚是想要
-123=>321-
还是
-123=>-321
。前者必须对符号进行特殊处理,我们也会遇到-MAXINT的问题。后者要求我重新熟悉负数的整数除法。@戴夫没有Cutter <代码> 321—<代码>不是整数,而< > > 321 < /C>不是完全相反的整数,所以我没有考虑NI同意它对另一个需要解决同样问题的用户没有同样的约束是有用的。我可能误解了这段代码,但从我在谷歌上搜索的
def reverse():
调用了reverse函数。我必须使用for循环。有没有一种方法可以为整数中的每个字符指定“位置”,而不将其转换为字符串,然后分别打印这些位置?就像在for循环中使用范围一样?在while循环中,我们传递条件,直到a(12345)小于0,开始时b=0,这样b*10等于0+a(12345)%10=5(将是a的最后一位),然后在下一行中,当你在a(12345)//10中进行楼层划分时,它将去掉a的最后一个数字,变成1234,这个循环再次进行,检查a(1234)>0,然后这次是否转到第二行b=b(5)*10+a(1234)%10,b变为50,a变为123这将一直持续到a中没有数字为止我希望你能理解。非常感谢你的解释!请注意,您也可以在原始答案中添加您的解释。
a = int(input())
b = 0 

while(a>0):
    b = b*10 + a%10
    a = a//10

print(b)