python基础语法笔记(有C语言基础之后)

input()用于输入,其有返回值(即用户输入的值),默认返回字符串。括号里可放提示语句
一行代码若想分为多行来写,需要在每一行的末尾加上“\”
单个“/”表示数学中的除法,不会取整。“//”才会向下取整。
字符串类型可以乘以整数类型,相当于这个字符串被复制了整数倍,若做输出,即会重复输出。
条件语句

if [条件] :

[执行语句]

[执行语句]

elif [条件二]:

[执行语句] 

else :

[执行语句]

(要有缩进,[条件]外面不用中括号也不用小括号)

逻辑关键词

(not 非) > (and 与) > (or 或)

方法与函数

方法:对象.方法名()

函数:函数名()

列表(list)
  1. 与普通数据类型(字符串,整型,浮点型,布尔型)的区别:列表在调用函数或方法对其代表的值进行改变时,其本身值确实会被改变;而普通数据类型调用函数或方法进行改变时,其本身的值不会被改变,相当于是其值被复制了一遍,改变的是复制后的值,然后进行输出或其他操作。

  2. 常用方法.remove(【元素】)(移除).append(【元素】)(添加) .min(【列表】)(返回列表中的最小值).max(【列表】)``.sort(【列表】)(给列表排序)len(【列表】)(返回列表长度)

  3. 命名方式a = [【元素】,【元素】] (可以为空,里面可以有任何元素(但必须是同一类型),用逗号分隔)

  4. 赋值a[1] = 【另一个元素】

字典(dictionary)
  1. 命名方式a = { 【key】 : 【value】, 【key】 : 【value】 } (key必须是不可变的数据结构)

  2. 旧键赋新值新增键值对a[【key1】] = 【value2】

  3. 判断某个键是否已经存在【key】 in a,若存在,则该表达式的值为True,否则为False

  4. 删除键值对del a[【key1】]

  5. 常用方法.keys()(返回里面的所有键).values()(返回里面的所有值).items()(返回里面的所有键值对)

元组(tuple)
  1. 命名方式a = (【元素】, 【元素】)

  2. 不可变,可作为字典的key

  3. 访问元组中的元素:a[1]、a[0]

循环(for)
  1. 写法:for 【变量名】 in 【可迭代的对象】:(变量名处可以是多个变量,相应的可迭代对象得有同样多数量的值)

  2. range(a, b):a≤ x<b range(a, b, c) :c为步长

格式化字符串

用format()方法或直接在字符串前加 ‘ f ’,举例

y = 90
a = 90.2
c = "jijin"
str1 = "嘻嘻哈哈{0}红红火火{2}恍恍惚惚{1}是啊{0}".format(y, a, c)
#或者如下
str2 = "嘻嘻哈哈{y2}红红火火{c2}恍恍惚惚{a2}是啊{y2}".format(y2 = y, a2 = a, c2 = c)
#或者如下
str3 = "嘻嘻哈哈{y2}红红火火{c2}恍恍惚惚{a2}是啊{y2}".format(y2 = 90, a2 = 90.2, c2 = "jijin")
#或者如下
str4 = "嘻嘻哈哈{y}红红火火{c}恍恍惚惚{a}是啊{y}".format(y = y, a = a, c = c)
#或者如下
str5 = f"嘻嘻哈哈{y}红红火火{c}恍恍惚惚{a}是啊{y}"
#或者如下
str6 = f"嘻嘻哈哈{90}红红火火{'jijin'}恍恍惚惚{90.2}是啊{90}"

#打印结果皆如下
嘻嘻哈哈90红红火火jijin恍恍惚惚90.2是啊90

若要控制浮点数的小数位数,比如三位小数,则在具体值或者变量的后面加上“:.3f

函数
  1. 写法:
def fun1():
    #函数体
    #。。。

def fun2(a, b):            #无需说明参数类型,也无需说明函数类型
    c = a+b
    print(c)
    return a          #若没写 return 语句会有默认的 return None

