Python 入门必备-编程逻辑判断及案例练习|学习笔记

简介: 快速学习 Python 入门必备-编程逻辑判断及案例练习

开发者学堂课程Python 开发基础入门Python 入门必备-编程逻辑判断及案例练习】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/556/detail/7651


Python 入门必备-编程逻辑判断及案例练习


目录:

一、练习题

二、解决习题一

三、解决习题二


一、练习题

Ø输入2个数字,输出最大数

Ø给定一个不超过5位数的正整数,判断其几位

 

二、解决习题一

先来看第一题,题目说输入两个数字,然后输出最大的数。

现阶段只允许用if判断语句来完成以上事情,当然也可以用函数,比如说max函数判断谁最大。但max函数是以后才能用的。必须懂得原理之后再用它,如果已经懂得原理,那么就不限制使用手段了。

输入两个数应该怎么做呢?

首先输入数字现阶段只能用input这个函数。但input函数获得的数字都会被认为是字符串,返回一个字符串回来,在拿到字符串之后该怎么用呢?

需要把字符串赋值到一个变量里面去,然后变量也是字符串,但现在需要比较是数字的大小。这就是需要思考的问题。

比较两个数字的大小,在之前的案例中已经做过了。两个值要进行大小比较。它们一般来讲,必须要求类型相同。那么接收两个数字就都可以通过下面的代码来接收。

a = input (input a number:)

b = input (input a number:)

着两个a、b都应该比较清楚都是string类型的,都是字符型。那么直接进行a、b的大小比较是没有问题的。

if a > b

那么直接进行大小比较是好还是不好,字符串是可以直接比较大小的,但就比如字符串0、1的比较的结果不一定是想要的。

所以数字的比较和字符串的比较是不一样的。现明确必须要有数字的方式。在一个说是数字但还没有说是整型。比如说拿字符串-1和1比较,或者字符串1和1.5进行比较。结果都未必是想要的。

所以比较时必须转化为数字,可以这样做。

if int(a) > int(b):

pass

pass语句为空语句,可以理解为就从这里通过的意思,就是一个占位语句,它什么都不做是一个空操作的占位语句仅此而已。

如果没有pass语句将会执行错误,因为冒号后不能为空必须要有语句块。为什么只是写了pass呢,因为内容现在什么都没有,先搭出框架。

if int(a) > int(b):

pass

elif int(a)

发现这段中的int反复出现,就可以这样改写。后续a、b就可以反复使用了。

a = int(a)

b = int(b)

if a >b:

pass

elif aint(a)

int不会直接去修改a,int(a)是会把字符串转化为新的值,但需要赋值给新的变量,是a = int(a),原来的a就已经被改变了。从一个字符串变为了一个数字。还可以这样写:

a = int(input(input a number:))

input内部的为字符串被int拿到后转化为整型,但是有可能失败,如果输入的是1.5,可能成功也可能失败,因为可能是截取1,但也有可能失败。

现假设输入的都是合法的整数,用以上方法先把字符串转化为整数,得到整数之后就可以进行比较了。

下面进行判断谁大谁小把谁输出的问题。

看同学们写的示例:

a = input(>>>)

b = input(>>>)

//获取a和b。

a = int(a)

b = int(b)

//在转化一下。这样写是没什么问题的,熟悉之后就可以写到一起去。现阶段先不关心输入是错误的,因为验证是一件非常繁琐的事情。现在练习的是中间的逻辑部分。

if a > b://丢了等于的判断。

print(a)

esle:

print(b)

//例如a>b走的a,那a=b呢?就该有else去了。

这里需要注意边界的问题,也就是>=问题,大于小于但还需要注意等于。所以每次写完都应该检查一下,避免漏掉了边界。

a = input(>>>)

b = input(>>>)

a = int(a)

b = int(b)

if a >= b:

print(a)

esle:

print(b)

两种写法都没有错,提醒的是在使用if时每一个边界都需要检查,避免漏掉边界。

下一步需要把a、b比较大小,可以用max内置函数,然后再打印出来。

print (max(a,b))

max函数的好处在于已经把中间逻辑已经写好了。现重点在于练习使用if else的严格逻辑。

现在思考如果比较三个数的大小,进行排序谁最大谁最小,用if esle来实现。不允许使用max函数,就是练习if else的使用。

练习逻辑,确保if else 各个分支没有漏洞。熟悉之后再使用技巧,比如使用内置的其他函数。

Ø给定一个不超过5位数的正整数,判断其几位

 

三、解决习题二

第二题要求稍微复杂了一点,限定5位的正整数,判断是几位数。可以有几个思路可以实现。

