黑马python基础

课程链接:

【黑马程序员python教程,8天python从入门到精通,学python看这套就够了】 https://www.bilibili.com/video/BV1qW4y1a7fU/?p=67&share_source=copy_web&vd_source=7fc4c2ee09393d71ca17ab57a1cdba09

for循环

基础知识点

1.其中的临时变量作用域先定为:循环内

2.for循环的嵌套

# 坚持送2朵花,一共送3天
for i in range(1, 4):
    print(f"今天是第{i}天")
    for j in range(1, 3):
        print(f"第{j}朵玫瑰花")
    print(f"第{i}天结束")

i = 1
j = 1
for i in range(1, 4):
    print("今天是第{}天".format(i))
    for j in range(1, 3):
        print("第{}朵玫瑰花".format(j))
    print("第{}天结束".format(i))

# format的两种用法:
# 第一种要在字符串前面加f,字符串内指明要格式化的值
# 第二种要在字符串后面加format,在format中指明格式化的值,但是字符串中只需要用大括号标明位置。

用while循环写这个代码段:

i = 1
while i <= 3:
    print("今天是第{}天".format(i))
    j = 1
    while j <= 2:
        print("第{}朵玫瑰花".format(j))
        j += 1
    i += 1

实例:制作九九乘法表

for i in range(1, 10):

    for j in range(1, i+1):
        num = j * i
        print(f'{j}*{i}={num}\t', end='')  # \t是水平制表符end=""是避免换行
        # 也可以
        # print(f'{j} * {i} = { j * i }\t', end='')
    print()  # 外层循环可以通过print输出一个回车符,从而实现换行

ps.水平制表符

http://t.csdn.cn/RPcEC

http://t.csdn.cn/XHYIZ

break和continue

 

实战:发工资

# 自写版
import random
a = 10000
for i in range(1, 21):
    num = random.randint(1, 10)  #每一次循环形成一个新的随机数
    if num >= 5:
        if a > 0:
            a = a - 1000
            print(f"向员工{i}发放工资1000元,绩效分{num},账户余额此时剩余{a}元")
        else: 
            print("工资发完了,下个月再领取")
            break  ##终止循环
    else:
        print(f"员工{i},绩效分{num},不发工资,下一位")

# 标准版
money = 10000
for i in range(1, 21):
    import random
    score = random.randint(1, 10)

    if score < 5:
        print(f"员工{i},绩效分{score},不发工资,下一位")
        continue  # 跳过发放

    if money >= 1000:
        money -= 1000
        print(f"向员工{i}发放工资1000元,绩效分{score},账户余额此时剩余{money}元")

    else:
        print("工资发完了,下个月再领取")
        break

 注意continue的用法,和a -= 1000

函数

语法

def 函数名(参数)
    函数段
return

tip:在自定义函数时,参数和返回值不需要都可以省略

函数中的none值

在if判断中,none等同于false

一般用于在函数中主动返回none,配合if做相关处理

def check_age(age):
    if age > 18:
        return "success"
    else:
        return None

    
result = check_age(19)
if not result:           #  判断result是真值还是假
    print("未成年")
if result:
    print("成年")
    

函数说明文档(文档字符串)

函数作用域

在函数内部定义的变量不能在全局范围使用,但在函数外部的变量可以在函数内部使用

global关键字

 想要在函数内部修改全局变量:

num = 100

def change_num():
    global num
    num = pow(num, 2)
    print(num)
    
change_num()

ATM实例:

money = 5000000
ask_name = input("what's your name?\n")
print(ask_name)


def check_balance(show_header):  # 重点,运用真值假值来判断第一行check balance标题是否需要输出。如果调用函数时形参为True,输出;形参为None,不输出
    global money
    if show_header:
        print("---------------check balance-----------------")
    print(f"hi,{ask_name},your balance is {money}.")


def deposit_money():
    global money
    check_balance(None)
    deposit = int(input("input your deposit account:"))
    money += deposit
    print(f"hi,{ask_name},your taking out of {deposit} is successful\n"
          f"your balance is {money}.")


def take_out_money():
    global money
    check_balance(None)
    takeout = int(input("input your takeout account:"))
    if takeout < money:
        money -= takeout
        print(f"hi,{ask_name},your taking out of {takeout} is successful\n"
              f"your balance is {money}.")
    else:
        print("the balance is less than the taking out account, please input again.")