引入模块
  1. import 【模块】

  2. from 【模块】 import 【函数】

  3. from 【模块】 import *

  4. 引入第三方库,需要先在互联网上下载,用命令pip install来安装,pypi.org这个网站可以对第三方库进行搜素。

#定义一个类
class Cat:
    def __init__(self, name, age):  #构造函数,必写,名字固定为 __init__() (注意,左右各两个横线)  第一个参数必须是self,代表自己
        self.name = name              #左侧即为对象拥有的属性,在构造函数里定义,不能在外面定义。
        self.age = age
        self.color = "white"

    def meow(self):                  #自定义方法,第一个参数也必须是self
        print(f"{self.name} is meowing.")

    def show_info(self):
        print(f"{self.name} is {self.age} years old and {self.color} in color.")

#创建一个对象
cat1 = Cat("Fluffy", 3)     #创建对象的时候可以不用传入self的值
cat1.meow()                 #调用方法的时候也可以不用传入self的值
cat1.show_info()

#输出结果
Fluffy is meowing.
Fluffy is 3 years old and white in color.
继承
class Mammal:
    # 定义哺乳动物类,初始化时接受一个名字参数
    def __init__(self, name):
        self.name = name
        self.has_tail = True

    def speak(self):
        print(f"{self.name} speaks.")

class Dog(Mammal):
    # 定义狗类,继承自哺乳动物类,初始化时接受一个名字参数
    def __init__(self, name):
        super().__init__(name)

    # 重写说话方法,打印狗叫的信息
    def speak(self):
        print(f"{self.name} barks.")

    # 定义取物方法,打印狗取物的信息
    def fetch(self):
        print(f"{self.name} is fetching.")

class Human(Mammal):
    # 定义人类,继承自哺乳动物类,初始化时接受一个名字参数
    def __init__(self, name):
        super().__init__(name)
        self.has_tail = Flase     #修改父类继承过来的属性

    # 重写说话方法,打印人说话的信息
    def speak(self):
        print(f"{self.name} talks.")

    # 打印人是否有尾巴的信息
    def show_has_tail(self):
        print("Do humen have tails? " + str(self.has_tail))

# 创建一个Dog对象,名字为Rufus
dog = Dog("Rufus")  
dog.speak()  # 调用Dog对象的speak方法
dog.fetch()  # 调用Dog对象的fetch方法

# 创建一个Cat对象,名字为Whiskers
human = Human("Jack")  
human.speak()  # 调用Human对象的speak方法
human.show_has_tail() # 调用human对象的show_has_tail方法

# 输出结果
Rufus barks.
Rufus is fetching.
Jack talks.
Do humen have tails? False
文件路径常识(对于Windows系统来说)(相对路径)
504488b63d28de419b366fe2ce1e869a cdc280f31171d0d35e493da19720e128

在同一目录下的文件,如果想要相互找到彼此的话,可以直接使用文件名,不用前面再加一个“./”

读取文件
  1. 使用函数open()open("【文件路径】", "【模式】", "【encoding=】")

  2. 【文件路径】:可以写绝对路径,也可以写相对路径。

  3. 【模式】:传入一个字符串,常用的有"r"(只读),和"w"(只写)两种模式。若不写,则默认为只读模式。读取模式下,如果程序找不到对应的文件名的话,就会报一个"FileNotFoundError"的错误。

  4. 【encoding】:也是可选的参数,可不写

  5. open()函数会返回一个文件对象,可以后续对它进行读取和写入的操作。

  6. 读取(“r”)

    1. 例如,把文件对象赋值给一个变量ff.read()就可以一次性读取文件里的所有内容,并以字符串返回,print(f.read())即可将其打印出来。

    2. 一个文件对象的read()方法不可以连续调用,因为每次调用都会读取全部的内容出来,并且它会记录上次读取到哪。所以,第一次调用完之后,第二次调用时只能读取到空的字符串了。

    3. 若不想全部读取,那就传入一个数字作为参数,表示一次读取多少字节。

