Python--快速入门四

news2024/11/23 20:50:55

Python--快速入门四

1.Python函数

1.在括号中放入函数的参数。

2.可以通过return在函数作用域外获取函数作用域内的值。(默认的return值为None)

代码展示:BMI计算函数

def calculate_BMI(fuc_height,fuc_weight):
    fuc_BMI = fuc_weight/(fuc_height**2)
    return fuc_BMI


# input输入的值默认为字符串
height = float(input("请输入您的身高(/m):"))
weight = float(input("请输入您的体重(/kg):"))

# 调用函数
BMI = calculate_BMI(height,weight)

if BMI <= 18.5:
    print("您的BMI为:" + str(BMI) + ", 偏廋")
elif 18.5 < BMI <= 25:
    print("您的BMI为:" + str(BMI) + ", 正常")
elif 25 < BMI <= 30:
    print("您的BMI为:" + str(BMI) + ", 偏胖")
elif BMI > 30:
    print("您的BMI为:" + str(BMI) + ", 肥胖")


2.Python引入模块

1.import...语句引入模块:在使用模块中的函数时,需要 模块名.函数名( )进行调用。

2.from...import ...语句引入模块:指明模块中引入的函数,调用时可以直接使用,不需要再使用模块名进行调用。

3.form...import*语句引入模块:引入模块中的所有函数,调用时可以直接使用(一般不建议使用,引入不同的模块时可能会造成命名冲突)

4.若要安装外部模块,则需要先下载,再于终端输入:pip install 模块名(或者可以找到外部模块的相关文档,获取相应的安装方法),此后便可通过import语句引入外部模块了。

eg.安装akshare库

1).在下述网站上找到akshare库的下载连接和文档PyPI · The Python Package Indexicon-default.png?t=N7T8https://pypi.org/

2). 

 在pycharm的终端完成akshare库的安装

3).通过import引入akshare库,在文档中查找该库的使用方法并进行使用测试

import akshare

print(akshare.get_cffex_daily())

3.Python创建类

Python定义类名时习惯使用Pascal命名风格:通过首字母的大写来分隔单词

构造函数:__init__(self, ...)

class CuteCat:
    def __init__(self,cat_name)
       self.name = cat_name


# 创建类对象时,会自动调用相应的构造函数对类对象的属性赋值
cat1 = CuteCat("AFish")
  

构造函数的第一个参数默认为self(该参数不需要手动传入),代表对象本身。         

定义方法:

class CuteCat:
    def speak(self,...):
        #方法的具体实现

类方法的第一个参数默认也为self,可以调用类对象的属性,方法等。

代码实现:学生类

class StudentInfo:
    def __init__(self, stu_name, stu_stn, stu_ch_grade, stu_math_grade, stu_eng_grade):
        # 学生类属性的定义:
        self.name = stu_name
        self.stn = stu_stn
        self.ch_grade = stu_ch_grade
        self.math_grade = stu_math_grade
        self.eng_grade = stu_eng_grade

    # 打印单科成绩函数:
    def print_single_grade(self, sub):
        if sub == "math":
            print(f"stu_name: {self.name} stu_stn: {self.stn} -- math_grade: {self.math_grade}")
        elif sub == "chinese":
            print(f"stu_name: {self.name} stu_stn: {self.stn} -- chinese_grade: {self.ch_grade}")
        elif sub == "english":
            print(f"stu_name: {self.name} stu_stn: {self.stn} -- english_grade: {self.eng_grade}")

    # 打印所有成绩函数:
    def print_all_grade(self):
        print(
            f"stu_name: {self.name} stu_stn: {self.stn} -- math_grade: {self.math_grade},chinese_grade: {self.ch_grade},english_grade:{self.eng_grade} ")


# 类对象的创建以及构造函数的调用
S1 = StudentInfo("AFish", "2021214455", "95", "88", "92")

# print_single_grade函数测试
subject = input("请输入您想查询成绩的科目(math/chinese/english):")
S1.print_single_grade(subject)

