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写出完完整整,没有漏洞的代码,这就是需要练习的

相关文章
|
3天前
|
Python
Python 练习实例26
Python 练习实例26
|
3天前
|
Python
Python 练习实例25
Python 练习实例25
|
1天前
|
数据采集 前端开发 Java
Python简单爬虫案例
用pyhton从网页中爬取数据,是比较常用的爬虫方式。网页一般由html编写,里面包含大量的标签,我们所需的内容都包含在这些标签之中,除了对python的基础语法有了解之外,还要对html的结构以及标签选择有简单的认知,下面就用爬取fl小说网的案例带大家进入爬虫的世界。
|
23小时前
|
Python
Python 练习实例33
Python 练习实例33
|
1天前
|
Python
Python 练习实例30
Python 练习实例30
|
1天前
|
Python
Python 练习实例29
Python 练习实例29
|
2天前
|
数据采集 前端开发 Java
Python简单爬虫案例
用pyhton从网页中爬取数据,是比较常用的爬虫方式。网页一般由html编写,里面包含大量的标签,我们所需的内容都包含在这些标签之中,除了对python的基础语法有了解之外,还要对html的结构以及标签选择有简单的认知,下面就用爬取fl小说网的案例带大家进入爬虫的世界。
|
2天前
|
设计模式 程序员 测试技术
老程序员分享:Python数据模型及Pythonic编程
老程序员分享:Python数据模型及Pythonic编程
13 1
|
3天前
|
Python
Python 练习实例27
Python 练习实例27
|
3天前
|
Python
Python 练习实例24
Python 练习实例24