f.read(10)  # 第一次,读1-10字节的文件内容
f.read(10)  # 第二次,读11-20字节的文件内容
f.readline() # 每次读一行的文件内容,根据换行付来判断什么时候本行结束
f.readlines() # 会读取全部内容,并把每行作为列表元素返回,常与for循环结合
f.close()  # 关闭文件,释放资源


# 若容易忘记调用close()方法,可用如下写法:
with open("./data.txt") as f :     # 用with写法
    print(f.read())  # 对文件进行操作   要记得缩进
# 这样,当缩进部分的代码执行完后,资源会自动释放
  1. 写入(“w”)

    1. 写入模式下,如果找不到文件名,会自动在路径下创建一个新的文件。

    2. 若文件是存在的,那么会将文件原有内容清空,然后写入新的内容。若不想原有内容被清空,则应该用“a”模式(附加模式)

    3. 用write()方法来进行写入。如write("aaaa")

  2. 其他模式:

    1. r+”:可读也可写入

    2. “a+”:可读也可追加

    3. 写入和追加是有区别的。追加是在文件末尾进行写入。而写入是看当前指针在哪个位置,最开始指针位置为1,如果之有过read操作,那么指针会后移,这时再调用write()的话,就是从上次read的结束位置开始写入。

异常处理
try:
    user_weight = float(input("Enter your weight in kilograms: "))
    user_height = float(input("Enter your height in meters: "))
    bmi = user_weight / (user_height ** 2)
except ValueError:                     # If user enters non-numeric input
    print("Invalid input. Please enter a number.")
except ZeroDivisionError:               # If user enters height as zero
    print("Invalid input. Height cannot be zero.")
except:                                 # If any other error occurs
    print("An error occurred. Please try again.")
else:                                   # If no error occurs
    print("Your BMI is:", bmi)
finally:                               # This block is always executed
    print("Thank you for using our BMI calculator.") again.")

测试

调用python自带的库:unittest

# 被测试函数所在文件 add_calculator
def add2(a, b):
    return a + b


# 测试文件 test_add_calculator 
import unittest
from add_calculator import add2

class TestAdd2(unittest.TestCase):      # 写一个子类继承于unittest.TestCase
    # 每一个方法就是一个测试用例,命名方式必须以test_开头,只有这样才能被unittest当作测试用例
    def test_positive_with_negative(self):                
        self.assertEqual(add2(100, -100), 0)

    def test_positive_with_positive(self):
        self.assertEqual(add2(100, 100), 200)

    def test_negative_with_negative(self):
        self.assertEqual(add2(-100, -100), -200)

    def test_negative_with_positive(self):
        self.assertEqual(add2(-100, 100), 0)

if __name__ == '__main__':
    unittest.main()

# 输出结果
....               # 通过为 . 不通过为 F
----------------------------------------------------------------------
Ran 4 tests in 0.000s

OK


7240a05a2b5fe75b84d46ab10c93ab95

本质上,assertTrue可以代替这些所有的方法。

但推荐使用更有针对性的方法,因为更有针对性的方法会给出更详细具体的原因。

高阶函数

高阶函数可以把函数作为参数。作为参数的函数是直接把函数名作为参数传入,后面不要带括号和参数,因为如果带括号和参数,传入的就是函数的返回值了,而不是函数本身了。

匿名函数

无需名字,即用即扔。关键字:lambda

def calculate_and_print(num1, num2,  calc_func):  
    print(calc_func(num1,  num2))

calculate_and_print(7, 5, lambda num1, num2: num1 * num2)  # 输出35
# num1、num2为传给匿名函数的参数,匿名函数不需要专门写 return,直接放上要放回的结果即可(即上面冒号后面的 “num1 * num2”

# lambda表达式的语法:lambda 参数1, 参数2, ... : 表达式
# lambda表达式也可以直接作为一个函数来计算,如下:
(lambda num1, num2: num1 * num2)(7, 5)  # 输出35
# 但是一般不推荐这么做,因为lambda表达式的可读性不高。

