我的代码运行良好,例如,如果我输入123,我将得到321。但是有一个问题,当我尝试输入01230,它将输出321。我似乎想不明白。
编辑:必须使用整数作为数据类型。
while True:
reverse=0
num=str(input("Enter an integer of at least 2 digits or -1 to quit: "))
if num == str(-1):
break
elif len(num)< 2 or len(num)>11:
print("error")
else:
num=int(num)
while(num>0):
lastDigit=num%10
reverse=(reverse*10)+lastDigit
num=num//10
print(reverse)
我试过使用if语句来检查零,但我觉得效率太低,找不到更好的方法。
您可以将变量保留为字符串。下面是调整当前程序的代码片段。
while True:
reverse=0
num=str(input("Enter an integer of at least 2 digits or -1 to quit: "))
if num == str(-1):
break
elif len(num)< 2 or len(num)>11:
print("error")
else:
reverse = num[::-1]
print(reverse)
测试结果显示如下终端输出:
@Dev:~/Python_Programs/Palindrome$ python3 Reverse.py
Enter an integer of at least 2 digits or -1 to quit: 01230
03210
Enter an integer of at least 2 digits or -1 to quit: -1
试一试,看看它是否符合你的项目精神。
首先,您不需要使用str()函数来转换从用户获得的值,因为input()函数总是返回字符串作为返回类型。详见https://docs.python.org/3/library/functions.html#input
这部分将尝试将字符串num转换为整数,但它将忽略前导零,因为如果您仔细考虑,0123作为整数没有任何意义。
num=int(num)
这部分也不适用于10的倍数的数字,您可以使用条件来检查情况是否如此,并在末尾使用该信息,或者您可以使用其他方法,如在开始时将1加到数字上,并在末尾处理它(即。5670→5671→1765→0765,但是如果你不使用字符串,前导零没有任何意义)
lastDigit=num%10
reverse=(reverse*10)+lastDigit
num=num//10
你能做的是,你可以在开始和结束处数0,使用你已经做过的相同的逻辑,同时忽略它们,当你完成反转数字时简单地添加。对于开始的0计数,您应该使用字符串格式或再次输入user,直到他/她输入的数字没有前导零,对于末尾的0,使用模运算符。
您可以查看带有前导零的Display number,这可能会有所帮助。您可能还需要添加一些错误处理,因为您直接将用户输入转换为整数。