def main_manu():
    sentence_a = input(f"--------main manu------------\n"
                       f"hi,{ask_name},welcome to the ATM,please choose:\n"
                       f"check balance\t\t\t(input 1)\n"
                       f"deposit_money\t\t\t(input 2)\n"
                       f"take_out_money\t\t\t(input 3)\n"
                       f"login out\t\t\t\t(input 4)\n"
                       f"-----------------------------\n")
    return sentence_a  # 将输入的值返回到全局中


while True:
    keyboard_input = main_manu()  # 调用Main_manu函数,并将返回的函数值main()赋给一个新变量,用sentence_a没用,因为好像局部变量没法在全局调用
    if keyboard_input == "1":  # input函数强制返回字符串类型,所以必须用==和双引号
        check_balance(True)
        continue  # 用continue返回循环
    elif keyboard_input == "2":
        deposit_money()
        continue
    elif keyboard_input == "3":
        take_out_money()
        continue
    else:
        print("you have login out.")
        break

数据容器

列表[] list 

列表中存储的数据类型可以是不同的,布尔值、数值、字符串都可以

列表嵌套和索引

my_list = [[1, 2, 3], [4, 5, 6]]

print(my_list[0][0])  # 取my_list列表中的第一个列表的第一位

列表方法

方法和函数的区别:

# 修改列表内的元素
my_list[0] = "修改值"

# 插入值
my_list.insert(1, "插入值")

# 在列表末尾追加值
my_list.append("追加值")

# 追加多个值,输出:['修改值', '插入值', [4, 5, 6], '追加值', 7, 8, 9]
my_list2 = [7, 8, 9]
my_list.extend(my_list2)
print(my_list)

my_list = [1, 2, 3, 4, 5, 6]
# 删除值的两种方法
del my_list[2]
my_list.pop(2)
print(my_list)

my_list = [1, 2, 3, 4, 5, 6, 1]
# 从前向后寻找并且删除第一个元素
my_list.remove(1)

# 统计列表中某元素数量
print(my_list.count(1))

# 统计全部元素数量
print(len(my_list))

ps. index查找元素索引

mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(mylist.index(1))

另一种方法:enumerate函数查找元素索引值

programming_languages = ["JavaScript","Python","Java","Python","C++","Python"]

python_indices  = [index for (index, item) in enumerate(programming_languages) if item == "Python"]

print(python_indices)

#[1, 3, 5]

补充:索引值的应用 

列表使用中的循环(p67)

mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list = []
for element in mylist:
    if element % 2 == 0:
        new_list.append(element)
print(new_list)


mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list = []
index = 0
while index < len(mylist):
    a = mylist[index]
    if mylist[index] % 2 == 0:
        new_list.append(a)
    index += 1
print(new_list)

元组() tuple

元组的元素类型不受限

如果要写单个元素的元组,一定要在后面加括号

my_turple = (1,)
print(type(my_turple))

元组的相关操作

 元组与列表的不同

元组与列表有两个不同点。

第一个不同点是元组的声明使用小括号,而列表使用方括号,当声明只有一个元素的元组时,需要在这个元素的后面添加英文逗号;

第二个不同点是元组声明和赋值后,不能像列表一样添加(append)、删除(del)和修改元素,也就是说元组在程序运行过程中不能被修改。

用于列表的排序、替换、添加等方法也不适用于元组,适用于元组的主要运算有元组的合并、遍历、求元组的最大值和最小值等操作方法。

        元组中的字符串、int数字、或者有集合时,他们本身是不可被修改的,所有不支持对他们做改变,但是列表和字典本身是可修改的,所以我们能对元组中的列表和字典做操作。

字符串 string

字符串是无法修改的。

字符串操作

 split是将字符串从以函数参数给出的字符串参数为分界线,分割成多个列表元素,最后输出一个新的列表

字符串和列表的相互转换

# 字符串转列表
# 1
str1 = "hello python"
list1 = str1.split(" ")
print(list1)
# 2
list2 = list(str1)
print(list2)

# 列表转字符串
result = "".join(list2)  # 注意函数顺序

序列切片

result = my_list[起始,结束,步长]

只要没放起始,没放结束,就是从头取到尾;有结尾的时候不取结尾

序列切片实例

# 切片+倒叙
str1 = ( "万过薪月,员序程马黑来,nohtyP学" )
result1 = str1[::-1][9:14]
print(result1)
result2 = str1[5:10][::-1]  # 取数可以取到写出来的结尾。切片不能切到写出来的结尾
print(result2)

# 分割+取数+倒序
result3 = str1.split(",")[1].replace("来", "")[::-1]
print(result3)

