Python判断Harshad数

Python每日一练


问题:

编写一个程序来判断一个数字是否为Harshad数。

如果一个数字可以被它的数字之和整除,那么它就是一个Harshad数,如171:
number = 171
1 + 7 + 1 = 9 [数字之和]
9 正好整除 171

定义函数is_harshad(),参数为num(整数)。
在函数内,判断该数字是否为Harshad数,如果是,返回True,否则返回False。

题目来源:PythonTip
https://edu.py2fun.com/


代码实现

代码如下(示例):

def is_harshad(num):
    # 在此处编写你的代码
    num_sum = 0		
    for i in str(num):		# 把数值里的每个数字拿出来,做求和运算
        num_sum += eval(i)

    if num % num_sum == 0:		# 数值与各数字之和做取余操作,余数为0则可以被整除
        return True
    else:
        return False     
    
# 获取用户输入
num = int(input())

# 显示输出
print(is_harshad(num))

示例输入:

300

示例输出:

True


总结

纵观上述代码,思想明了,逻辑简单,同样无需赘述。
值得注意的有两点:
1、 一般情况下Python中变量是不需要提前声明或者定义的,但也有例外,比如现在的累加求和求和使用+=时,需要先定义一个数值变量并赋值为0,亦或者往列表里添加元素时,必须列表里有元素,否则也得先定义一个空列表
2、Python的强制转换操作
Python的数据类型的转换是比较多的,我们就先以上述代码遇到的三种转换操作讲一下,以后遇到了新的情况再接着讲,如果要把所有的类型都讲一下的话估计得重开一个章节了。
顺着代码的逻辑,第一次数据类型转换是出现在input()输入时对得到的字符串进行int()操作,得到一个整数类型。这里其实有一点点的小问题,int()操作是一个取整的操作,如果被转换的是浮点数类型4.9,int()以后得到的是4,而如果被转换的是一个字符串‘4.9’,首先要将其转换成浮点型,再转整型,或因此大多数情况下对input()输入得到字符串后的操作都是eval()操作,这样就可以保持字符串引号下最原始的状态。
第二次是在for循环中,数值类型是一个不可迭代对象,所以为了把数值的每个数字拿出来,又对该数值进行了一次str()操作,将数值转换为字符串类型。
第三次是将拿出来的每个数字,其实是从字符串中拿出来的,因此此时还是字符串类型,所以不能直接进行求和操作,我们在这里并没有使用题目中int()转数值的方法,而是直接用了eval()函数,原因上面讲过,更多的也是一种个人习惯。
之间博客的总结中我们讲过eval()函数的具体用法,这里不多做解释,感兴趣的小伙伴可以点击链接,自行阅读。

代码如下(示例):

# int转整型操作
a = 4.9
b = '4.9'
print('浮点数转整型:',int(a),type(int(a)))
print('字符串转整型:',int(float(b)),type(int(float(b))))       # 必须先转浮点型,再转整型

# 转字符串操作
print('数值型转字符串:',str(a),type(str(a)))

# eval操作
print('eval操作字符串转数值:',eval(b),type(eval(b)))

示例输出:

浮点数转整型: 4 <class ‘int’>
字符串转整型: 4 <class ‘int’>
数值型转字符串: 4.9 <class ‘str’>
eval操作字符串转数值: 4.9 <class ‘float’>

  • 31
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值