学习日记 2022-4-21

学习日记 2022-4-21

一、元组和集合

1. 元组
1.1 什么是元组(tuple)

容器:将()作为容器表示,里面多个元素用逗号隔开:(元素1,元素2,元素3,…)
不可变的(不支持增删改);有序的(支持下标操作)

元素:任何元素

空元组 - t1 = ()

注意:只有一个元素的元组(重点!) - 唯一的元素后必须加逗号

在没有歧义的情况下,元组的小括号() 可以省略 - 直接多个数据用逗号隔开,表示的也是一个元组

1.2 元组就是不可变的列表

列表中除了和可变相关的操作,其他操作元组都支持

t2 = (100,)
print(t2,type(t2),len(t2))
t3 = 199,23213,111
print(t3)
print(t3[2]) # 111
print(t3*3) # (199, 23213, 111, 199, 23213, 111, 199, 23213, 111)
print(len(t3)) # 3
print(t3+t2) # (199, 23213, 111, 100)
print(sorted(t3)) # print(sorted(t3))
print(sorted(t3,reverse = True)) # [23213, 199, 111]

2. 集合

2.1 什么是集合(set)

容器:{}作为容器的标志,里面多个元素用逗号隔开:{元素1,元素2,元素3,…}

可变的;无序的

元素的要求:和字典对键的要求一样(不可变的数据,唯一的)

空集合 - s1 = set()

集合无序

print({1,2,3} == {3,1,2}) #True
# 元素是不可变类型的数据
# s2 = {10,'ac',[1,2]} # 报错
s2 = {10,'ac',(1,2)}
print(s2) # {'ac', 10, (1, 2)}

# 元素是不可变类型的数据
# s2 = {10,'ac',[1,2]} # 报错
s2 = {10,'ac',(1,2)}
print(s2) # {'ac', 10, (1, 2)}

数学集合运算:&(交集)、|(并集)、-(差集)、^(对称差集)、>、<、>=、<=

&(交集) - 集合1 & 集合2 - 获取两个集合的公共部分


s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7,8,9}
print(s1&s2) # 交集 {5, 6, 7}
print(s1|s2) # 并集 {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(s1 - s2) # 差集 {1, 2, 3, 4}
print(s2 - s1) #  差集 {8, 9}
print(s1 ^ s2) #  对称差集 {1, 2, 3, 4, 8, 9}

二、认识字符串

1. 什么是字符串(str)

字符串是容器型数据类型:将’‘、“”、’‘’‘’'、“”“”""作为容器的标志,引号中的每个符号就是字符串的元素

字符串不可变;字符串有序(支持下标操作)

元素:引号中的每个符号就是字符串的元素,字符串的元素又叫字符。字符分为普通字符和转义字符两种

1.1 引号中的每个符号都是字符串的元素,对于符号本身没有限制
str1 = 'abc萨达萨达aaa*....'
# 'abc萨达萨达'
new_str1 = str1.upper()
print(new_str1) # ABC萨达萨达AAA*....
1.2 引号问题
str2 = "msmsmsmsaa1123"
str3 = ''' 123fsdfsdf'''
str4 = """nasjhdu1lh12y38"""
print(type(str2),type(str3),type(str4)) # <class 'str'> <class 'str'> <class 'str'>
1.3 多行字符串 ‘’‘’''和“”“”“” 字符串内容可以直接按回车换行
1.4 空串
str1 = ''
print(len(str1)) # len = 0

三、字符和转义字符

1. 字符 - 字符串的元素
1.1 普通字符 - 在字符串中表示符号本身的字符就是普通字符,例如:中文、字母、数字等
1.2 转义字符 - 在特定的符号前加\来表示特殊功能或者特殊意义的符号就是转义字符

\t - 水平制表符(相当于按一次tab键)
\n - 换行
’ - 表示一个普通的单引号
" - 表示一个普通的双引号
\ - 表示一个普通的反斜杠

print('\tabc\n123')
print('it\'s me' ) # it's me
print('\\tac') # \tac
2. R语法

字符串的最前面可以加r或R,让字符串中所有的转义字符功能消失,所有的符号都变成普通字符:r’‘、R’’

str1 =r'\tadasd\n123\u4e00'
print(str1) # \tadasd\n123\u4e00
path = r'C:\ndesk\tsss\aaa'
print(path) # C:\ndesk\tsss\aaa

四、字符编码

1. 字符编码

计算机存储原理:计算机保存数据的时候只能存数字,而且存的是数字的补码

字符编码:为了能够让计算机保存文字符号,我们给每一个符号对应了一个固定的数字,在存储符号的时候就保存这个符号对应的数字,那么这个数字就是这个符号的编码值

