学会了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+=1elif c.isspace(): #判断是空格space+=1elif c.isdigit(): #判断是数字类型digit+=1else: #其他类型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到10for j in range(1, i+1): # 循环区间是1,到i+1,i是第一层循环的值,随着第一层循环的执行,i的值也在增加。print('{}x{}={}\t'.format(j, i, i*j), end='') #打印结果print()
打印结果如下
1x1=11x2=2 2x2=41x3=3 2x3=6 3x3=91x4=4 2x4=8 3x4=12 4x4=161x5=5 2x5=10 3x5=15 4x5=20 5x5=251x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=361x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=491x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=641x9=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=0i=0for l in li:i=i+1if(l==newele): #判断元素所在的索引位置idx=ibreakli.remove(oldele)li.insert(idx,newele)print('执行元素修改之后',li)print('开始执行添加方法')add('.Net')print('开始执行修改方法')update('Java','Docker')print('开始执行删除方法')remove('Python')print('删除一个不存在的元素')remove('Test')
上述代码实现均采用前面已经讲解过的一些Python基础语法
•定义了三个函数,分别是update、remove、add实现对数组的修改、删除、新增•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 removeli.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 2print 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("请输入一个数字: "))breakexcept 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: #对应匹配的异常信息,如果没有匹配,则会把异常传递给外层的tryprint('除数为0异常')breakexcept 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基础语法的应用,包括统计字符、数字和空格,判断质数,实现简易计算器,以及异常处理机制如try/except。通过实例代码展示了Python在数据处理和条件判断上的基本操作,同时讲解了如何处理用户输入错误和运行时可能出现的异常,帮助读者巩固Python基础知识。
4659

被折叠的 条评论
为什么被折叠?



