百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

使用python实现九九乘法口诀表,使用这个语法,只需一行代码

off999 2024-11-04 13:13 38 浏览 0 评论

有一次去面试,被问到了九九乘法口诀用代码如何实现 ?虽然当时已经做了出来,但是后来才知道,其实有更简单的方法,只需一行代码就可以实现 。

那么我们先来看下普通的实现方式,就是做个嵌套循环,然后打印两个数的乘积信息 。

for i in range(1,10):
    for j in range(i,10):
        print("{}×{}={}".format(i,j,j*i),end=" ")
    print(" ")

运行结果:

1×1=1 1×2=2 1×3=3 1×4=4 1×5=5 1×6=6 1×7=7 1×8=8 1×9=9  
2×2=4 2×3=6 2×4=8 2×5=10 2×6=12 2×7=14 2×8=16 2×9=18  
3×3=9 3×4=12 3×5=15 3×6=18 3×7=21 3×8=24 3×9=27  
4×4=16 4×5=20 4×6=24 4×7=28 4×8=32 4×9=36  
5×5=25 5×6=30 5×7=35 5×8=40 5×9=45  
6×6=36 6×7=42 6×8=48 6×9=54  
7×7=49 7×8=56 7×9=63  
8×8=64 8×9=72  
9×9=81 

直到遇到了python的这个语法,才知道很多代码可以写的更加简洁,这个语法就是使用python的列表推导式。它可以将一个序列构建成另外一个新列表的结构体 。

语法格式如下:

[ expB for x in iterable expA ]

该表达式主要由三部分组成,分别是中间的循环体,循环体后的表达式A,循环体前的对x运算的表达式B。

  • for x in iterable : 循环的是一个序列,包括字典,元组,字符串以及range()方法等。此循环体是最先被执行的。
  • expA:主要是由if语句或for语句构成,如果是if语句,一般是将x进行条件筛选,符合条件的传递给expB参与运算,如果是for循环,那就是双层嵌套循环,这里需要注意的是,后面的for循环是内层循环体 。当然该表达式也可以省略 。
  • expB:主要是对for循环中的x进行的最后的运算,可以是+,-,*,%,|,条件判断以及各种方法等 。

比如,我们要实现这样一个功能,1~5内的数,遇到双数+1,遇到单数-1,返回一个新列表,通过列表推导式就可以这样写

print([x+1 if x % 2 ==0 else x-1 for x in range(1,6)])
#输出 : [0, 3, 2, 5, 4]

以上if条件为真,返回if前面的值,否则返回else后面的值。

知道以上这个原理后,我们就拿这个语法来实现下九九乘法口诀。首先我们知道它是两层嵌套循环 。所以,后面的部分就很好实现,具体如下:

for i in range(1,10) for j in range(i,10)

以上这句话的代码就等同于如下代码,写了个嵌套循环,但是循环内没有实际内容。

for i in range(1,10):
    for j in range(i,10):
        pass

接下来就是最关键的打印乘法口诀乘积的信息,我们这里先做个分析 ,在打印口诀的信息中,其实有这么两种情况:

  1. 如果j<9的话,打印两个数的乘积,再加个空格。print("{}×{}={}".format(i,j,j*i),end=" ") if j<9 ,说明:end=“ ”代表空格,如果没有这个参数,默认为回车换行 。
  2. 如果j=9的话,打印两个数的乘积,再加回车换行。else print("{}×{}={}".format(i,j,j*i))

把以上两种情况连接起来就是以下一句完整的代码,具体如下:

 [ print("{}×{}={}".format(i,j,j*i),end=" ") if j<9 else print("{}×{}={}".format(i,j,j*i)) for i in range(1,10) for j in range(i,10)]

通过运行以上这行代码,也可以实现上面的打印效果 。

同理,这个语法其实不仅仅是只能实现以上需求,只要是循环的相关处理,其实都可以考虑使用它来进行实现 。

相关推荐

阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?

TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...

高流量大并发Linux TCP性能调优_linux 高并发网络编程

其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...

性能测试100集(12)性能指标资源使用率

在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...

Linux 服务器常见的性能调优_linux高性能服务端编程

一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...

Nginx性能优化实战:手把手教你提升10倍性能!

关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...

高并发场景下,Spring Cloud Gateway如何抗住百万QPS?

关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...

Kubernetes 高并发处理实战(可落地案例 + 源码)

目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...

高并发场景下,Nginx如何扛住千万级请求?

Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...

Spring Boot+Vue全栈开发实战,中文版高清PDF资源

SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...

Docker-基础操作_docker基础实战教程二

一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...

你有空吗?跟我一起搭个服务器好不好?

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...

部署你自己的 SaaS_saas如何部署

部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...

Docker Compose_dockercompose安装

DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...

京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统

前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...

Kubernetes (k8s) 入门学习指南_k8s kubeproxy

Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...

取消回复欢迎 发表评论: