[Python入门到精通系列]-学会了Python的基础语法后,能做什么?

Posted 训练营资料福利官

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python入门到精通系列]-学会了Python的基础语法后,能做什么?相关的知识,希望对你有一定的参考价值。

学会了Python的基础语法后,能做什么?

学了前面Python的基础语法,我们能做什么呢?在本次文章中我给大家演示一些基础语法的使用,加深大家对Python基础语法的了解。

根据输入的字符进行统计

下面这段程序,用到了变量、字符串、for循环、if条件控制来实现,根据用户输入的字符统计这段字符中数字、字符、空格的数量。

# coding=utf-8s=input('请输入一段字符:\\n')# 定义Number类型的变量chars=0space=0digit=0others=0# for循环遍历输入的字符串for c in s:    if c.isalpha(): #判断是字符串类型        chars+=1    elif c.isspace(): #判断是空格        space+=1    elif c.isdigit(): #判断是数字类型        digit+=1    else: #其他类型        others+=1# 分别打印不同类型的数据print('chars=%d,space=%d,digit=%d,others=%d' %(chars,space,digit,others))

其中 input是用来接受用户输入信息的函数,括号中的请输入一段字符表示输入提示信息。

其中在上面这段代码中,用到了字符串的很多方法,其实字符串有很多常规方法

str="PYTHON"print(str.isalnum()) # 判断所有字符都是数字或者字母print(str.isalpha()) # 判断所有字符都是字母print(str.isdigit()) # 判断所有字符都是数字print(str.islower()) # 判断所有字符都是小写print(str.isupper()) # 判断所有字符都是大写print(str.istitle()) # 判断所有单词都是首字母大写,像标题print(str.isspace()) # 判断所有字符都是空白字符、\\t、\\n、\\r

除此之外,字符串还有大小写转换相关的方法

str="pyThon"print(str.upper())          # 把所有字符中的小写字母转换成大写字母print(str.lower())          # 把所有字符中的大写字母转换成小写字母print(str.capitalize())     # 把第一个字母转化为大写字母,其余小写print(str.title())          # 把每个单词的第一个字母转化为大写,其余小写

判断输入的数字是否是质数

如果我们需要实现判断用户输入的一个数字是否是质数,这段程序应该怎么实现呢?

质数是指能够被1和它本身整除的数字

代码实现思路比较简单,只要当前输入的数字能够被除了1和自己本身以外的数字整除,就表示不是质数,实现代码如下。

# coding=utf-8# 无限循环执行下面的代码,while(True):    num=int(input('请输入一个数字:')) #接收用户的输入    if num>1: #如果输入的数字大于1,则执行下面的代码        for i in range(2,num): # 遍历2到输入的数字区间            if(num%i)==0: #只要输入的数字num,能够被这个区间内有任何数字整除,说明不是质数                print(num,"不是质数")                break #只要不是质数,则退出循环        else:  # 否则表示是质数            print(num,"是质数")    else: #如果输入的数字小于等于1,则执行这个逻辑        print(num,"不是质数")

上述代码都是使用了前面学习过的基础知识。

•while循环

•if 条件判断

•for 循环

•range()内置函数

其中range()内置函数要解释一下,range()函数返回的是一个可迭代对象,它的语法定义如下

range(stop)range(start,stop[,step])

参数说明如下:

•start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);

•stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5

•step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

for i in range(5):    print(i)

得到结果如下

01234

带有步长的案例

for i in range(0,10,2):    print(i)

得到的结果如下

02468

上述案例中,range(2,num),表示区间为2到输入的数字num这个区间。

基于range,我们还可以用来实现打印99乘法表,代码实现如下。

# 使用嵌套循环实现99乘法表。for i in range(1, 10):  #循环1到10    for j in range(1, i+1): # 循环区间是1,到i+1,i是第一层循环的值,随着第一层循环的执行,i的值也在增加。        print('x=\\t'.format(j, i, i*j), end='') #打印结果    print()

打印结果如下

1x1=1    1x2=2    2x2=4    1x3=3    2x3=6    3x3=9    1x4=4    2x4=8    3x4=12    4x4=16    1x5=5    2x5=10    3x5=15    4x5=20    5x5=25    1x6=6    2x6=12    3x6=18    4x6=24    5x6=30    6x6=36    1x7=7    2x7=14    3x7=21    4x7=28    5x7=35    6x7=42    7x7=49    1x8=8    2x8=16    3x8=24    4x8=32    5x8=40    6x8=48    7x8=56    8x8=64    1x9=9    2x9=18    3x9=27    4x9=36    5x9=45    6x9=54    7x9=63    8x9=72    9x9=81    

