今天是Andy学Python的第43 天哦!
大家好,我是Andy。
前两天学习了《Day041|Python编程300例之反转一个3位整数》,心神荡漾了一下(注意不是春心荡漾),能不能反转任意一个正整数。这个问题的挑战之处在于,你事先并不知道输入的是几位数,之前所用的区分个十百千万的各位数字方法并不适用。想到列表有逆序排列的方法,尝试解决此问题。经过两天的努力,终于搞定。解决方案的过程详细如下,以供参考。或许该方法仍有不足,只是目前还未测试出来,如有问题或建议,文末联系作者。
01.
项目需求
输入任意一个正整数,反转输出。如输入123456,输出654321,输入900,返回9。
02.
拆分任务
2.1 将输入的整数转换为列表。
2.2 将列表反转。
2.3 将反转后的列表转换为字符串。
2.4 将字符串转换成整数。
完成整数输出,需要使用int(),其参数只能是数字或字符串,所以将列表先转换成字符串,再传入int()。
03.
版本1.0
查看教材,将列表逆序排列方法重新学习一遍。
输入123456,输出654321;
输入900,输出900;
输入654321,输出654321。
未实现目的。
04.
版本1.1
寻求云哥帮助。问题可能出在sort(reverse=True),这是将列表升序排序再降序。
输入900,输出9;
输入102,输出21。
问题出在:
num_list = [item for item in nums if item != "0"]
该语句只是将原数字中非0数字传入列表。我的用意是任意数字的列表反转输出,包含0,只是0作为首位转换成整数时自动去掉了,并不是不传入0。
05.
版本1.2
将云哥版本中的非0去掉,测试可行。
06.
版本1.3
重新考虑之前写的函数。
sort()是将数字从小到大升序排序(654321按从小到大排列是123456),reverse=True是降序排列。
云哥将步长设为-1输出,实现了反转的目的。
列表reverse()方法也可以实现反转。
尝试用reverse()方法修改。
07.
版本1.2与1.3代码
# 改云哥版本1.2
# 用意:输入任意一个正整数,反转,如输入123456,输出654321,输入900,返回9
def reverse_num(nums):
num_list = [item for item in nums]
# print(num_list)
rev_str = "".join(num_list[::-1]) # 拼接逆序后的字符串
rev_int = int(rev_str) # 字符串转成整数
return rev_int # 返回逆序后的整数
nums = input("请输入一个数字:\n")
print(reverse_num(nums)) # 打印结果
# 改云哥版本1.3
# 用意:输入任意一个正整数,反转,如输入123456,输出654321,输入900,返回9
def reverse_num(nums):
num_list = list(nums)
num_list.reverse() # 列表反转
rev_str = "".join(num_list) # 将反转后的列表拼接到字符串
rev_int = int(rev_str) # 字符串转成整数
return rev_int # 返回反转后的整数
numbers = input("请输入一个数字:\n")
print(reverse_num(numbers)) # 打印结果
51Day Day up!
向上向善,日进一步!
每天学习,努力成长!
定个小目标,开启成长的旅程,遇见更好的自己。
这是我们和自己的约定,许诺自己不负韶华。
路虽远,行则将至;事虽难,做则必成。
成长的最好时机,就是当下。
网友评论