python学习

异常处理

一些异常处理的说明

一些需要记住的例子

dict1 = {'a': 1, 'b': 2, 'v': 22}
try:
    x = dict1['y']
except LookupError:
    print('查询错误')
except KeyError:
    print('键错误')
else:
    print(x)

 查询错误

try-except-else语句尝试查询不在dict中的键值对,从而引发了异常。这一异常准确地说应属于KeyError,但由于KeyError是LookupError的子类,且将LookupError置于KeyError之前,因此程序优先执行该except代码块。所以,使用多个except代码块时,必须坚持对其规范排序,要从最具针对性的异常到最通用的异常。
如果在try子句执行时没有发生异常,Python将执行else语句后的语句。
else语句的存在必须以except语句的存在为前提,在没有except语句的try语句中使用else语句,会引发语法错误。就是try except else成分不能缺少。
Python 使用raise语句抛出一个指定的异常。

【例子】

try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
    
 An exception flew by!

1、猜数字游戏

题目描述:

电脑产生一个零到100之间的随机数字,然后让用户来猜,如果用户猜的数字比这个数字大,提示太大,否则提示太小,当用户正好猜中电脑会提示,“恭喜你猜到了这个数是…”。在用户每次猜测之前程序会输出用户是第几次猜测,如果用户输入的根本不是一个数字,程序会告诉用户"输入无效"。

(尝试使用try catch异常处理结构对输入情况进行处理)

获取随机数采用random模块。

补充

random模块需要导入,所以使用前要先写入import random。
random函数
其中对于这题我们用到:random.randint
random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b。
(except后面的print里面用单引号)

# coding=gbk
from typing import List
import random
print("there is a numble from 0 to 100 in my heart, you need guess it")
numble = random.randint(0, 100)

try:
    guess=int(input())
except ValueError as error:
    print('输入无效')
a=0
while guess!=numble:
    a+=1
    print("第%d次猜测"%a)
    if guess>100:
        print("invalid numble,please again")
        guess = int(input())
    elif guess<0:
        print("invalid numble,please again")
        guess = int(input())
    else:
        if guess>numble:
            print("no,numble is small")
        else:
            print("no,numble is big")
        guess = int(input())
print("yes",numble)

列表、元组和字符串

一些需要记住的例子

x = [0] * 5
print(x, type(x))
 [0, 0, 0, 0, 0] <class 'list'>

x = [0 for i in range(5)]
print(x, type(x))
 [0, 0, 0, 0, 0] <class 'list'>

x = [i for i in range(10)]
print(x, type(x))
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>

x = [i for i in range(1, 10, 2)]
print(x, type(x))
#[1, 3, 5, 7, 9] <class 'list'>

x = [i for i in range(10, 1, -2)]
print(x, type(x))
 [10, 8, 6, 4, 2] <class 'list'>

x = [i ** 2 for i in range(1, 10)]
print(x, type(x))
 [1, 4, 9, 16, 25, 36, 49, 64, 81] <class 'list'>
 
x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]
print(x, type(x))
 [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99] <class 'list'>
x = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [0, 0, 0]]
print(x, type(x))
 [[1, 2, 3], [4, 5, 6], [7, 8, 9], [0, 0, 0]] <class 'list'>

for i in x:
    print(i, type(i))
 [1, 2, 3] <class 'list'>
 [4, 5, 6] <class 'list'>
 [7, 8, 9] <class 'list'>
 [0, 0, 0] <class 'list'>

x = [[0 for col in range(3)] for row in range(4)]
print(x, type(x))
 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