# 匿名函数也有局限,即它的冒号后面不能有复杂的语句,只能是一行表达式。

本文是学习b站up主“林粒粒呀”《三小时python课程》时记的笔记
课程链接:你觉得自己这辈子都学不会编程?超超超基础Python课程,3小时快速入门 【自学Python教程合集】【3小时快速入门Python】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/790426.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无人机之飞行规划与管理篇

无人机飞行规划与管理是确保无人机安全、高效且符合法规的运行的关键步骤。这一过程包括了对飞行任务的详细安排、航线的设定以及风险的评估和管理。下面简述这一过程的主要环节&#xff1a; 一、飞行目的和任务确定 在规划之初&#xff0c;必须明确无人机的飞行目的&#xf…

HTTPS理解

一个完整的HTTP连接 TCP三次握手接受窗口发送数据关闭连接 接受窗口是用来做什么呢&#xff1f; 它根据自身网络情况设置不同大小的值用来控制对方发送速度&#xff0c;避免对方发送太快&#xff0c;导致网络拥塞。 为什么TCP握手要三次&#xff1f; 1&#xff09;确认双方的…

单片机中有FLASH为啥还需要EEROM?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 一是EEPROM操作简单&…

JDK11中zgc垃圾回收器的探索

背景 垃圾回收器主要做的事情 自动跟踪和管理程序中创建的对象&#xff0c;确定哪些对象仍在使用&#xff0c;哪些对象已经不再使用。回收那些不再使用的对象所占用的内存空间&#xff0c;使得这部分内存可以被重新使用。 1.1 传统垃圾回收器 垃圾回收器简述优缺点应用场景…

typora 两边太宽,设置宽度

步骤&#xff1a; 查看目前使用主题类型 文件 —> 偏好设置 —> 外观 —> 打开主题文件夹 修改对应的主题&#xff1a;max-width

在Linux下使用Docker部署chirpstack

目录 一、前言 二、chirpstack 1、chirpstack是什么 2、chirpstack组件 3、为什么选择Docker部署 三、Linux下部署过程 四、web界面部署过程 一、前言 本篇文章我是在Linux下使用 Docker 进行部署chirpstack&#xff0c;chirpstack采用的是v4 版本&#xff0c;v4 版本 与…

实时数仓搭建

项目概述 本项目针对实时数仓中的dim层&#xff0c;使用flik获取维度数据以及维度表结构把处理过的数据和维度表同步到habse中&#xff0c;同步采用的是雪花模型&#xff0c;遵循三范式&#xff0c;对维度数据进行实时的增删改查。 对维度表进行动态拆分功能。 动态拆分功能…

centos安装数据库同步工具sqoop并导入数据,导出数据,添加定时任务

目录 1.安装jdk 1.1上传jdk安装包到/opt目录下并解压 1.2解压 1.3配置环境变量 2.安装hadoop 2.1.下载hadoop 2.2.解压hadoop 2.3配置环境变量 3.安装sqoop 3.1下载 3.2解压 3.3下载依赖包并复制到指定位置 3.3.1下载commons-lang-2.6-bin.tar.gz 3.3.2将mysql-c…

【postgresql初级使用】用户与角色的关系,搭建数据库安全体系中的分权管理

用户角色管理 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 用户角色管…

Nature Renderer 2022(植被渲染工具插件)

渲染大量详细的植被。 自然渲染器通过替换Unity的默认地形细节和树系统来提高植被渲染的质量。一切都适用于现有数据:使用相同的草地、植被和树木,并保留现有地形。我们只是升级您的渲染器。 Unity验证的解决方案 Nature Renderer受到25000多名开发人员的信任,是Unity验证的…

基于Make的c工程No compilation commands found报错