2. 编码表 - 保存符号和编码值对应关系的表
2.1 ASCII码表:通过一个字节来对128个字符进行编码,里面的字符是美国通用的符号
      数字在大写字母的前面、大写字母在小写字母前面、大写字母和小写字母之间有间隙(A-65;a-97)
2.2 Unicode编码表(python) - 万国码 - 包含了世界上所有的国家所有的民族所有的语言的符号
2.2.1 Unicode编码表是ASCII码表的扩展,它包含ASCII码表
2.2.2 中文编码值范围(16进制):4eoo ~ 9fa5
3. python使用编码值
3.1 chr函数:chr(编码值) - 获取编码值对应的字符
3.2 ord函数:ord(字符) - 获取指定字符对应的编码值
hex(十进制)  -  获取指定的十进制对应的16进制
3.3 编码字符 - 在字符串中用\u4位的16进制数’来表示一个字符

str1 = ‘a\u0061’’

例子:判断x是否是中文

x = '呱'
print('\u4e00' <= x <= '\u9fa5') # True

五、获取字符

1. 查 - 获取元素(字符)

列表获取元素的方法字符串都支持

注意:一个转义字符长度是1,一个空格的长度也是1

2. 字符串相关操作
2.1 +、*

字符串1+字符串2 - 将两个字符串合并成一个字符串

str1 = 'hello'
str2 = 'python'
str3 = str1 + str2
print(str3) # hellopython

字符串N、N字符串 - 将N哥字符串合并成一个字符串

str1 = 'hello'
print(str1*3) # hellohellohello

day8 作业

2.2 比较大小:>、>=、<、<=

两个字符串比较大小,比较的是第一对不相等的字符的编码值的大小

两个字符比较大小,就是比较两个字符的编码值的大小

是否是数字:‘0’ <= x <= ‘9’
是否是小写字母:‘a’ <= x <= ‘z’
是否是字母:‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’
是否是中文:‘\u4e00’ <= x <= '\u9fa5

3. in 和 not in

字符串1 in 字符串2 - 判断字符串2中是否包含字符串1 (判断字符串1是否是字符串2的字串)

print('a' in 'abc') # True
print('ab' in 'abc') #True
print('ac' in 'abc') # False
  1. 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

    例如: 输入’abcd1234 ’ 输出’bd24’

    str1 = 'abcd1234 '
    print(str1[1:-1:2])
    # bd24
    
  2. 输入用户名,判断用户名是否合法(用户名长度6~10位)

    username = input('请输入用户名:''')
    if 6 <= len(username) <= 10:
        print('legal')
    else:
        print('illegal')
    
  3. 输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)

    例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法

username = input('请输入用户名:''')
for x in username:
    if 'a' <= x <= 'z' or 'A' <= x <= 'Z' or '0' <= x <= '9':
        print('legal')
        break
    else:
        print('illegal')
        break
  1. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

    例如: ‘abc’ — 不合法 ‘Mabc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法