x[0][0] = 1
print(x, type(x))
 [[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

x = [[0] * 3 for row in range(4)]
print(x, type(x))
 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

x[1][1] = 1
print(x, type(x))
 [[0, 0, 0], [0, 1, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

严格来说 append 是追加,把一个东西整体添加在列表后,而 extend 是扩展,把一个东西里的所有元素添加在列表后。list.append(obj) 在列表末尾添加新的对象,只接受一个参数,参数可以是任何数据类型,被追加的元素在 list 中保持着原结构类型。list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.remove(obj) 移除列表中某个值的第一个匹配项
list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
【例子】

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
y = x.pop()
print(y)  # Friday

y = x.pop(0)
print(y)  # Monday

y = x.pop(-2)
print(y)  # Wednesday
print(x)  # ['Tuesday', 'Thursday']

remove 和 pop 都可以删除元素,前者是指定具体要删除的元素,后者是指定一个索引。
切片的通用写法是 start : stop : step

x = ['Monday', 'Tuesday', 'Wednesday', ['Thursday', 'Friday']]
print(x[0], type(x[0]))  # Monday <class 'str'>
print(x[-1], type(x[-1]))  # ['Thursday', 'Friday'] <class 'list'>
print(x[-2], type(x[-2]))  # Wednesday <class 'str'>

前面三种方法(append, extend, insert)可对列表增加元素,它们没有返回值,是直接修改了原数据对象。 而将两个list相加,需要创建新的 list 对象,从而需要消耗额外的内存,特别是当 list 较大时,尽量不要使用 “+” 来添加list。
1、列表操作练习

列表lst 内容如下

lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]

请写程序完成下列操作:

在列表的末尾增加元素15
在列表的中间位置插入元素20
将列表[2, 5, 6]合并到lst中
移除列表中索引为3的元素
翻转列表里的所有元素
对列表里的元素进行排序,从小到大一次,从大到小一次

lst = [2,5,6,7,8,9,2,9,9]
lst.sort(reverse=True)
print(lst)
lst.sort(reverse=False)
print(lst)
lst.append(15)
print(lst)
lst[5:5] = [20]
print(lst)
lst.append([2,5,6])
print(lst)
a = lst.pop(3)
print(lst)
lst.reverse()
print(lst)

False True首字母大写
题目

lst = [1, [4, 6], True]
lst1 = []
lst2 = []
for i in lst:
    if type(i) != list:
        i *= 2
        lst1.append(i)
    else:
        for elem in i:
            elem *= 2
            lst2.append(elem)
        lst1.append(lst2)
print(lst1)        
lst = [1, 3, 4, 5, 3]
lst1 = [1, 2, 4, 6, 4, 5]

def peak(lst):
    len_lst = len(lst)
    if len_lst < 3:
        print('数组长度应该大于等于3')
        return
    max_e = max(lst)
    if lst.count(max_e) != 1:
        return print('False')
    
    max_index = lst.index(max_e)
    len_l, len_r = len(lst[:max_index]), len(lst[(max_index+1):])
    if len_l == 1:
        pass
    else:
        for i in range(len_l-1):
            if lst[i] >= lst[i+1]:
                return print('False')  
            
    if len_r == 1:
        pass
    else:
        for i in range(max_index+1, len(lst)-1):
            if lst[i] <= lst[i+1]:
                return print('False')
                    
    print('True')

元组

元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。
【例子】

x = (1)
print(type(x))  # <class 'int'>
x = 2, 3, 4, 5
print(type(x))  # <class 'tuple'>
x = []
print(type(x))  # <class 'list'>
x = ()
print(type(x))  # <class 'tuple'>
x = (1,)
print(type(x))  # <class 'tuple'>

练习题:

1、元组概念

写出下面代码的执行结果和最终结果的类型

(1, 2)*2
(1, )*2
(1)*2
分析为什么会出现这样的结果.
(1,2,1,2) (1,1) 1 1
因为元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。

2、拆包过程是什么?
**拆包,是将一个序列类型的数据拆开为多个数据,分别赋值给变量,位置对应。
如:a,b,c=(‘A’,‘B’,‘C’),python解释器会将其拆包为,a=‘A’,b=‘B’,c=‘C’。

a, b = 1, 2
上述过程属于拆包吗?
我觉得不是,这不属于一个序列类型。
可迭代对象拆包时,怎么赋值给占位符?

字符串

一些需要记忆的
Python 中字符串被定义为引号之间的字符集合。
Python 支持使用成对的 单引号 或 双引号。

print(5 + 8)  # 13
print('5' + '8')  # 58

lower() 转换字符串中所有大写字符为小写。
upper() 转换字符串中的小写字母为大写。
swapcase() 将字符串中大写转换为小写,小写转换为大写。
【例子】

str2 = "DAXIExiaoxie"
print(str2.lower())  # daxiexiaoxie
print(str2.upper())  # DAXIEXIAOXIE
print(str2.swapcase())  # daxieXIAOXIE

count(str, beg= 0,end=len(string)) 返回str在 string 里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数。
【例子】

str2 = "DAXIExiaoxie"
print(str2.count('xi'))  # 2

endswith(suffix, beg=0, end=len(string)) 检查字符串是否以指定子字符串 suffix 结束,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
startswith(substr, beg=0,end=len(string)) 检查字符串是否以指定子字符串 substr 开头,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
【例子】

str2 = "DAXIExiaoxie"
print(str2.endswith('ie'))  # True
print(str2.endswith('xi'))  # False
print(str2.startswith('Da'))  # False
print(str2.startswith('DA'))  # True

%c 格式化字符及其ASCII码
%s 格式化字符串,用str()方法处理对象
%r 格式化字符串,用rper()方法处理对象
%d 格式化整数
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g 根据值的大小决定使用%f或%e
%G 作用同%g,根据值的大小决定使用%f或%E

【例子】

print('%c' % 97)  # a
print('%c %c %c' % (97, 98, 99))  # a b c
print('%d + %d = %d' % (4, 5, 9))  # 4 + 5 = 9
print("我叫 %s 今年 %d 岁!" % ('小明', 10))  # 我叫 小明 今年 10 岁!
print('%o' % 10)  # 12
print('%x' % 10)  # a
print('%X' % 10)  # A
print('%f' % 27.658)  # 27.658000
print('%e' % 27.658)  # 2.765800e+01
print('%E' % 27.658)  # 2.765800E+01
print('%g' % 27.658)  # 27.658
text = "I am %d years old." % 22
print("I said: %s." % text)  # I said: I am 22 years old..
print("I said: %r." % text)  # I said: 'I am 22 years old.'

总结

capitalize() 将字符串的第一个字符转换为大写。
print(str2.capitalize()) # Xiaoxie
lower() 转换字符串中所有大写字符为小写。
upper() 转换字符串中的小写字母为大写。
swapcase() 将字符串中大写转换为小写,小写转换为大写。
count(str, beg= 0,end=len(string)) 返回str在 string 里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数。
endswith(suffix, beg=0, end=len(string)) 检查字符串是否以指定子字符串 suffix 结束,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
startswith(substr, beg=0,end=len(string)) 检查字符串是否以指定子字符串 substr 开头,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end,则检查是否包含在指定范围内,如果包含,返回开始的索引值,否则返回 -1。
rfind(str, beg=0,end=len(string)) 类似于 find() 函数,不过是从右边开始查找。

习题

1、字符串函数回顾

怎么批量替换字符串中的元素?
怎么把字符串按照空格进⾏拆分?
怎么去除字符串⾸位的空格?
在这里插入图片描述

把 将字符串中的old替换成new,如果max指定,则替换不超过max次。对次数max进行设置或多次调用replace函数就能实现批量替换元素。
使用split()
使用lstrip()

2、实现isdigit函数

题目要求

实现函数isdigit, 判断字符串里是否只包含数字0~9

def isdigit(string):
“”"
判断字符串只包含数字
:param string:
:return:
“”"

 def isdigit(string):

    # your code here
    len1 = len(string)
    for i in range(len1):
        try:
            int(string[i])

        except ValueError:
            return False
    return True

if __name__ == '__main__':
    name = "leimingshenyi"
    print(isdigit(name))
    num = '1234423'
    print(isdigit(num))

3、leetcode 5题 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例:

输入: “babad”

输出: “bab”

输入: “cbbd”

输出: “bb”
难 想不懂 可以中等题了 我还是太菜

class Solution:
   def longestPalindrome(self, s: str) -> str:
          
  class Solution:
def extend(s,start,end,k):
if (start<k or end+k>=len(s)):
return k-1
if s[start-k]==s[end+k]:
return extend(s,start,end,k+1)
else:
return k-1
def longestPalindrome(self, s: str) -> str:
c=’’
l=len(s)-1
if l<1:
return s
L=0
tar=s[0]
for i in range(l):
if s[i]==s[i+1]:
sl=extend(s,i,i+1,0)
if 2sl+2>=L:
L=2sl+2
tar=s[i-sl:i+sl+2]
if s[i-1]==s[i+1]:
if i<1:
continue
sl=extend(s,i-1,i+1,1)
if 2sl+3>=L:
L=2sl+3
tar=s[i-sl-1:i+sl+2]
return tar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习Python的路线可以根据个人的学习目标和时间安排来制定,以下是一个常见的Python学习路线: 1. 入门阶段: - 学习Python的基本语法和数据类型,了解变量、运算符、条件语句、循环语句等基本概念。 - 掌握Python的基本输入输出,学会使用print函数和input函数。 - 学习如何定义和调用函数,了解函数的参数传递和返回值。 - 熟悉Python的列表、元组、字典和集合等数据结构。 2. 进阶阶段: - 学习面向对象编程(OOP)的基本概念,包括类、对象、继承、多态等。 - 掌握异常处理机制,学会使用try-except语句处理异常。 - 学习文件操作,包括读取和写入文件。 - 熟悉Python的模块和包的概念,了解如何导入和使用第三方库。 3. 实践阶段: - 参与实际项目开发,通过实践提升编程能力。 - 学习使用Python进行数据分析、机器学习或者Web开发等领域的应用。 - 阅读优秀的Python代码,学习其他开发者的编程风格和技巧。 4. 深入阶段: - 学习Python的高级特性,如生成器、装饰器、上下文管理器等。 - 掌握Python的并发编程和网络编程,了解多线程、多进程、协程等概念。 - 学习Python的内存管理和性能优化技巧。 在学习过程中,可以结合在线教程、书籍、视频教程和实践项目等资源进行学习。同时,参与Python社区的讨论和交流,与其他开发者分享经验和学习心得也是非常有益的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值