题目
本关任务:函数 fun 的功能是:将两个两位数的正整数 a、b 合并形成一个整数放在 c 中。合并的方式是:将 a 数的十位和个位数依次放在 c 数的十位和千位上,b 数的十位和个位数依次放在 c数的百位和个位上。
注意:请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 中填入你编写的若干语句。
输入格式 整数 a、b。
输出格式 计算得到的结果c。
这道题与之前做的有一点不一样:已经给出部分,且要求不能修改
def fun(a, b):
#********* Begin *********#
#********* End *********#a,b=map(int,input().split())
c = fun(a, b)
print(c)
解法一
拿到题第一眼思路是组合起来,个位加十位加百位加千位,直接动手
def fun(a, b):
#********* Begin *********#
return a[-1]+b[-2]+a[-2]+b[-1]
#********* End *********#
a,b=map(int,input().split())
c = fun(a, b)
print(c)
运行一下,报错了:TypeError: 'int' object is not subscriptable
c一下,得到:这个错误通常是因为你尝试对一个整数类型的变量进行下标操作,而整数类型是不支持下标操作的。可能的原因是你错误地将一个整数类型的变量视为了一个列表或字典类型的变量。原因是题目对输入的数据进行了限制 int(整型)。这个时候就需要对a,b进行转化,使进行运算的a,b转化为字符串进行运算。
def fun(a, b):
#********* Begin *********#
a,b=str(a),str(b)
return a[-1]+b[-2]+a[-2]+b[-1]
#********* End *********#
a,b=map(int,input().split())
c = fun(a, b)
print(c)
运行一下,没有毛病,提交代码,成功。然后就看着代码想起来(思考一下),发现如果输入的数字是各位数,代码一定会报错,因为b[-2]超过代码长度,超出检索范围。回头看一下题目,只见题目明确要求“将两个两位数的正整数 a、b ”,好吧,没毛病……但这不能磨灭我求知的心!!!
打开题解学习一下,只能说全是技巧
解法二
def fun(a, b):
#********* Begin *********#
d=a//10
e=a%10
f=b//10
g=b%10
return g+10*d+100*f+1000*e
#********* End *********#
a,b=map(int,input().split())
c = fun(a, b)
print(c)
好啦,写出来之后发现一个新问题,解法二只能解决一位数到两位数的输入,两位数以上的输入会报错的。难道没有万全之策了吗?
哈哈,当然不会,现在唯一的问题是补位数(在个位数前补0),不会这么办,csdn搜“int前补0”,发现 zfill函数,格式为"变量名.zfill(字符串长度,如2),实操如下
解法三
def fun(a, b):
#********* Begin *********#
a,b=str(a),str(b)
if len(a)<2 or len(b)<2:
a=a.zfill(2)
b=b.zfill(2)
return a[-1]+b[-2]+a[-2]+b[-1]
else:
return a[-1]+b[-2]+a[-2]+b[-1]
#********* End *********#
a,b=map(int,input().split())
c = fun(a, b)
print(c)
完美解决问题!!!
zfill函数
解法三中出现了zfill函数,对我来说是一种新东西,得了解一下
语法:str.zfill(补零后字符串长度)
这里str是一个变量名,str指变量类型为字符串类型,如果对整型、浮点型进行操作,则需要使用str()进行数据类型的转化,否则会报错。