Python代码中float转int强制类型转换失效,输出带.0浮点数问题排查
问题出在这两个地方!
嘿,我来帮你揪出代码里的问题——你看到的.0后缀,主要是因为第一个分支的输出没做类型处理,再加上Python除法的特性搞的鬼:
第一个分支直接输出了浮点数结果
在Python里,用/做除法不管能不能整除,返回的都是float类型。比如输入长度是4时,len(s)/2算出来是2.0而不是整数2,直接print这个值自然会带.0后缀。这也是你看到所有整数结果都带.0的核心原因——大概率你测试时触发的都是第一个分支。第二个分支的转换其实是生效的(只是你可能没测到)
第二个分支里的int(round(...))是能输出纯整数的,比如当输入长度是6时,len(s)/2/2是1.5,round后得到2,int(2)还是2,print出来就是纯整数。不过这里int()其实有点多余,因为round处理整数结果时本身就会返回int类型。
修正后的代码推荐
想要所有整数结果都不带.0,有两种简单的修正方式:
方式一:给所有输出结果做int转换
s = str(input()) half_length = len(s) / 2 if half_length % 2 == 0: print(int(half_length)) # 把浮点数转成整数输出 else: print(int(round(half_length / 2)))
方式二:用整数除法//从根源避免浮点数(更推荐)
整数除法//会直接返回整数结果,不用后续再转换,代码更简洁:
s = str(input()) half_length = len(s) // 2 if half_length % 2 == 0: print(half_length) # 本身就是整数,直接输出 else: print(round(half_length / 2)) # 针对半整数的情况,round后返回整数
内容的提问来源于stack exchange,提问作者Marwen Aouiti
相关产品推荐
相关产品推荐

