'''
第一部分:基础知识点巩固
在编程之中,应保持注释的书写习惯,方便自己,方便他人
选择简单的方法,使得代码更易维护,否则必须书写帮助理解的注释
在学习的过程之中,应时常对基础知识进行巩固,直到可以随心使用这些知识
将代码间隔开来,使用一个或多个空行进行操作,易于区分
'''
# 基础知识
print("Hello Python World!!!") #直接输出--print()语句
message = 'Hello Python World!!!' #使用变量,对变量进行复制,间接输出
print(message)
message = 'Hello World!!!' #直接更改变量值,输出更改之后的值,覆盖之前的值
print(message)
message = "Hello World!!!" #双引号和单引号都可表示为字符串
print(message)
#下面操作可以对单词需求进行更改
name = 'li hua'
print(name.title()) #变量名.title() 单词第一个字母实现变大写的作用
print(name.upper()) #变量名.upper() 单词全大写的作用
print(name.lower()) #变量名.lower() 单词全小写作用
first_name = 'li'
last_name = 'hua'
full_name = first_name + " " + last_name #使用 + 实现对变量值的合并
print(full_name.title())
#制表符可以同时叠加使用
print('\tpython') # \t 使用制表符 在前添加空格
print('\npython') # \n 进行换行操作,\n在前为先换行在输出,\n在后为先输出再换行
message = ' li hua '
print(message.rstrip().title()) #使用 rstrip()对字符串的末尾进行删除空格的操作
print(message.lstrip().title()) #使用 lstrip()对字符串的开头进行删除空格的操作
print(message.strip().title()) #使用 strip()对字符串的开头和末尾进行删除空格的操作
print(message) #但这种操作是暂时的,如果需要永久更改,需要将这个值赋值到变量中去
print('"孔子曰:知之为知之,不知为不知,是知也"') #双引号和单引号应交叉使用 外部用双内部就用单
name = '孔子'
message = '知之为知之,不知为不知,是知也'
print(name+"曰:"+message) #合并进行输出,掌握合并的方法
num1 = 5
num2 = 3
#下列操作依次为 加减乘除 次方 地板除 优先级运算 操作
print(num1 + num2)
print(num1 - num2)
print(num1 * num2)
print(num1 / num2)
print(num1 % num2) #取余操作
print(num1 ** num2)
print(num1 // num1)
print((num1 + num2) * num2)
num3 = 0.5
num4 = 0.3
print(num3 + num4) #浮点数运算,与整数相同
#不同类型不可同时进行相同操作,需转换为相同类型
age = 19
happy = "Happy "+str(age)+"rd birthday" #19为整型,需准换成字符型
print(happy)
# 列表
# 用 [] 表示列表
name = ['jack', 'lisa', 'tom', 'lucy'] #访问列表操作,索引从0开始而不是1,这里的意思就是0代表第一个
print(name[0].title())
print(name[-1].title()) #若要从后往前访问元素,从-1开始索引
print('Hello ' + name[2].title() + ', Nice to meet you') #列表也可进行合并操作
name[2] = 'tim' #对列表元素进行修改,直接对想修改的元素索引赋值即可
print(name)
name.append('jony') #使用 append() 在列表末尾添加元素
print(name)
name.insert(2, 'jeny') #使用 insert() 在列表指定位置添加元素
print(name)
del name[3] #使用 del 对列表指定元素进行删除
print(name)
name_poped = name.pop(3) #使用 pop() 对列表指定位置进行删除,若未指定元素,默认为末尾元素
print(name)
print(name_poped) #但依然可以对删除的元素进行访问
print(name_poped.title() + ' is my last classmate') #对删除元素进行访问及其他操作(这可以运用到多个情况之下)
name.remove('jeny') #使用 remove() 在不知道元素位置只知道元素值的时候使用,也可以进行删除操作,该操作只删除第一个指定的值(存在两个相同的时候只删除一个,循环可解决这种情况)
print(name)
nums = [6, 2, 3, 4, 1, 9]
nums.sort() #使用 sort() 对列表元素进行永久排序
print(nums)
print(sorted(name)) #使用 sorted()进行临时排序
nums.reverse()
print(nums) #使用 reverse() 对列表进行永久倒置排序
print(len(nums)) #使用 len() 对列表长度进行测量
for num in nums:
print(num) #使用 for循环遍历整个列表,输出所有元素
print('亲爱的小朋友,你今年' + str(num) + '岁了\n') #遍历列表也可进行合并操作,\n为换行符
print('生日快乐啊!') #循环之后的操作,个性化,在循环外,故只执行一次
for i in range(1, 5): #range()内为范围,左闭右开
print(i)
numbers = list(range(1, 5)) #使用 range() 创建数字列表
print(numbers)
number = list(range(1, 10, 2)) #range内的数字依次表示 开始的值 结束后一位的值 步长(表示每个数字之间的距离)
print(number)
print(sum(number)) #使用 sum() 函数对列表内数据进行求和
digitals = []
for digital in range(1, 5):
digitals.append(digital**2) #在遍历内进行操作
print(digitals)
squares = [value**2 for value in range(1, 10)] #更加简洁的一种操作
print(squares)
print(squares[5:8]) #列表的切片操作,针对需要使用列表的一部分,给予范围,若未给予范围,默认从第一位或者到最后一位
print(squares[-3:]) #也可以从后进行切片操作
for square in squares[3:5]:
print(square) #切片也可与遍历同时进行,因为切片操作之后,就已经成为一个列表
square_copy = squares[2:5] #若要对切片之后的数据进行保存,可以对其进行赋值
print(square_copy)
# 元组
#
# 操作与列表相同
# 但元组内元素不可一旦确定不可修改,若要修改,可以重新对变量进行赋值
num = (1, 5) #重新赋值操作
print(num)
num = (2, 5)
print(num)
# if语句
name = 'li hua'#条件为li hua 当条件为真时,执行if内的操作
age = 10
if name == 'li hua':
print(name.title())
if name == 'li hua' and age == 10: #使用 and 将条件联系起来,and 表示同时,只用条件同时满足时,才执行操作
print(name.title())
if name == 'li hua' or age == 20: #使用 or 将条件连接起来,or表示或者,只要一个条件满足,就执行操作
print(name.title())
if 4 in squares: #使用 in,判断存在
print('IN')
if 5 not in squares: #使用 not in,判断不存在
print('NOT IN')
print(9 in squares) #布尔表达式 True和False,真为true,假为false
#if-else语句
if name == 'li hua': #if-else语句 if条件为真时执行if内的操作,为假,执行else内的操作
print('Hello')
else:
print('Get Out')
#if-elif-else语句
if name == 'xiao hong': #if-elif-else语句,从上至下一次判断,为真执行操作,为假执行下一个条件的判断,elif个数可以随意增加,若都为假,执行else内的操作
print('Beautiful')
elif name == 'li hua':
print('Hello')
else:
print('Who are you?')
for square in squares[3:5]: #在循环内部进行判断操作
if square == 3:
print('Not In')
else:
print(square)
for num5 in numbers: #列表循环,进行操作
if num5 in squares:
print(num5)
else:
print(' ')
# 字典
# 使用{} 表示字典
information = {'name': 'Li Hua', 'name': 'xiao hong', 'age': '19'} #表示一个姓名键值对和一个年龄键值对
print(information['name'])
print(information['age'])
print(information['name'] + ' ' + information['age'] + '岁') #也可进行合并操作
information['ID'] = '520114xxxxxxxxxxxx'
information['Home'] = 'Beijing' #对字典进行添加信息的操作,可对空字典进行操作
print(information)
information['age'] = '20' #对字典进行修改
print(information)
del information['Home'] #对字典进行删除的操作,删除时,键值对同时操作
print(information)
for k, v in information.items(): #对字典进行遍历操作,字典.items() items表示键值对
print(k)
print(v+'\n')
for k in information.keys(): #对字典的键进行遍历,keys表示键
print(k)
for v in information.values(): #对字典的值进行遍历,values表示值
print(v)
for key in (information.keys()): #对字典的键进行顺序遍历
print(key)
for key in set(information.keys()): #使用 set() 对其中的值进行消重
print(key)
#嵌套操作
information1 = {'name': 'li hua'} #将三个不同的字典保存在同一个列表之中,可以实现取出
information2 = {'name': 'xiao hong'}
information3 = {'name': 'li gang'}
information4 = {'name': 'xiao zhang, zhang zhang'}
information = [information1, information2, information3]
print(information)
print(information[1].values()) #实现对对应键值对的访问
for i in information: #实现遍历寻找特定值后进行修改
if i['name'] == 'li hua':
i['name'] = 'xiao li'
print(information)
information = { #使用字典+列表的操作,使得键值的种类可以增多
'第一位选手': ['li hua'],
'第二位选手': ['xiao hong'],
'第三位选手': ['xiao zhang', 'zhang zhang']
}
for key, values in information.items():
print(key)
for value in values:
print(value)
print('\n')
user = { #字典中加字典,更加简洁
'第一位运动员': {
'姓': '李',
'名': '华',
'国籍': '中国',
},
'第二位运动员': {
'姓': '陈',
'名': '少',
'国籍': '中国',
},
}
for key, value in user.items():
print(key + value['姓'] + value['名'] + ',来自' + value['国籍'])
print('预祝他们能获得好成绩!')
# input()语句
# 由于需要自行输入,故注释
# #用户的输入
# #使用 input() 语句进行赋值
# num = input('李华最喜欢的数字是:') #使用 int() 用于转化成整型操作,用于数字操作
# print('我也一样喜欢' + num)
# num1 = input('小红最喜欢的数字是:')
# print(num < num1)
#
#
# while循环语句
# num = True #如果想结束循环,要么使条件为假,要么直接跳出循环
# while num: #当条件为真的时,一直进行循环,直到条件为假
# num = int(input('你选择的数字是:'))#用户自定义何时停止循环
# if num == 1:
# print('怎么会是1呢')
# num = False #使得条件为假
# elif num == 2: #break 跳出所有循环
# print('怎么能是2呢')
# break
# elif num == 3:
# print('3也不对') #continue 跳出当前循环
# continue
# else:
# print(num)
# num = [1, 2, 3, 4, 5] #while循环用于列表的简单操作,将满足条件的元素放入其他列表之中
# num_confirmed = []
# while num:
# num_poped = num.pop()
# if num_poped == 2:
# continue
# else:
# num_confirmed.append(num_poped)
# print(num_confirmed)
# information = {} #while循环用于填充字典
# tiaojian = True
# while tiaojian:
# name = input('名字')
# age = input('年龄')
# information[name] = age
# tiaojian = input('yes/no')
# if tiaojian == 'no':
# tiaojian = False
# for name, age in information.items():
# print(name, age)
#函数(用空行将函数隔开,易于区分,不易混淆)
def num(): #简单的定义和调用函数
num = 5
print(num)
num()
def name(your_name, age='18'): #向函数传递信息 函数内的参数叫做形参 传入函数的叫做实参 所以本身有值的为实参,被赋值的为形参
print('姓名是' + your_name.title() + ' ' + age + ' 岁')
name('li hua', '19') # 传入顺序应对应相同,实参和形参的位置相同
name('xiao hong', '20') #多次调用函数
name(your_name='li gang', age='22') #关键字实参 直接实参赋值给函数内的形参
name('gou zi') #默认值,直接给形参赋一个值,使之成为默认值,当实参未传入函数时,默认输出默认值,若没有先强调默认值,必须传入相应实参
def information(name, age, ID=''): #ID默认为空,表示可以传入实参也可以不传,不会报错,针对没有信息的时候使用
messsage = name.title() + ' ' + age + '岁'
return messsage #return 返回值,现将值存储在变量之中,返回变量
message = information('li hua', '20')
print(message)
def person(name, age):
person_information = {'name': name.title(), 'age': age} #返回字典的操作
return person_information
person_information = person('li hua', '20')
print(person_information)
n=1
while n <= 5: #函数和循环相结合
person_information = person('li gang', '22')
print(person_information)
n += 1
def names(information):
for name in information:#将列表传入函数
if name == 'li hua': #在函数内修改列表
name = 'xiao ming'
print(name)
name = ['li hua', 'xiao hong', 'xiao gang']
names(name[:]) #将复件进行操作,原件保持不变
print(name)
def name(*Names): # *形参 可以传入多个实参
for Name in Names:
print(Name)
name('li hua', 'xiao hong', 'xiao gang')
def IDcard(name, age, **ID): # ** 传递任意数量的实参
IDs = {}
IDs['name'] = name
IDs['age'] = age
for k, v in ID.items():
IDs[k] = v
return IDs
IDCARD = IDcard('li hua', '19',
id='4324313',
home='beijing')
print(IDCARD)
from information import IDc #调用同目录下的information模块,执行函数
print(IDc('li hua', '19', id='34124'))
import information #调用模块下特定的函数
print(information.ID2('li hua', '19'))
from information import IDc as idc # as 对函数进行重命名,可以缩短函数名长度,简洁
print(idc('li ming', '22', id='314141', home='guizhou'))
from information import* # * 表示直接导入模块中的所有函数
print(information.IDc('li hua', '19'))
print(information.ID2('li hua', '18'))
#面向对象编程 类和对象
#类就是函数的合并,将同类函数放在一起就成为类
class information(): #创建类
def __init__(self, name, age):
self.name = name
self.age = age
def Hello(self):
print('hello '+self.name.title())
def birthday(self):
print('happy ' + self.age + 'rd birthday')
His_information = information('li hua', '19') #直接调用类内的函数
print(His_information.name.title())
His_information.Hello()
His_information.birthday()
class car():
def __init__(self, year, name, model):
self.year = year
self.name = name
self.model = model
def get_car(self):
print("The dream come true, I get my car,my car is " + self.name + ' ' + self.model + ', I get it in ' + self.year + '.')
def miles(self, mile):
self.mile = mile
class super_car(car): #子类 拥有父类的操作
def __init__(self, year, name, model):
super().__init__(year, name, model)
self.cost = 900000
def costs(self): #在子类中增加新的属性,区分于父类
print('hong qi costs my ' + str(self.cost) + 'yuan')
My_own_car = car('2022', 'Ford', 'Mustang')
print(My_own_car.name)
My_own_car.get_car()
My_own_car.miles(20000) #增加函数,实现自定义修改属性的值
print(My_own_car.mile)
My_second_car = super_car('2024', 'hong qi', '2024')
My_second_car.get_car()
My_second_car.costs()
#导入类和导入模块用法相同, from 类.py import 类
#文件和异常
with open('result.txt') as f: #使用 with open() 在相同目录下打开文件
fr = f.read() #使用 read() 进行读取
print('\n' + fr.strip())
with open('D:\pyth\Python学习基础\Python\Python_knowledge\Basic_knowledge\q.txt') as c: #若打开的文件不在相同目录之下,需传入完整的文件路径
cr = c.read()
print(cr.strip() + '\n')
with open('go_alone.txt') as b:
for line in b:
print(line.strip())
print('\n')
with open('go_alone.txt') as v: #使用 readlines() 将文件内的语句保存在列表之中
vl = v.readlines()
print(vl)
for line in vl:
print(line.strip())
vll = '' #使用文件内的内容
for line in vl:
vll += line.strip()
if '生活' in vll:
print('好好生活')
else:
print('生活下去')
with open('go_alone.txt', 'r+') as b: #写入文件 w 表示写入 r 表示读取 a 表示附加 r+ 表示读取和写入
b.write('好好生活,等合适的时候我们再相遇')
br = b.read()
print(br)
# try-except-else 代码块
# 也可放入函数进行操作
#自定义在错误时是否执行或者跳过当前错误直接执行下一个操作,一般在函数中,当传入数据中有错,是跳过错误还是执行下一个数据
try: #当try 语句里的操作是没有问题的时候,执行try内的操作,有问题时,执行except里的操作
answer = 5/0
except ZeroDivisionError: #该语句可以判断代码具体出错的位置 ZeroDivisionError是该错误的名称
print("知道是 0 你还除?")
else: # else 代码块 如果try内的语句没问题,将try成功的代码放入else之中
print(answer)
try:
with open('result.txt') as f:
x = f.read()
except:
pass #如果 try 内的语句有问题,而又不想报错,在except内中 pass
else:
c = x.split()
z = len(c)
print(z)
import json #使用 json 库 用于写入和读取文件的内容
word = '今晚月色好美'
with open('res.txt', 'w') as f: #使用 json.dump()写入文件
json.dump(word, f)
with open('res.txt') as f: #使用 json.load() 导出文件
nums = json.load(f)
print(nums)
'''
测试程序(重要)
import unittest
------
程序...
------
unittest.main()
结果
----------------------------------------------------------------------
Ran 1 tests in 0.000s
OK
返回这种类型的即为测试成功,程序出现异常,需修改错误代码
了解unittest库
assertEqual[a,b] ---> 核实a==b
assertNotEqual[a,b] ---> 核实a!=b
assertTrue(x) ---> 核实x为True
assertFalse(x) ---> 核实x为False
assertIn(item,list) ---> 核实item在list中
assertNOtIn(item,list) ---> 核实item不在list中
'''