# 第28期-丑数

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 1 问题描述

把只包含质因子2,3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但7、14不是,因为它们包含质因子7。 习惯上我们把1当做是第一个丑数。 要求:输入一个数,判断是否是丑数 或者输出某一范围内的所有丑数

# 2 解题思路

  • 由于因子只能是2,3,5这三个特殊数字,所以可以把这三个数字做成列表进行判断
  • 遍历小于该数的除了1以外的最小因子,判断其是否在2,3,5之间
  • 若不在内部可以直接输出其不是丑数
  • 若是2,3,5之一,则可以使用剩下的数,再次判断其最小因子,直至数变成2,3,5后,可确定其是丑数,循环

# 3 解题方法

a = [2, 3, 5]

def UglyNumber(m):
    n = m
    while True:
        if n == 1:
            return f'{m}是丑数'
            break
        elif n in a:
            return f'{m}是丑数'
            break
        else:
            b = 0
            for i in a:
                if n % i != 0:
                    b += 1
                else:
                    n /= i
                    continue
            if b == 3:
                return f'{m}不是丑数'
                break


m = int(input('请输入整数:'))
print(UglyNumber(m))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

第1行: 将三个特殊数字2,3,5建立成一个列表
第3行: 创建丑数函数UglyNumber,并输入m作为它的变量
第4行: 使用n来替代m的值,n用于变化,m用于表示原数
第6-11行: 判断n是否为1,2,3,5之间的一个,若是,打印m是完数且结束循环
第12-13行: 若n不是1,2,3,5之间的一个,定义b=0,用处稍后介绍
第14-16行: 使用for循环遍历2,3,5这三个数,判断2,3,5是否是其因数,若不是,b的值加一
第17-19行: 只要2,3,5之间有一个数为n的因数,则替换n为n除以因数之后的值,并使用continue结束本次循环,进行下次循环判断n是否是丑数
第20-22行: 如果b=3,则表示2,3,5之间任何一个数都不是n的因子,则n不是丑数,那么m也不是丑数
第25-26行: 输入一个整数并将其值返回给m,打印其是否是丑数

代码运行结果为:
image.png

# 小思考

那么如果要求输出一万以内的所有丑数,应该如何修改呢?

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM