python简单项目实现第2弹(九九乘法表/水仙花数及其延申应用)

你好,欢迎查看我的第二个笔记。本人是某不知名大学数学系大一新生,由于对计算机感兴趣,所以跟着B站上老师学习python语言。每道题目我都尽我所能地讲清楚,如果有什么看不懂的地方欢迎在评论区留言,大家一起学习共同进步。

本篇文章包括以下3个项目

项目4:打印九九乘法表

项目5:打印水仙花数

项目6:倒序输出用户输入的4位数


项目4:打印乘法口诀表如图

     

由上图我们可以总结出如下特点(以a*b=c为例)

  1. a代表行数,a是几就代表这是第几行;b代表列数,b是几就代表这是第几列。
  2. a永远大于等于b

基于以上两点结论,我们得到下列两种实现方法(两者实现思路类似)

方法1:

直接应用上述结论:用外层循环表示行,内层循环表示列,遍历所有的行列,当行大于列时print出来。

for i in range(1,10):#用i遍历行索引(范围:1~9)
    for j in range(1,10):#用j遍历列索引(范围:1~9)
        if i>=j:#如果行索引大于列索引
            print(f"{i}*{j}={i*j}\t",end=" ")# \t表示规整化  ,end=" "表示左右相邻两等式间不换行
    print()#行与行之间换行

代码注释写的比较详细了,这里就简单地阐述一下“索引”这个概念。索引(index)表示该元素位于(矩阵中)第几行第几列,与行相关的叫行索引,与列相关的叫列索引。举个例子,如上面九九乘法表中 4*3=12  这个元素位于乘法表的第4行第3列,故其行索引为4,列索引为3。

方法2:

间接利用上述2个特点:用外层循环表示行,内层循环表示列,遍历所有的行和满足条件(a>=b)的列,再print出来。

for i in range(1,10):#用i遍历行索引(范围:1~9)
    for j in range(1,i+1):#用j遍历列索引(范围:1~i),这样做以后天然地保证i>=j恒成立
          print(f"{i}*{j}={i*j}\t",end=" ")# \t表示规整化  ,end=" "表示左右相邻两等式间不换行
    print()#行与行之间换行

索引概念的说明在方法1中有讲到,这里不再赘述。

项目5:打印出所有的水仙花数

“水仙花数”是指一个三位数,其各位数字的立方和恰好等于该数本身

思路1:

每个3位数的百位取值1~9  十位取值0~9  个位取值0~9

用3层for循环表示三个位置的数,满足条件就打印下来。

for i in range(1,10):
    for j in range(0,10):
        for k in range(0, 10):
            n=i*100+j*10+k*1
            if n==i**3+j**3+k**3:
                print(n)

                

思路2:

毋庸置疑,该题的关键在于获取3位数各个位置上的数字。这里我们提出一种获取方法

以567为例

个位数:567对10求余,程序语言: 567%10

十位数:567先对100求余得到67,再对10做整除,程序语言:567%100//10

百位数:567对100做整除,程序语言:567//100

于是我们总结出三位数求各个位置数字的方法(一般情况):

a是个三位数,它的

  • 个位数:a%10
  • 十位数:(a%100)//10
  • 百位数:a//100

我们可以得出一个普适的规律:%符号代表求”右边“的数,//符号代表求左边的数;

以1024为例:  

我们用 1024%100//10 来取出十位数(也就是2)

其中%100是因为“2”在百位的右边,%10因为“2”在十位的左边

于是,我们自然写出python程序

for i in range(100,1000):# i的取值100~999
    a=i%10#个位数
    b=i%100//10#十位数
    c=i//100#百位数
    if i==a**3+b**3+c**3:
        print(i)

项目6:倒序输出用户输入的4位数

例如   input:1024      output:4201

思路:

该题本质上是项目5求水仙花数的简单延申应用,思路同项目5思路2,这里不再描述

x=int(input("x="))
a=x%10
b=x%100//10
c=x%1000//100
d=x//1000
y=a*1000+b*100+c*10+d*1
print(y)

      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值