点击蓝字
关注我们
本节解决上节留下的2道练习题
输出所有的水仙花数,所谓“水仙花数”是指一个三位的正整数,它的各位数字的立方和等于该数本身。例如153=1**3+5**3+3**3
按照题意,三位的正整数的范围是[100,999],用range()函数生成此区间的时候需写成range(100,1000),接下来需要将个位、十位和百位上面的数字分别分割出来,再用立方和的表达式判断此数是否为水仙花数。
for i in range(100,1000):ge=i%10 #个位bai=i//100 #百位shi=(i-bai*100)//10 #十位if i==ge**3+shi**3+bai**3:print(i,'是水仙花数')
153 是水仙花数
370 是水仙花数
371 是水仙花数
407 是水仙花数
个位上的数用该三位数对10求余进行求解,百位上的数用该数对100整除求解,而十位上的数,先减去百位乘100,这样就把三位变成两位,再对10进行整除。
如果觉得这种方法需要花时间去探索的话,还有一种更加直白的求法,就是用str()函数将这个三位数转换成一个字符串,用字符串切片的方法分别将百位、十位和个位上的数字切割出来,再用eval()函数转换成数值类型。
这种方法是有一次在带队参加比赛的时候,学生想出来的,在比赛中,好像没有扣分。在此之后,凡是碰到需要将某个整数进行切割的题目,都想到了这种方法。
for i in range(100,1000):bai=eval(str(i)[0])shi=eval(str(i)[1])ge=eval(str(i)[-1])if i==bai**3+shi**3+ge**3:print(i,'是水仙花数')
从键盘输入一个字符串,统计该字符串大写字母、小写字母、空格、数字及其它字符的个数。
字符串在python中是可迭代对象,可以用for...in... 的形式获取字符串中的每一个字符,再分别用isupper()、islower()、isspace()和isnumeric()来判断该字符是否为大写字母、小写字母、空格与数字。
s=input('请输入一个字符串:')upper,lower,space,number,other=0,0,0,0,0for i in s:if i.isupper():upper+=1 #大写elif i.islower():lower+=1 #小写elif i.isspace():space+=1 #空格elif i.isnumeric():number+=1 #数字else:other+=1 #其它字符print('大写字母'+str(upper)+'个')print('小写字母'+str(lower)+'个')print('空格'+str(space)+'个')print('数字'+str(number)+'个')print('其它字符'+str(other)+'个')
在for循环中嵌入双分支选择结构或多分支选择结构是一种常见的编程结构,需要多加练习;
代码用到了字符串几种常用的方法,若能熟练使用这些方法可以提高处理字符串的效率;
在print()函数中既有数值型又有字符串时,可像上题那样用逗号隔开,也可以像本题用加号连接,但连接前需用str()函数将数值转换成字符串。