由于安装gcc时只安装了build-essential&#xff0c;没有将其添加到环境变量中&#xff0c;因此打开Make工程时&#xff0c;CLion会产生如下错误&#xff1a; 要解决这个问题&#xff0c;一个方法是将GCC添加到环境变量中&#xff0c;但是这个方法需要修改至少两个配置文件&…

请编写函数,删除字符串中指定位置下的字符,删除成功函数返回被删字符,否则返回空值

char arr_del(char* p, int pos) {if (pos> strlen(p) || pos<0){printf("这是一个无效下标\n");exit(1);}//到这里就是有效下标char ch p[pos];//把要删除的下标存储for (int i pos; p[i] ! \0; i){p[i] p[i 1];}return ch; } int main() {char arr[100];…

PFC电路中MOS管的选取3

MOS管的驱动波形 一个 MOS管在开通或者关断的时候&#xff0c;必定会经历一个线性区。这个线性区域在 Vgs波形上表现出一个平台&#xff0c;在这个平台的时候电流和电压的变化率是很大的&#xff0c;有很大的 dv/dt&#xff0c;di/dt &#xff0c;由于 di/dt变化非常大&#xf…

Transformer模型解析:走进自然语言处理的新时代

UPDATED&#xff1a;2023 年 1 月 27 日&#xff0c;本文登上 ATA 头条。&#xff08;注&#xff1a;ATA 全称 Alibaba Technology Associate&#xff0c;是阿里集团最大的技术社区&#xff09;UPDATED&#xff1a;2023 年 2 月 2 日&#xff0c;本文在 ATA 获得鲁肃点赞。&…

使用lv虚拟卷扩展磁盘

使用centos演示。 首先创建centos虚拟机。链接&#xff1a;VMWARE安装Centos8,并且使用ssh连接虚拟机-CSDN博客 1. 增加磁盘。 选中要扩容的虚拟机&#xff0c;右键选择设置&#xff0c;然后点击磁盘&#xff0c;选择添加。 这里选择NVM的磁盘。选择这种磁盘是为了保持与之前…

【Java】零散知识--感觉每条都有知识在进入脑子唤起回忆

1&#xff0c;什么是双亲委派 AppClassLoader在加载类时&#xff0c;会向上委派&#xff0c;取查找缓存。 AppClassLoader >>ExtClassLoader >>BootStrapClassLoader 情况一 向上委派时查找到了&#xff0c;直接返回。 情况二 当委派到顶层之后&#xff0c;缓…

python网络爬虫之Urllib

概述 urllib的request模块提供了最基本的构造HTTP请求的方法&#xff0c;使用它可以方便地实现请求的发送并得到响应&#xff0c;同时它还带有处理授权验证&#xff08;authentication&#xff09;、重定向&#xff08;redirection&#xff09;、浏览器Cookies以及其他内容。 …

java算法day11

二叉树的递归遍历二叉树的非递归遍历写法层序遍历 递归怎么写&#xff1f; 按照三要素可以保证写出正确的递归算法&#xff1a; 1.确定递归函数的参数和返回值&#xff1a; 确定哪些参数是递归的过程中需要处理的&#xff0c;那么就在递归函数里加上这个参数&#xff0c; 并且…

LabVIEW机器视觉技术在产品质量检测中有哪些应用实例

LabVIEW的机器视觉技术在产品质量检测中有广泛的应用&#xff0c;通过图像采集、处理和分析&#xff0c;实现对产品缺陷的自动检测、尺寸测量和定位校准&#xff0c;提高生产效率和产品质量。 1. 电子元器件质量检测 在电子制造业中&#xff0c;电子元器件的质量检测是确保产品…

AI绘画杀死了设计师!?恰恰相反……

与大多数人想象的不同&#xff0c;ChatGPT等各种AI工具爆火之后&#xff0c;受到冲击最大的居然是设计师、作家、翻译等具有创造性的工作&#xff0c;以体力劳动为主的蓝领反而最不易被替代。 以城市数据团做过的一项研究为例&#xff0c;他们对中国1639种职业进行了GPT替代风险…