python数字转换_python int()数字转换问题

展开全部

这个2113问题的原因是你用的np.zeros(count),它的默5261认数据类型是float类型的,而且不管你往这个np列表传4102入什么类型的值,它都是自1653动改为float类型。注意这个float类型可不是原生的浮点类型, 虽然“看”起来差不多, 但如果用type函数的话就能看出来区别了。

有两种解决方法可以解决你的问题。list = np.zeros(count) 改为 list = np.zeros(count,dtype=int)。 这样就不会出现你所说的问题, 但对于你的这段程序用numpy有点大材小用了。 建议你用下面的方法。

list = np.zeros(count) 改为 list = [0 for i in range(count)]

然后第二张图的错误提示正是因为numpy试图把字符串自动转换为浮点数,但显然是不可能的。为了避免这个错误就必要用我上面的第二个解决方法才行了。

最后,你的代码有可优化的空间,太多遍历和判断条件了。可能会很长,但可能会对你有一些启发,如果没有耐心的话,可以看最后一条就是最终完成的代码。slice函数处理逻辑过于复杂了。 你是想把如361变成[3,6,1]这样的情况吧。那为何不使用list(str(361))呢,虽然最后的结果里面的元素是字符串类型,但后面直接用int(i)的方式解决了。这样的话,count函数都可以省略了。

看到slice函数下面的for遍历语句,我明白了你的用意,就是为了计算各个位数相加的和,这样的话,就连slice函数都没必要了。直接下面代码就可以了:for i in str(n):

sum += int(i)

3.再继续,发现又是slice和for循环,原来是要继续把sum分开。直接list(str(sum))即可。

4.到最后了,我看到了很多条件判断,总觉得条件判断这么写,显得有点罗嗦了点。可以把你这个条件判断写一个类似配置文件的对象,其实就是字典对象。 最终给你总结一下你的代码就是下面这样的:#input直接用字符串类型就够用了。然后去掉所有import

inputStr = input()

sum = 0

#这条赋值语句其实无所谓, 但对于理解代码来说还是很重要的,反正也不影响性能,何乐而不为呢。

result = []

#下面的是类似配置文件的字典对象

convertDic = {'1':'yi','2':'er','3':'san','4':'si','5':'wu','6':'liu','7':'qi','8':'ba','9':'jiu','0':'ling'}

#算出input的各个位相加的和

for i in inputStr:

sum += int(i)

#str也是可迭代的类型,所以通过map和lambda匿名函数把各个值变成相对应的拼音。

result = list(map(lambda x:convertDic[x], str(sum)))

print(result)

#去掉注释和print语句,这段程序只用了7行,而且理解起来是不是还挺简单的(除了最后一条)

#我相信你对于上面的语句不是很懂,里面涉及了两个看起来“高达上的东西”,但其实就是一种简写形式。

#map就是映射,简单说就是一个循环,就是把每一个元素经过一个函数处理后再返回来的过程。

#lambda是一个匿名函数,没有函数名,只能有一个表达式,且这个表达式就是返回值。它就是一个精简版的函数而已。当然,map里面也可以直接写已定义好的函数名。

#最后我用比较通俗的代码给你解释一下上面那句语句的大致的工作流程。

#定义一个函数,相当于上面的匿名函数.

def convert(x):

return convertDic[x]

#然后遍历sum,并把每个元素替换成相应的拼音。现在的sum是一个int类型,int类型是不能迭代的或者遍历的,所以需要把int转换成str类型。

#这里讲一点map和这个循环遍历的区别,首先map会把已有的元素替换成经过函数处理的值。但这条循环是在一个空的list对象里添加数据,这是区别。当然,也可以写替换数据的循环,但代码量不是这2行了,会更多。如果要遍历的话,这种写法还是比较推荐的。

for i in str(sum):

result.append(convert(i))

#result.append(convertDic[x]) 也可以这样写,但为了解释上面那条语句,所以这条注释掉当给你的启发。

#最后print就可以看到结果了,也就是说,我们把4条一句压缩成了一天语句了。如果还是不了解的话,可以翻翻文档什么的,里面会有一些例子可当参考。

print(result)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值