# print_all_grade函数测试
print("所有成绩如下:")
S1.print_all_grade()

4.Python类继承

A is B -- A则可以是B的子类

子类会继承父类的属性和方法(优先调用子类的方法,如果子类没有该方法再向上调用父类对应的方法)

# 类继承
class DerivedClass(BasicClass):

super()方法:该方法会返回当前类的父类

class DerivedClass(BasicClass):
    super().__init__( )

上述代码会直接访问父类的构造函数 

代码实现:人力系统

# 父类:
class Employee:
    def __init__(self, name, id):
        self.name = name
        self.id = id

    def print_info(self):
        print(f"name:{self.name},id:{self.id}")


# 全职员工子类:
class FullTimeEmployee(Employee):
    def __init__(self, name, id, monthly_salary):
        # 在此次需要调用基类的构造函数完成基类属性的定义,再完成派生类属性的定义
        super().__init__(name, id)
        self.monthly_salary = monthly_salary

    def calculate_monthly_pay(self):
        print(f"monthly_pay:{self.monthly_salary}")


# 兼职员工类:
class PartTimeEmployee(Employee):
    def __init__(self, name, id, daily_salary, work_days):
        super().__init__(name, id)
        self.daily_salary = daily_salary
        self.work_days = work_days

    def calculate_monthly_pay(self):
        print(f"monthly_pay:{self.daily_salary * self.work_days}")


F1 = FullTimeEmployee("AFish", "1122", 8000)
F1.print_info()
F1.calculate_monthly_pay()

P1 = PartTimeEmployee("GodFishhh","3344",200,22)
P1.print_info()
P1.calculate_monthly_pay()

5.Python文件操作

打开文件:open("文件的相对路径/绝对路径","r/w", encoding = "utf-8") 

第二个参数是模式,有r--read只读模式和w--write写入模式,默认情况下为只读模式。

第三个参数为编码方式:其中常用 "uft-8"

UTF-8 是 Unicode 的编码系统。它可以将任何 Unicode 字符转换为匹配的唯一二进制字符串,还可以将二进制字符串转换回 Unicode字符。这就是"UTF"或"Unicode Transformation Format"的含义。

Unicode 是国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。

# 相对路径
open("./data.txt","r",encoding = "utf-8") 
# 绝对路径
open("/usr/demo/data.txt","w",encoding = "utf-8")

5.1.读文件操作

read方法: 

第一次read会读取到文件的末尾,程序会记录当前读取到的位置,所以第二次读取时会读取空字符串并打印。

如果文件中的字符串数量过多,读出来的内容过多时可以给read(n)方法传一个数字,表示会读到1-n个字节的文件内容。

print(f.read(10)) # 读1-10个字节的文件内容
print(f.read(10)) # 读11-20个字节的文件内容

readline方法: 

readline方法一般与while循环结合使用:读完文件内容后,会返回空字符串

readlines方法:

readlines方法一般与for循环结合使用: lines保存的是文件中以行分隔的字符串列表

关闭文件的两种方法:

第一种方法通过close()函数对文件手动关闭。

第二种方法则是当缩进中对文件的操作结束后,自动进行文件的关闭。 

代码展示:

# f = open("./data.txt", "r",encoding="utf-8")
# content = f.read()
# print(content)
# f.close()

# 系统自动关闭close()
with open("./data.txt", "r",encoding='utf-8') as f:
    # read方法
    # content = f.read()
    # print(content)

    # readline方法
    # 读取两行内容
    # print(f.readline())
    # print(f.readline())

    # readlines方法,结合for循环使用
    lines = f.readlines()
    for line in lines:
        print(line)

在PyCharm创建.txt文件,此时相对路径就是 ./data.txt(因为.py文件和.txt文件处于同一个文件夹,"."就代表当前文件夹,再加上分隔符" / "和文件名data.txt即可组成相对路径);也可以直接获得文件的绝对路径。