看同学的相关示例1:

a=6666

if a<10://小于10为个位。

print(1)

elif 9<100://大于9是可以不用了写的,前面的小于10已经卡住了条件。如果已经大于10就已经隐含大于9的条件了。

print(2)

elif 99

print(3)

elif 999

print(4)

elif 9999

print(5)

这里的大于9其实已经隐含已经测试过了。改为:

elif a<100:

其余分支修改类似于此:

elif a<1000:

elif a<10000:

elif a<100000:

多写的判断会显得很啰嗦。

看同学的相关示例2:

1 = int(input(input a number:))

if i // 10000 ://给一个数字依次向下除。除以10000都小于0,就是小于5位数的。

print  (5)

else i // 1000 :

print  (4)

else i // 100 :

print  (3)

else i // 10 :

print  (2)

else :

print  (1)

这里用的反向除法的处理方法,逻辑是行得通的,但不但要比较是不是0,还得先做一次除法运算,本身除法运算就不快。

这是引入的一些不该用的计算,本是可以直接进行比较的,但进行了多余的除法计算。能加就不要减,能乘就不要除。除法还会出现其他问题。能不计算就不计算,能比较就不要算。算是要消耗CPU资源的。

看同学的相关示例3:

a = input (>>>)

a = int(a)//给一个数然后转化为数字。

if a < 0:

print (输入的格式不对,请输入一个不超过5位的数)

elif a < 100000://做了验证判断。

if a < 10:

print(是一个1位数)

elif a < 100:

print(是一个2位数)

elif a < 1000:

print(是一个3位数)

elif a < 10000:

print(是一个4位数)

else:

print(是一个5位数)

else:

print(请输入一个不超过5位的数)

考虑得比较周全,做了一些输入条件验证,但还是不完整,验证判断实际会很复杂,中间的分支逻辑和案例2比较相似。

看同学的相关示例4:

number = int (input(number))//加入输入正确就转化为数字。

if number >= 100://>=写法更顺应思考逻辑,但没有好坏之分。从100折半判断。大于100后判断三位数还是4,5位数。

if number >= 10000:

print(5)

elif number >= 1000:

print(4)

else:

print(3)

else://用到了折半。

if number >= 10://小于100判断是两位数还是一位数。

print(2)

else:

print(1)

//这里给了5位数的判断,其实就可以思考10位数,20位数,30位数等的判断了。

也用到了折半的思想,这里用到折半是很不错的。

看同学的相关示例5:

newnumber = input(number???)

length = len (newnumber)

if length >= 3://这里应用了两个很好的东西。用到了字符串处理的方式。如果是字符串其实就可以对字符串的长度直接做判断。字符串最小输入为0。

if length > 4:

print(5)

elif length > 3:

print(4)

else:

print(3)

else://这里的判断做了对半处理。

if length == 2:

print(2)

else:

print(1)

这是用的字符串的处理方法,处理完数字之后已经知道字符串的长度,就没必要折中再进行比较,显得多此一举。

看同学的相关示例6:

a = int(input(请输入一个不超过5位的正整数:))

if a <= 0 or a>=100000:

print(请输入一个不超过5位的正整数:)

else ://这里进行了计算,且每次都要计算。取对数算肯定是不会快的,哪怕不用折半用if判断都比这快。最简单的方法往往是效率最高的。

import math

b = int(math.log10(a)+1)

print(b)

这里使用了math模块,用了取对数的方式,但计算速度比除法还慢,执行效率较低。可以思考这么去实现,但并不推荐。

练习参考答案:

val = input(>>>)

val = int(val)

if val >= 1000: #fold

if val >= 10000:

print(5)

else:

print(4)

else:

if val >= 100:

print(3)

elif val >= 10;

print(2)

else:

print(1)

做开发千万不要被限制住思维,要解放自己的思想,想到的更多再选择自己认为最后的方式,但自己认为的最优,也不一定是最好的。重要的是第一个版本有没有写出来,有没有写对。

如果没写出来,就要多加练习。现在练习的是思维严谨性。用if写出完完整整,没有漏洞的代码,这就是需要练习的

相关文章
|
2月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
330 7
|
2月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
184 3
|
2月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
446 3
|
2月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
2月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
2月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
274 3
|
2月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
518 1
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
274 0
|
存储 Linux 索引
python基础学习笔记
服务器 1.ftp服务器         FTP是FileTransferProtocol(文件传输协议)的英文简称,中文名称为“文传协议”。
1758 0
|
数据安全/隐私保护 Python

推荐镜像

更多