集合{} set

为什么要使用集合

列表可修改、支持重复元素且有序

元组、字符串不可修改,支持重复元素且有序

他们都可重复,而集合可以对内容进行去重处理

集合的基本操作

my_set = {1, 2, 3, 40, "remove1"}
# 添加元素
my_set.add("add1")
print(my_set)
# 移除元素
try2 = my_set.remove("remove1")
print(my_set)
# 随机取出一个元素
element = my_set.pop()
print(f"随即取出一个元素为{element},,此时集合为:{my_set}")
# 取两个集合的差集
set1 = {1, 2}
set2 = {2, 3}
set3 = set1.difference(set2)
print(set3)
# 删除集合1中和集合2相同的值
set1 = {1, 2}
set2 = {2, 3}
set1.difference_update(set2)
print(set1)
# 合并集合
set1 = {1, 2}
set2 = {2, 3}
set3 = set1.union(set2)
print(set3)

集合遍历

集合没有下标索引,所以不能进行while循环,但可以进行for循环

字典{} 

pythonz中的字典有序,按照输入顺序,但是其本身没有下标索引

字典的特点

字典的基本操作

 字典的更新与赋值

http://t.csdn.cn/YXvKe

数据容器的分类

 数据容器的通用转换

数据容器中的元素排序

# 正向排序

sorted(my_xulie)

# 反向排序

sorted(my_xulie ,reverse = True)

函数中的参数

函数的逻辑传递(函数作为参数)

通过将函数作为参数,传入计算逻辑

 

Lambda匿名函数

 定义无名称的匿名函数,只能临时使用一次

lambda 传入参数:函数体(一行代码)

 python的文件操作

1.文件的读取和写入

w和a模式中,文件不存在都会创建新文件:如果文件存在,w会清空原有内容,a会追加在原有内容之后

 异常、模块与包

捕获异常

# 捕获所有异常
try:
    f = open("D:/abc.txt", "r", encoding="UTF-8")
except:
    print("出现异常,因为文件不存在,我将改用w模式")
    f = open("D:/abc.txt", "w", encoding="UTF-8")
else:  # 如果没异常就执行
finally: # 无论有没有出现异常都要执行

# 捕获指定异常
try:
    print(name)
except (NameError, xxx, xxx) as e:
    print("出现了变量未定义的异常")

异常的传递性

捕获异常时,不需要回溯到顶端错误的那处代码,在函数调用的最末端try catch也是可以的

Python模块

__main__变量

避免导入时输出模块里的输出值

def test(a, b):
    print(a + b)

if __name__ == '__main__':
    test(1, 2)

__all__变量

只调用模块里的某些自定义函数

在这个例子中,如果有文件用import *调用该模块,只能使用testa;但如果手动导入import testb,则可以使用

__all__ = ['testa']

def testa(a, b):
    print(a + b)

def testb(a, b):
    print(a - b)

Python包

__init__.py文件

创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是python的包

__all__变量的作用

在init文件中输入,从而控制import *能够导入的内容

安装第三方包

pip install + 包名

 python数据可视化

json数据到python数据转化

# 将字典转换为json字符串
d = {"name":"zhoujielun"}
json_str = json.dumps(d, ensure_ascii = False)

# 将json字符串转换为python数据类型
a = '[{"name":"zhoujielun","age":11}]'
py_str = json.loads(a)

简单绘图

全局配置选项

Line.set_global_opts()
from pyecharts.charts import Line
line = Line()
line.add_xaxis(["china", "america", "uk"])
line.add_yaxis("gdp", [30,10,20])
line.render()

 对象和类

初识对象

# 演示对象
class Student:
    name = None
    age = None
    nationality = None


stu1 = Student()
stu1.name = "kathy"
stu1.nationality = "china"
stu1.age = 18

print(stu1.name + "%.f"%stu1.age + stu1.nationality)

注意整数和字符串的转换,无法同时输出字符串和整数

类的成员方法

类由两部分组成:

        类的属性:成员变量

        类的行为:成员方法(定义在类内部的函数称为方法)

self在传参时不需要理会,但是在方法内部,想要访问类的成员变量,必须用到self

 

 

class Student:
    name = None

    def sayhi(self,msg):
        print(f"大家好,我是{self.name},{msg}")


stu1 = Student()
stu1.name = "周杰伦"
stu1.sayhi("哎呦不错哦")  # 不需要再打印一次,因为执行函数时已经打印了

tips.

cmd中退出python:quit() 或者 ctrl + z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值