若open的第三个参数设置为encoding = " utf-8 "无法运行,有两种方法解决:

1.在代码开头加个默认:

# coding:utf-8

2.找到当前python文件,另存字符编码为"UTF-8"

 

5.2.写文件操作

写文件也需要通过open方法打开文件,此时第二个参数为"w"

注意点:

1.此时若地址所指向的地方没有该文件,则系统会自动创建一个文件并继续进行写操作。

2.如果地址所指向的地方存在文件,则系统会先把文件中的内容清空后再继续写操作。(可以将第二个参数换为"a"--追加模式,则不会清空文件中原有的内容,并在内容后完成写操作)

3.此时对文件不支持读操作。

open第二参数参考博客:

深入理解Python读写模式:‘r‘,‘w‘,‘a‘,‘r+‘,‘w+‘,‘a+‘_r模式python-CSDN博客

通过方法write()来进行对文件的写操作

f.write()

代码实现:

# 1.对一个不存在的文件进行写操作
with open("./poem.txt", "w", encoding="utf-8") as f:
    f.write("花间一壶酒,独酌无相亲。\n举杯邀明月,对影成三人。\n月既不解饮,影徒随我身。\n暂伴月将影,行乐须及春。\n")



# 2.对一个存在的文件进行写操作
with open("./poem.txt", "a", encoding="utf-8") as f:
    f.write("我歌月徘徊,我舞影零乱。\n醒时相交欢,醉后各分散。\n永结无情游,相期邈云汉。\n")

6.Python异常处理

代码测试:

# Python异常捕捉

# FileNotFoundError LookupError

try:
    with open("./test.txt", "r", encoding="uft-8") as f:
        print("test")
except FileNotFoundError:
    print("未找到该文件")
except LookupError:
    print("没有找到此编码")
else:
    print(f.read())
finally:
    print("程序运行结束")

print("--------------------")

try:
    with open("./data.txt", "r", encoding="uft-8") as f:
        print("test")
except FileNotFoundError:
    print("未找到该文件")
except LookupError:
    print("没有找到此编码")
else:
    print(f.read())
finally:
    print("程序运行结束")

print("--------------------")

try:
    with open("./data.txt", "r", encoding="utf-8") as f:
        print(f.read())
except FileNotFoundError:
    print("未找到该文件")
except LookupError:
    print("没有找到此编码")
else:
    print("文件可读")
finally:
    print("程序运行结束")

 

7.Python测试

通过Python自带的测试库unitest进行测试:

1.测试代码一般和实现代码分开放在不同的文件中。

2.

测试代码所在的文件需要引入测试库:

import unittest

还需要引入想要测试的功能:

测试文件和实现文件在同一个文件夹下:

from 文件名 import 函数名/类名

3.创建的测试类需要继承于uniitest库中的TestCase类,可以使用TestCase的测试方法 

4.测试用例的命名必须以 test_开头:unittest库会自动搜索以test_开头的方法,并只把test_开头的方法当作是测试用例。

5. 写好测试用例后,在终端输入:python -m unittest,unittest就会调用所有集成了该库里TestCase类的子类,运行它们所有以test_开头的方法,并展示测试结果。

eg:

# Hello_Python.py

def calculate_add(x, y):
    return x+y
# test.py

import unittest
from Hello_Python import calculate_add


class CalculateTest(unittest.TestCase):
    def test_Add(self):
        self.assertEqual(calculate_add(1,2),3)

终端输入后结果: 

其中横线上方的“ · ”代表通过了一个测试用例 

" F " 则代表有一个测试用例未通过 

unittest.TestCase类中的常见测试方法:

 

TestCase类中的setUp方法:

在运行各个test_测试用例之前,都会先调用setUp方法,可以在setUp方法中先创建好测试对象,再于各个测试用例中调用该对象的属性,减少代码的重复。

代码测试:

# Hello_Python.py