username = input('请输入用户名:''')
if 'A' <= username[0] <= 'Z'
	num = 0
    for x in username[1:0]:
    	if not 'a' <= x <= 'z' or 'A' <= x <= 'Z' or '0' <= x <= '9'
        print('不合法')
        break
    elif: 
        '0' <= x <= '9'
        num += 1
    else:
        if num != 0:
            print('合法'else:
            print('不合法')
 else:
      print('不合法')
  1. 输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串

    例如:输入**‘abc1shj23kls99+2kkk’** 输出:‘123992’

str1 = 'abc1shj23kls99+2kkk'
str2 = ''
for x in str1:
    if '0'<= x <= '9':
        str2 += x
print(str2)
  1. 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
  2. 例如: 输入**‘a2h2klm12+’ ** 输出 ‘A2H2KLM12+’
str1 = 'a2h2klm12+'
str2 = str1.upper()
print(str2)

# 方法2
str1 = 'a2h2klm12+'
str2 =''
print(str2)
for x in str1:
    if 'a' <= x <= 'z':
        x = ord(x)
        x = x-32
        str2 += chr(x)
    else:
        str2 += x
print(str2)
  1. 输入一个小于1000的数字,产生对应的学号

    例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**

stu_id = int(input('请输入一个小于1000的数字:'))
if 0 <= stu_id <= 999:
    print('学号是:''py',1901000+stu_id,sep='')
else:
    print('错误,请输入一个小于1000的数字')
  1. 输入一个字符串,统计字符串中非数字字母的字符的个数

    例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**‘===’** 输出:3

str1 = str(input('请输入一串字符:'))
count = 0
for x in str1:
    if ('a'> x or x > 'z') and ('A' > x or x  > 'Z') and ('0' > x  or x > '9'):
        count += 1
print(count)
  1. 输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串

    例如: 输入字符串**‘abc123’, 输出’+bc12+'**

str1 = 'abc123'
str2 = ''
l = len(str1)
for x in str1[1:-1]:
    str2 += x
print('+'+str2+'+')
  1. 输入字符串,获取字符串的中间字符

    例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**

str1 = 'abc123'
str2 = ''
l = len(str1)
for x in str1:
    if len(str1) % 2 == 0:
        str2 = str1[l//2-1] + str1[l//2 ]
    else:
        str2 = str1[l//2 - 1]
print(str2)
  1. 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)

    例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8

str1 = 'how are you? Im fine, Thank you!'
str2 = 'you'
i = 0
for index,item in enumerate(str1):
    if str2[i] == item:
        print(index)
        break
    else:
        i += 1
  1. 获取两个字符串中公共的字符

    例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3

str1 = 'abc123'
str2 = 'huak3'
str3 = ''
for x in str1:
    for y in str2:
        if x == y:
            str3 += x
print('公共字符有',str3,sep='')

为了升级案例7-3的日记本,我们可以加入一些新的功能,如日期选择器、关键词搜索等。 首先,我们可以使用PyQt5中的QCalendarWidget类来添加日期选择器。我们还可以添加一个搜索框和按钮,以便用户可以按关键词搜索他们的日记。这需要使用QLineEdit和QPushButton类。 在主窗口中,我们可以创建一个垂直布局,并将QCalendarWidget、QLineEdit、QPushButton和QTextEdit添加到其中。这将使用户能够选择日期、输入关键词并搜索日记,然后在QTextEdit中查看结果。 我们还可以添加一个菜单栏,以便用户可以保存和打开他们的日记。这需要使用QMenuBar、QMenu和QAction类。 最后,我们可以将日记保存为文本文件,并使用QFileDialog类选择文件的保存位置。当用户打开日记时,我们将使用QFileDialog类选择文件的位置,并将其加载到QTextEdit中。 以下是一个简单的代码示例: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QCalendarWidget, QVBoxLayout, QLineEdit, QPushButton, QTextEdit, QMenuBar, QMenu, QAction, QFileDialog from datetime import datetime class Diary(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('日记本') self.setGeometry(100, 100, 800, 600) # 创建菜单栏 menubar = self.menuBar() fileMenu = menubar.addMenu('文件') # 创建菜单项 saveAction = QAction('保存日记', self) saveAction.triggered.connect(self.saveDiary) fileMenu.addAction(saveAction) openAction = QAction('打开日记', self) openAction.triggered.connect(self.openDiary) fileMenu.addAction(openAction) # 创建布局 layout = QVBoxLayout() # 添加日历控件 self.calendar = QCalendarWidget() self.calendar.clicked.connect(self.showDiary) layout.addWidget(self.calendar) # 添加搜索框和按钮 searchLayout = QHBoxLayout() self.searchBox = QLineEdit() self.searchButton = QPushButton('搜索') self.searchButton.clicked.connect(self.searchDiary) searchLayout.addWidget(self.searchBox) searchLayout.addWidget(self.searchButton) layout.addLayout(searchLayout) # 添加文本框 self.textEdit = QTextEdit() layout.addWidget(self.textEdit) # 设置主窗口的中心部分 centralWidget = QWidget() centralWidget.setLayout(layout) self.setCentralWidget(centralWidget) def saveDiary(self): fileName, _ = QFileDialog.getSaveFileName(self, '保存日记', '', 'Text Files (*.txt)') if fileName: with open(fileName, 'w') as f: f.write(self.textEdit.toPlainText()) def openDiary(self): fileName, _ = QFileDialog.getOpenFileName(self, '打开日记', '', 'Text Files (*.txt)') if fileName: with open(fileName, 'r') as f: self.textEdit.setPlainText(f.read()) def showDiary(self): date = self.calendar.selectedDate() fileName = date.toString('yyyy-MM-dd') + '.txt' try: with open(fileName, 'r') as f: self.textEdit.setPlainText(f.read()) except FileNotFoundError: self.textEdit.setPlainText('') def searchDiary(self): keyword = self.searchBox.text() if keyword: result = '' for year in range(2000, datetime.now().year+1): for month in range(1, 13): for day in range(1, 32): try: with open(f'{year}-{month:02d}-{day:02d}.txt', 'r') as f: content = f.read() if keyword in content: result += f'{year}-{month:02d}-{day:02d}\n{content}\n\n' except FileNotFoundError: pass if result: self.textEdit.setPlainText(result) else: self.textEdit.setPlainText('未找到相关日记。') else: self.showDiary() if __name__ == '__main__': app = QApplication([]) diary = Diary() diary.show() app.exec_() ``` 在这个例子中,我们添加了一个菜单栏,其中包含保存和打开日记的选项。我们还使用了QCalendarWidget、QLineEdit和QPushButton类添加了一些新的控件。最后,我们将日记保存为文本文件,并使用QFileDialog类选择文件的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值