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’>