class ShoppingList:
    def __init__(self, shopping_list):
        self.shopping_list = shopping_list  # shopping_list应当是一个字典

    def get_item_count(self):
        return len(self.shopping_list)

    def get_total_price(self):
        total_price = 0
        for price in self.shopping_list.values():
            total_price += price
        return total_price

# test.py

import unittest
from Hello_Python import ShoppingList


class TestShoppingList(unittest.TestCase):
    # setUp方法创建一个测试对象方面后续测试(test_测试用例调用前都会先调用setUp函数)
    def setUp(self):
        shop_dict = {"键盘": 700, "鼠标": 500, "显示器": 1500}
        # 即为该测试类创建一个属性为shopping_list(创建方法类似与构造函数)
        self.shopping_list = ShoppingList(shop_dict)

    def test_get_item_count(self):
        self.assertEqual(self.shopping_list.get_item_count(), 3)

    def test_get_total_price(self):
        self.assertEqual(self.shopping_list.get_total_price(),2700)



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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

转载:YOLOv8改进全新Inner-IoU损失函数:扩展到其他SIoU、CIoU等主流损失函数,带辅助边界框的损失

0、摘要 随着检测器的快速发展&#xff0c;边界框回归&#xff08;BBR&#xff09;损失函数不断进行更新和优化。然而&#xff0c;现有的 IoU 基于 BBR 仍然集中在通过添加新损失项来加速收敛&#xff0c;忽略了 IoU 损失项本身的局限性。尽管从理论上讲&#xff0c;IoU 损失可…

Linux-查询目录下包含的目录数或文件数

1. 前置 1&#xff09;ls Linux最常用的命令之一&#xff0c;列出该目录下的包含内容。 -l&#xff1a;use a long listing format-以列表的形式展现 -R&#xff1a;list subdirectories recursively-递归列出子目录 2&#xff09;| 管道符 将上一条命令的输出&#xff…

BUUCTF 被劫持的神秘礼物 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 某天小明收到了一件很特别的礼物&#xff0c;有奇怪的后缀&#xff0c;奇怪的名字和格式。小明找到了知心姐姐度娘&#xff0c;度娘好像知道这是啥&#xff0c;但是度娘也不知道里面是啥。。。你帮帮小明&#xff1…

网络类型及数据链路层的协议

网络类型 --- 根据数据链路层使用的协议来进行划分的。 MA网络 --- 多点接入网络 BMA --- 广播型多点接入网络---以太网协议 NBMA --- 非广播型多点接入网络 以太网协议 --- 需要使用mac地址对不同的主机设备进行区分和标识 --- 以太网之所以需要使用mac地址进行数据寻址&…

PVE Win平台虚拟机下如何安装恢复自定义备份Win系统镜像ISO文件(已成功实现)

环境: Virtual Environment 7.3-3 Win s2019 UltraISO9.7 USM6.0 NTLite_v2.1.1.7917 问题描述: PVE Win平台虚拟机下如何安装恢复自定义备份Win系统镜像ISO文件 本次目标 主要是对虚拟机里面Win系统备份做成可安装ISO文件恢复至别的虚拟机或者实体机上 解决方案: …

.Net8 Blazor 尝鲜

全栈 Web UI 随着 .NET 8 的发布&#xff0c;Blazor 已成为全堆栈 Web UI 框架&#xff0c;可用于开发在组件或页面级别呈现内容的应用&#xff0c;其中包含&#xff1a; 用于生成静态 HTML 的静态服务器呈现。使用 Blazor Server 托管模型的交互式服务器呈现。使用 Blazor W…

『C++成长记』C++入门——内联函数

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、内联函数 &#x1f4d2;1.1内联函数的概念 &#x1f4d2;1.2内联函数的特征 …

在IDEA中的DeBug调试技巧

一、条件断点 循环中经常用到这个技巧&#xff0c;例如&#xff1a;遍历1个List的过程中&#xff0c;想让断点停在某个特定值。 参考上图&#xff0c;在断点的位置&#xff0c;右击断点旁边的红点&#xff0c;会出来1个界面&#xff0c;在Condition这里填写断点条件即可&#…