Python实现简易计算器

简易计算器主要用到函数定义,函数调用、以及if条件判断,完成一个简易的demo实现。

# coding=utf-8# 定义函数def add(x, y):    "doc_相加"    return x + ydef subtract(x, y):    "doc_相减"    return x - ydef multiply(x, y):    "doc_相乘"    return x * ydef divide(x, y):    "doc_相除"    return x / y# 用户输入print("选择运算:")print("1.相加")print("2.相减")print("3.相乘")print("4.相除")choice = input("输入你的选择(1/2/3/4):")num1 = int(input("输入第一个数字: "))num2 = int(input("输入第二个数字: "))if choice == '1':    print(num1, "+", num2, "=", add(num1, num2))elif choice == '2':    print(num1, "-", num2, "=", subtract(num1, num2))elif choice == '3':    print(num1, "*", num2, "=", multiply(num1, num2))elif choice == '4':    print(num1, "/", num2, "=", divide(num1, num2))else:    print("非法输入")

执行结果如下

输入你的选择(1/2/3/4):2输入第一个数字: 1输入第二个数字: 21 - 2 = -1

List数组的增删改查

list数组在前文有详细分析过,为了加深对list数组的了解,我们针对一个list数组实现数据元素的增删改查,代码如下。

# coding=utf-8li=['Java','Python','javascript','Rust','Lua','C++']def add(ele):    li.append(ele)    print('增加元素之后',li)def remove(ele):    li.remove(ele)    print('删除元素之后',li)def update(oldele,newele):    idx=0    i=0    for l in li:        i=i+1        if(l==newele): #判断元素所在的索引位置            idx=i            break    li.remove(oldele)    li.insert(idx,newele)    print('执行元素修改之后',li)print('开始执行添加方法')add('.Net')print('开始执行修改方法')update('Java','Docker')print('开始执行删除方法')remove('Python')print('删除一个不存在的元素')remove('Test')

上述代码实现均采用前面已经讲解过的一些Python基础语法

•定义了三个函数,分别是updateremoveadd实现对数组的修改、删除、新增•update方法的实现稍微复杂一些,需要定位老元素所在的索引位置,然后再把老的元素删除,并在索引位置插入一个新的值,当然这里只是为了使用到一些语法而这么写,其实还可以这么优化

  def update(oldele,newele):      idx=li.index(oldele) #获取老的元素所在的索引位置      li.remove(oldele) #移除老的元素      li.insert(idx,newele) #在老的索引位置插入一个新的元素      print('执行元素修改之后',li)

•最后,我们调用remove(‘Test’)移除一个不存在的元素。

上述代码运行结果如下

开始执行添加方法增加元素之后 ['Java', 'Python', 'JavaScript', 'Rust', 'Lua', 'C++', '.Net']开始执行修改方法执行元素修改之后 ['Docker', 'Python', 'JavaScript', 'Rust', 'Lua', 'C++', '.Net']开始执行删除方法删除元素之后 ['Docker', 'JavaScript', 'Rust', 'Lua', 'C++', '.Net']删除一个不存在的元素Traceback (most recent call last):  File "/Users/mic/PycharmProjects/pythonProject/test11.py", line 35, in <module>    remove('Test')  File "/Users/mic/PycharmProjects/pythonProject/test11.py", line 10, in remove    li.remove(ele)ValueError: list.remove(x): x not in list

最后当我们执行remove移除一个不存在的元素时,会提示报错。这个是Python中的异常机制。异常信息是表示程序执行过程中出现的一些错误,比如在上述异常中,它提示了在test11.py这个文件的第10行,li.remove(ele)这个代码中,出现一个ValueError的异常,这个异常是说:x not in list,表示list数组中不存在该元素。

Python中的异常机制

代码编写完成后在运行时,可能会出现一些意料之外的异常,比如上面我们演示的一个例子中的异常。这些异常信息非常重要,它可以很好的提示代码在哪一个位置出现了什么样的异常,让开发者能够快速定位到问题并解决。

在Python有两种类型的异常

•语法错误•程序运行时异常

语法错误

所谓语法错误,就是指编写的代码不符合Python的语法规定而提示的错误,比如下面这段代码

print 111

很明显是不符合语法规定的,正确的写法是print(111),当我们执行这段代码时,或得到下面这个错误提示

  File "/Users/mic/PycharmProjects/pythonProject/test12.py", line 2    print 111          ^SyntaxError: Missing parentheses in call to 'print'. Did you mean print(111)?

