鱼C论坛

 找回密码
 立即注册
查看: 1604|回复: 6

[已解决]关于使用高阶函数,把str转换为int的函数

[复制链接]
发表于 2020-8-17 23:35:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> from functools import reduce
>>> def fn(x, y):
...     return x * 10 + y
...
>>> def char2num(s):
...     digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
...     return digits[s]
...
>>> reduce(fn, map(char2num, '13579'))
13579


请问下第二个函数是干嘛用的呢? 单独调用char2num(s)这个函数也会出错呀。

>>> def char2num(s):
        digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        return digits[s]

>>> char2num(2)
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    char2num(2)
  File "<pyshell#23>", line 3, in char2num
    return digits[s]
KeyError: 2
最佳答案
2020-8-18 08:57:18
相当于自己写str转int的函数,
>>> def char2num(s):
        digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        return digits[s]
首先,自定义函数char2num传入str(其实就是你输入的数字),将你传入的str作为key,然后通过digits字典返回int类型的值,从而达到str转int的目的。
所以你在单独调用该函数时,不能传入数字2,而必须是字符串'2',既带引号的。因为字典中的key都是字符串格式,所以会有你的报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-18 00:03:24 | 显示全部楼层

回帖奖励 +1 鱼币

因为你调用错了,这是个将字符串转为int的函数,参数一个是字符串,而你传递进去的是int数组
应该写成
char2num('2')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-18 00:12:25 | 显示全部楼层
sunrise085 发表于 2020-8-18 00:03
因为你调用错了,这是个将字符串转为int的函数,参数一个是字符串,而你传递进去的是int数组
应该写成

>>> char2num('11')
Traceback (most recent call last):
  File "<pyshell#49>", line 1, in <module>
    char2num('11')
  File "<pyshell#23>", line 3, in char2num
    return digits[s]
KeyError: '11'

再请问下,char2num(s),实参应该是传digits这个字典的键,是这样理解么?所以传'11'也不行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-18 00:13:19 | 显示全部楼层
dong811019 发表于 2020-8-18 00:12
>>> char2num('11')
Traceback (most recent call last):
  File "", line 1, in

不知道哪来的线条
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-18 08:57:18 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

相当于自己写str转int的函数,
>>> def char2num(s):
        digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        return digits[s]
首先,自定义函数char2num传入str(其实就是你输入的数字),将你传入的str作为key,然后通过digits字典返回int类型的值,从而达到str转int的目的。
所以你在单独调用该函数时,不能传入数字2,而必须是字符串'2',既带引号的。因为字典中的key都是字符串格式,所以会有你的报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-18 12:54:40 | 显示全部楼层
dong811019 发表于 2020-8-18 00:12
>>> char2num('11')
Traceback (most recent call last):
  File "", line 1, in

你的这个函数中的字典键值只有'0'到'9'
你传入'11'当然会报错说键值错误啦!

只能传进去 '0' 到 '9'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-18 14:30:42 | 显示全部楼层

回帖奖励 +1 鱼币

最后的育碧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 11:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表