Swift--字符、字符串与集合类型

系列文章目录 第一章&#xff1a;量值与基本数据类型 第二章&#xff1a;字符、字符串与集合类型 文章目录 系列文章目录字符串组合 三种集合数组集合字典类型 Swift是一种弱化指针的语言&#xff0c;它提供了String类型和Character类型来描述字符串与字符 //构造一个字符串 …

OpenHarmony应用开发入门教程(一、开篇)

前言 华为正式宣布2024年发布的华为鸿蒙OS Next版将不再兼容安卓系统。这一重大改变&#xff0c;预示着华为鸿蒙OS即将进入一个全新的阶段。 都说科技无国界&#xff0c;这是骗人的鬼话。谷歌的安卓12.0系统早已发布&#xff0c;但是自从受到美影响&#xff0c;谷歌就拒绝再向…

VS Code如何使用服务器的Python开发环境

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Linux常用命令——bzdiff命令

在线Linux命令查询工具 bzdiff 直接比较两个.bz2压缩包中文件的不同 补充说明 bzdiff命令用于直接比较两个“.bz2”压缩包中文件的不同&#xff0c;省去了解压缩后再调用diff命令的过程。 语法 bzdiff(参数)参数 文件1&#xff1a;指定要比较的第一个.bz2压缩包&#xf…

wpf devexpress显示总结

这个教程示范如何显示总结对于列分组和单个数据行。这个教程基于前一篇 GridControl 可以计算如下总结&#xff1a; 这个数据列&#xff08;Count&#xff09; 这个最大和最小值&#xff08;Max和Min&#xff09;。 总结和平均值&#xff08;Sum和平均值&#xff09; 自定义…

我们常说的网络资产,具体是如何定义的?

文章目录 什么叫网络资产&#xff1f;官方定义的网络资产网络资产数字化定义推荐阅读 什么叫网络资产&#xff1f; 通过百度查询搜索什么叫网络资产&#xff1f;大体上都将网络资产归类为计算机网络中的各类设备。 基本上会定义网络传输通信架构中用到的主机、网络设备、防火…

van-dialog弹窗异步关闭-校验表单

van-dialog弹窗异步关闭 有时候我们需要通过弹窗去处理表单数据&#xff0c;在原生微信小程序配合vant组件中有多种方式实现&#xff0c;其中UI美观度最高的就是通过van-dialog嵌套表单实现。 通常表单涉及到是否必填&#xff0c;在van-dialog的确认事件中直接return是无法阻止…

【差旅游记】启程-新疆哈密(2)

哈喽&#xff0c;大家好&#xff0c;我是雷工。 最近需要出差&#xff0c;11月02号第一次去新疆特意记录下去新疆的过程。 01 又过北京西站 本来订的是途径成都中转的路线&#xff0c;结果飞机改点&#xff0c;中转时间太短导致赶不上下班飞机&#xff0c;只好改道北京。 又到…

通信原理板块——利用香农公式对连续信道的信道容量计算

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 利用香农公式对连续信道的信道容量…

通过maven命令手动上传jar私服Nexus

Nexus3在界面上传组件时报&#xff1a; Ext.JSON.decode(): Youre trying to decode an invalid JSON String: 查找了很多资料&#xff0c;都没有解决。有哪位大佬知道的评论告诉一下&#xff0c;万分感谢。 于是换成maven命令上传&#xff1a; mvn deploy:deploy-file -Dgr…

基于springboot实现一起来约苗管理系统项目【项目源码】计算机毕业设计

基于springboot实现一起来约苗管理系统演示 Java技术 Java是由Sun公司推出的一门跨平台的面向对象的程序设计语言。因为Java 技术具有卓越的通用性、高效性、健壮的安全性和平台移植性的特点&#xff0c;而且Java是开源的&#xff0c;拥有全世界最大的开发者专业社群&#xff…