提示类型为:SyntaxError,并且清晰的说明了问题以及可能修复的方法。

一般情况下,当我们对语法掌握非常熟练后,这类的问题一般不会出现。特别是我们使用比较成熟的开发工具比如PyCharm时,如果出现语法错误都会及时提示。

异常

即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常,比如下面这段代码,语法是正常的。

print (1/0)

但是在执行的时候,会得到以下错误信息

Traceback (most recent call last):  File "/Users/mic/PycharmProjects/pythonProject/test12.py", line 2, in <module>    print (1/0)ZeroDivisionError: division by zero

从错误信息中可以看到,除数不能为0。

异常信息,不管是新手还是老手都会遇到,毕竟如果代码量足够多的情况下,无法避免会有一些地方考虑不到从而出现异常。因此程序编写完成后,都需要经过反复的测试来验证程序执行的准确性。

异常处理

在程序编写中,我们必然会遇到一些可以预判到的异常,为了防止这些异常导致程序崩溃,我们可以提前使用异常处理方法来捕获这些异常。

在python中提供了try - except 的语句来处理异常信息。

try:  「正常执行的代码」except 匹配的异常类型 可选项:  「当`try`语句块中的代码出现异常时,会被执行的代码」

举个实际例子,在前面我们演示的Python案例中,都有涉及到用户输入数字进行处理的情况。

实际上,我们只能假设用户输入的是数字,如果用户输入的不是数字呢? 这种情况是我们可以预判并且进行提前规避处理的异常,所以我们可以这么实现

while True:    try:        x = int(input("请输入一个数字: "))        break    except ValueError:        print("您输入的不是数字,请再次尝试输入!")

执行结果如下

请输入一个数字: asf您输入的不是数字,请再次尝试输入!请输入一个数字: 234

try语句的工作方式如下:

•首先,执行 try语句块(在关键字 try 和关键字 except 之间的语句)。•如果没有异常发生,忽略 except 子句,try 语句块代码执行后结束。•如果在执行 try 语句块的过程中发生了异常,那么 try 语句块余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 子句将被执行。•如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中(表示try嵌套的情况)。

上述try语句块的工作方式,可能的代码实现如下:

while True:    try:        x = int(input("请输入一个数字: "))        y = int(input('请另外一个数字:'))        try: #嵌套的try语句块            print(x/y)        except ZeroDivisionError: #对应匹配的异常信息,如果没有匹配,则会把异常传递给外层的try            print('除数为0异常')        break    except ValueError:        print("您输入的不是数字,请再次尝试输入!")    except:        print('其他错误类型')

try/except…else

try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。

它的功能和前文提到的while、for等else语句相同,这里的else 子句会在 try 子句没有发生任何异常的时候执行。

try-finally 语句

try-finally 语句无论是否发生异常都将执行最后的代码,执行流程如下。

使用方法如下

try:    #todo-正常执行的代码块except AssertionError as error:    print(error)else: # 如果没有异常时执行代码    try:        #todo-嵌套的try语句块    except ValueError as fnf_error:        print(fnf_error)finally:    print('这句话,无论异常是否发生都会执行。')

抛出异常

Python 使用 raise 语句抛出一个指定的异常。

raise语法格式如下:

raise [Exception [, args [, traceback]]]

以下实例如果 x 大于 5 就触发异常:

x = 10if x > 5:    raise Exception('x 不能大于 5。x 的值为: '.format(x))

raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出,案例实现如下

try:    raise ValueError("数字格式异常")  #主动抛出一个异常except: #捕获到try语句块抛出的异常    print('捕获到异常')    raise  #直接把异常再次抛出

运行结果如下

捕获到异常Traceback (most recent call last):  File "/Users/mic/PycharmProjects/pythonProject/test12.py", line 3, in <module>    raise ValueError("数字格式异常")ValueError: 数字格式异常

异常的基本使用就介绍到这里,在后续的内容中,还会涉及到异常的其他用法,比如自定义异常,到需要的时候我们再做分析。

以上是关于[Python入门到精通系列]-学会了Python的基础语法后,能做什么?的主要内容,如果未能解决你的问题,请参考以下文章

[Python入门到精通系列]-学会了Python的基础语法后,能做什么?

Python从入门到精通— 初识Python

Python从入门到精通— 初识Python

Python从入门到精通— 初识Python

Python从入门到精通— 初识Python

600集Python从入门到精通教程(懂中文就能学会)