鱼C论坛

 找回密码
 立即注册
查看: 2565|回复: 1

[已解决]运算相关的魔法方法(上)-类和对象(IX)中关于__int__()魔法方法实例的困惑

[复制链接]
发表于 2022-12-2 21:22:54 | 显示全部楼层 |阅读模式

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

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

x
各位大神:

小甲鱼Python视频中的运算相关的魔法方法(上)-类和对象(IX),在介绍__int__()魔法方法时举例如下:
class ZH_INT:
    def __init__(self, num):
        self.num = num
    def __int__(self):
        try:
            return int(self.num)
        except ValueError:
            zh = {'零':0,"一":1,"二":2,"三":3,"四":4,"五":5,"六":6,"七":7,'八':8,'九':9,
                  '壹':1,"贰":2,'叄':3,"肆":4,"伍":5,"陆":6,"柒":7,"捌":8,"玖":9}
            result = 0
            for each in self.num:
                if each in zh:
                    result += zh[each]
                else:
                    result += int(each)
                result *= 10
            return result // 10
其中我不太明白以下几点:
1.
  else:
      result += int(each)
  这块语句具体起了什么作用?跟上面try:return int(self.num)语句有何区别?
2.
     result *= 10
return result // 10
这块语句起了什么作用?为何要先给result自身乘以10,然后再除以10?

最佳答案
2022-12-2 21:41:20
1、你输入的内容里面可能会有汉子和数字的集合体,例如:一三14,或者:5贰零,这个时候就可以直接int()了
2、result *= 10是每一位往前进1,例如:5贰零,最先匹配出 result=5,result *= 10后 result=50 ,再匹配下一位 “贰”,这个这个时候 result = 50 + 2 = 52,以此循环
    匹配到最后一位后 result *= 10又执行了一次,使得结果大了10倍,所以输出的时候要  result // 10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-2 21:41:20 | 显示全部楼层    本楼为最佳答案   
1、你输入的内容里面可能会有汉子和数字的集合体,例如:一三14,或者:5贰零,这个时候就可以直接int()了
2、result *= 10是每一位往前进1,例如:5贰零,最先匹配出 result=5,result *= 10后 result=50 ,再匹配下一位 “贰”,这个这个时候 result = 50 + 2 = 52,以此循环
    匹配到最后一位后 result *= 10又执行了一次,使得结果大了10倍,所以输出的时候要  result // 10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 11:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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