python 随笔(windows)(格式很乱,不会排版)

  1. 变量和简单数据类型

       1.变量命名:字母、数字、下划线组成,不能数字开头,不能加空格,不能用python关键字、函数名作为变量名。

       2.应用,将值ada赋予first_name:

       first_name="ada"

       3.字符串,区分大小写

       print(first_name.title())#首字母大写

       print(first_name.upper))#全部大写

       print(first_name.lower())#全部小写

       4.f字符串,设置格式,通过把花括号内的变量替换为其值来设置字符串的格式。用法f“{}”

       first_name="ada"

       last_name="lovelace"

       Full_name=f"{first_name} {last_name}"

       print(f"{Full_name.title()}") # Ada Lovelace 将Full_name.title()的值赋予Full_name.title()

       print("{Full_name.title()}")   # {Full_name.title()}  python将“”中的变量当作字符输出

       print({Full_name.title()})             #{'Ada Lovelace'}

       print(Full_name.title())         #Ada Lovelace 输出的是变量Full_name.title()的值

       print(first_name + last_name)  #adaLovelace  + 用于连接两个字符串,+运算符不能直接用于列表、元组或其他非数值和非字符串类型的数据结构。

        5.添加/删除空白

       添加空白:1.制表符:\t ;2.换行符:\n。

  •        删除空白:删除末尾的空白:.rstrip();删除开头的空白:.lstrip();删除两端的空白:.strip();

        6.计算

       整数:支持次序计算;乘方**;加减乘除+-*/;

       浮点数:4/2=2.0;

       下划线:python会忽略数中的下划线;

       同时赋值:x,y,z=0,0,0

       常量:一般定义常量为大写字母

bicycle=['terk','love','kk']

         print(bicycle)

         too_expensive='kk'

         bicycle.remove(too_expensive)

         print(bicycle)

         print(f"\nA {too_expensive.title()} is too expensive to me.")

         ['terk', 'love', 'kk']

         ['terk', 'love']

         A Kk is too expensive to me.

       注释:#笑死我了

列表简介

       定义:一系列按顺序排列的元素,用[]表示列表,逗号分割,如:bicycle = [‘giant’,‘terk’,‘evil’]

       访问列表:print(bicycle[0]),索引从零开始,-1访问最后一个元素。

       修改元素:bicycle[0]=‘duci’

       末尾添加元素:bicycle.append(‘duci’)

       插入元素:insert(0,’duci’)

       删除元素:del bicycle[0]    删除字典:del bicyce[‘ ’]

       术语弹出:first_bicycle=bicycle.pop(0) #将序列bicycle中的第一个元素弹出赋予first_bicycle

       根据值删除元素:bicycle.remove(‘giant’)

        组织列表

       字母顺序永久排列:bicycle.sort()

       列表临时排列:print(sorted(bicycle)) #只会在此次输出时临时排列;       print(sorted(bicycle,reverse=True))  #排序会被永久保存在bicycle列表中

       倒着打印列表:biclcle.reverse()

       确定列表长度:len(bicycle),sublime中不可用。

        操作列表

bicycle = 'loke'
for bicycles in bicycle:
    print(bicycles)

bicycles = ['terk', 'love', 'diao']
for bicycle in bicycles:
    print(bicycle)

       遍历列表,bicycle为字符串,输出为单个字符,右侧输出为’l’,’o’,’k’,’e’。若为列表,则输出为列表中的每个元素。

       深入循环(两个print都缩进了,所以会导致两个print都进入循环,循环才需要缩进)

       for bicycles in bicycle:

              print(bicycles)

              print(f"I love {bicycles.title()}")

       创建数值列表

       for dsdsdsd in range(1,8): #指定从1开始,到8结束,但不包括8

              print(f"\n {dsdsdsd}")

       range()的用法:range(8)  # 0~7

       numbers=list(range(1,6))

       print(numbers) #[1, 2, 3, 4, 5]

       even_numbers=list(range(2,11,2)) # 2开始数,不断加2,至11停止,输出110偶数

       squares=[]

       for value in range(1,11):

              square=value**2

              squares.append(square)

       print(squares)

       上述代码有些许繁琐,可不用中间值square,也可squares=[value**2 for value in range(1,11)]

       列表名[表达式 +for循环] for循环无冒号)

       对数字进行统计处理

       找出数列中的最大值max(数列)、最小值min(数列)、总和sum(数列)。

       foolll=[llll for llll in range(1,1_000_001)] #llll为变量,foolll为数列

       print(sum(foolll))

        处理列表部分元素切片:

              print(foolll[0:3]) #表示从零开始,到3结束,但不包括3

              print(foolll[:3])  #表示从零开始

              print(foolll[2:]) #表示从第三个元素到末尾

              print(foolll[-3:]) #表示倒数三个元素

       遍历切片:for player in foolll[:3] print(bicycle)

       复制列表:player_1=players[0:3] #

       player_1=players  #表示列表player_1与列表player相关,两个列表指向同一个列表

    1. deon=(20,50)

             for deons in deon:

                    print(deons)

             deon=(100,65)

             for deons in deon:

                    print(deons)

      元组

       定义:不可更改的列表成为元组

       与列表区别:player=(1,2,3) #用小括号表示,逗号隔开

       虽然不可修改元组变量,但对元组重新赋值是可以的。

    1. 设置代码格式

       1.每一级缩进为四个空格

       2.每一行不超过80字符,import this

  1. age=20;age2=30

    if age == 20 and age2!=20:

     # and or的使用

           print("I love sunchen")

    else:

           print("sunchen love me")

    users=['a','b','c']

           user='d'

           if user not in users :

                  print ("I also love Sunchen")

    car = 'subaru'
    print("Is car == 'subarru'? I predict True. ")
    print(car == 'subaru')
    print(car == 'audi')
    age = input("how old are you? ")
    age = int(age)
    print(age >= 18)

    if语句 (字符包括数字)

       if 变量 == ‘字符’#相等==   不相等!= ; 判断是否相等:变量==’字符’,返回True or False

       car.lower()==’audi’ #忽略大小写

       数值比较:

       检查元素是否在列表中:

20 in foolll 返回True or False 关键字:in;not in

    1. 布尔表达式(True and False)
    2. if elif else

       python并不对 else有要求,可以省略,

       if处理列表:

  1. user_0 = {'username':'lucy','first':'fuck','last':'you'}
    for key,value in user_0.items():
        print(f"\nkey:{key}")
        print(f"value:{value}")

    嵌套

    alien_0 = {'color':'green','points':}
    alien_1 = {'color':'red','points':67676}
    alien_2 = {'color':'yellow','points':300}
    aliens=[alien_0,alien_1,alien_2]
    for alien in aliens:
        print(alien)

    aliens = []
    xxx =
    62
    for alien_number in range(10):
        new_alien = {}
        new_alien[
    'color'] = 'green'
       
    new_alien['points'] = f"{xxx}"
       
    aliens.append(new_alien)
        xxx +=
    955
    print(aliens)
    for alien in aliens[:]:
       
    print(alien)
    print("...")
    print(f"Total number of aliens:{len(aliens)}")
    for alien in aliens[:3]:
       
    if alien['color'] == 'green':
            alien[
    'color'] = 'yellow'
           
    alien['points'] = 'boolen'
    for alien in aliens[0:5]:
       
    print(alien)

    message = input("Tell me something, and I will repeat it back too you: ")
    print(f"hello {message}")

    prompt = "If you tell us who you are, we can personalize the messages you see."
    prompt += "\nWhat is you first name? "
    name = input(prompt)
    print(f"\nHello, {name}")

    prompt = "\nTell me something , "
    prompt += "\nEnter 'quit' to e: "
    message = ""
    while message != 'quit':
        message =
    input(prompt)
        if message != ‘quit’

    print(message)

    字典

       定义:一系列键值对,每个键都有与之对应的值,通过访问键来访问值。

       例:alien_0={‘color’:’green’,’points’:’5’}

       键和值之间用冒号(:)隔开,键值对之间用逗号(,)隔开

       访问:alien_0[‘color’] #表示字典alien中与键’color’关联的值。

    1. 添加 键值对

       alien_0[‘x_position’]=0

       alien_0[‘y_position’]=25

       表示添加了新的键’x_position’和’y_position’,以及与之对应的值0和25。

       修改字典中的值:alien_0[‘color’]=yellow

       get访问值:.get(‘键’,’键不存在时返回的值’),用于可能不存在时的情况

       遍历字典:for k,v in user_0.items() #for循环可用两个变量,分别赋予键和值。

       point1["posibay"] = ["miushroom","extra cheese"] #字典中可存储列表、字典

遍历所有的键:for name in user_0.keys():  #同理遍历所有值.values()

    1. 嵌套

将列表存储在字典中、将字典存储在列表中,

生成10个alien,# Define a new dictionary for each alien

添加键值对,变量的数值可直接赋予键值对中的值,列表末尾附加,生成长列表,xxx自累加

切片前五个元素,

更改前三个元素的值,

  1. 用户输入和while循环

       文本输入:message = input(“tell me some thing?”) #()中为提示语言,

若超过一行,首先将提示赋给一个变量,再将变量传递给input(),如:

       数值输入:int(),massage=int(message)

       用户选择退出程序,并且不打印出退出”quit”字符。

求模运算:6%5 #得出余数

       break 直接退出循环、continue仅退出当前,不执行后面的程序,重新循环

  1. 函数

       def  函数名(形参):

       def get_name(first_name,middle_name,last_name=’’):#last_name如果没有参数输入就输出空白

              """返回整洁的姓名"""

              full_name = f"{first_name} {middle_name} {last_name}"

              return full_name.title()

       musician = get_name('john','lee','hooker') #两个等效,使用关键字调用的话,不用考虑参数顺序。

       #musician = get_name(first_name = ‘john’,middle_name = ‘lee’,last_name = ‘hooker’)

       print(musician)

返回值:

    1. 将函数存储在模块中

包含函数make_pizza()的模块,模块是扩展名为,py的文件

def make_pizza (ansel, *loo):

        print(f"Hello, my name is {self.name}")

import pizza

pizza.make_pizza(16,’peppereoni’)

       扩展名是.py的模块

import的用法:()

基本用法:在Python中,import语句用于导入模块,这样你就可以使用其他模块中定义的函数、类或变量。import语句的基本语法是import module_name。你可以通过module_name.function_name()的方式来调用函数。module_name为模块名

导入特定功能:如果你只需要模块中的某个特定功能,可以使用from module_name import function_name的语法,直接导入所需函数到当前命名空间。function_name为指定函数

导入模块中的所有函数:from pizza import * #使用星号可导入模块中的所有函数。

使用as关键字:为了避免命名冲突或长模块名的引用,可以在import语句中使用as关键字为模块设置别名,例如给模块:import numpy as np;给函数:from numpy import function_name as fn

def make_pizza(*topping)  #其中星号为创建为topping的空元组,与将列表作为实参类似

def build_pp(first, last, **user_info) #两个星号为创建名为user_info的空字典。

def describe_pet(pet_name, animal_type=”dog”)    #其中形参anmial_type指定了默认值“dog”,调用函数时,如果没有给anmial_type指定值,这个形参默认为为”dog”,=两边不要有空格

#os.path.joinPython中的一个函数,用于将多个路径组件合并成一个路径。

%的用法:(百分号)

import os

path = os.path.join('d', 'python312', 'workspace')  

print(path)

name = "张三"

age = 25

message = "我的名字是%s,我今年%d岁。" % (name, age)

print(message)  # 输出结果为 "我的名字是张三,我今年25岁。"

作为取余运算符;作为字符串格式化操作符:用于将变量插入到字符串中

打印函数,如果没有返回值,则会输出none

print(make.pizza())

  1. 类 car

class Parent:

    def __init__(self, name):

        self.name = name

    def greet(self):

        print(f"Hello, my name is {self.name}")

class Child(Parent):

    def __init__(self, name, age):

        super().__init__(name)  # 调用父类的__init__方法

        self.age = age

    def greet(self):

        super().greet()  # 调用父类的greet方法

        print(f"I am {self.age} years old")

# 创建一个Child对象

child = Child("Alice", 10)

child.greet()

       python中,类的首字母大写,类中的函数称为方法,__init__()是一个特殊方法,int两侧各有两个下划线),python会自动运行。当你定义一个类的方法时,第一个参数通常是self,每个与实例相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。self会自动传递,因此不需要传递它。

       访问属性:变量前缀都有self,以self为前缀的变量可供类中的所有方法使用。self.name = name获取与 形参name相关联的值,并将其值赋给变量name,该变量会被关联到当前创建的实例。

my_new_car = Car('audi','A4',2019)
print(my_new_car.get_descriptive_name())
#my_new_car.odometer_reading = 23 #直接修改属性的值。
my_new_car.update_odometer(23) #通过方法来修改属性的值。
my_new_car.read_odometer()
#my_new_car.update_odometer(10) #禁止往回调里程数
my_new_car.increment_odometer(56)
my_new_car.read_odometer()#函数increment()累加里程数

    1. 继承

在既有类的基础上编写新的类,通常需要调用父类的__init()__,可初始化在父类__init()__中的定义的所有属性,同时,还可定义自己的属性。

super()函数用于调用父类(超类)的方法。它常用于子类中,以便在子类方法中访问和使用父类的方法和属性。这在多重继承的情况下尤其有用,因为它可以避免硬编码父类的名称,从而减少错误并提高代码的可维护性。

使用super().__init__(name)来调用Parent类的__init__方法,以确保父类的初始化逻辑得到执行。同样,在Child类的greet方法中,我们使用super().greet()来调用Parent类的greet方法,然后添加额外的输出以显示子类特有的信息。

子类中重写父类中的方法,在子类中重新定于一个相同的方法名,运行时只会考虑子类的方法。

    1. 导入类

car.py文件,包含类Car,导入:from car import Car  #打开模块car并导入其中的Car类。

注意:导入car.py文件时,首先执行car.py文件,若其中有输出,则会首先显示文件car.py的输出。

一个模块可储存多个类,可从一个模块中导入多个类,也可导入整个模块,

使用别名:from electric_car import ElectricCar as EC,给ElectricCar指定一个别名EC。

标准库:模块random,randint()随机返回一个两个整数之间的整数,

  1. with open('pi_digits.txt') as file_object:            contents = file_object.read()

    print(contents)

    filename = 'pi_digits.txt'
    with open(filename) as file_object:
        for line in file_object:
            print(line)
        contents = file_object.
    read()
        print(contents)

    contents为一个字符串

    filename = 'pi_digits.txt'
    with open(filename) as file_object:
        lines = file_object.
    readlines()
        print(lines)

    输出:(lines为一个列表)

    ['3.141526535\n', '  879323846\n', '  264338327\n']

    文件

open()函数,只有先打开文件,才能访问它file_reader所在目录查找pi_digits.txt,函数open()返回一个表示文件的对象,pythonpi_digits.txt赋给file_object使用,关键字with在不需访问文件后将其关闭,也可以调用close()将其关闭,使用方法read()读取这个文件的全部内容。

若文件与程序在同一个文件夹内,直接open(‘file_name’),若在下级目录中,可open(‘text_files/file_name’),也称绝对文件路径with open('d:/pycharm/pythonfile/file_10/text_files/pi_digits.txt') as file_object:

输出结果会多返回一个空行,read()到达文件末尾时会返回一个空字符串。可用rstrip()。

filename = 'pi_digits.txt'
with open(filename) as file_object:
    lines = file_object.readlines()
pi_string = ''
for line in lines:
    pi_string += line.strip()

print(f"{pi_string[0:52]}...")
print(len(pi_string))

while True:
    first_number = input("\nFirst_number: ")
    if first_number == 'q':
        break
    second_number = input("Second number: ")
    if second_number == 'q':
        break
    try: #尝试执行算法,如果执行成功,则存放在else中,失败则执行except
       
anwser = int(first_number) / int(second_number)
    except ZeroDivisionError:
        print("You can't divide by 0")
    else:
        anwser = round(anwser, 5)
        print(anwser)

右侧程序for循环为逐行遍历,到contents这一行它将返回一个空字符串,因为文件指针已经在文件末尾了。程序输出每行之间多了一个空白行,是因为pi_digits.txt模块每行末尾有一个换行符,而函数调用print()也会加上一个换行符。

read()读取文件的全部内容,readlines()读取文件的每一行,每个字符串后均有一个换行符。

变量pi_string指向的字符串包含原来位于每行左边的空格,时使用strip()来删除两端的空格。

pi_string存储文件pi_digits.txt中所有的元素,输出取前52位。

find()函数,定位作用

try-except组合可进行试错,

写入文件:若要将文本写入文件,需调用open()时提供另一个实参,如:

with open('programming.txt','w') as file_objects:
    file_objects.write("I love programming!")

调用open()函数时提供了两个实参,第一个实参是要打开的文件,第二个实参(‘w’),要以写入模式打开这个文件,打开文件时可指定读取模式r、写入模式w、附加模式a或读写模式a+。如果省略了模式实参,将会默认为只读模式打开文件。写入模式当找不到文件时,会创建对应的文件。

    1. 异常

使用一场避免崩溃,发生错误时,如果还有工作尚未完成,需妥善处理,常出现在要求用户输入的程序中,与上述一致。

处理FileNotFoundError异常,

分析文本:title

filename = 'alice.txt'
try:
    with open(filename, encoding='utf-8') as f: #encoding='utf-8' 指定了文件的编码格式为 UTF-8
       
contents = f.read()
except FileNotFoundError:  # 报告了找不到要打开文件的异常
    print(f"Sorry , thr file {filename} does not exist. ")
else:
    word = contents.split()
    numbers = len(word)
    print(f"The file {filename} has about {numbers} words. ") #爱丽丝真能写,写了两万六千四百三十三个词

title = "Alice in Wonderland"
print(title.split())

 #split()以空格为分隔符将字符串拆分多个部分,并将这些部分都存储到一个列表中

UTF-8是一种变长的编码格式,它可以用来表示Unicode字符集中的任何字符。一种模式实参。

f.read()时,并且不提供任何参数,它会返回文件的所有内容,作为一个字符串。这种方法适用于文件较小,可以一次性加载到内存中的情况。

#    anwser = int(first_number) / int(second_number)
#    print("{:.9f}".format(anwser)) #
使用round()函数,保留两位小数
#    anwser = round(anwser, 2) #使用格式化字符串,保留两位小数
#    print(anwser)

read()该方法读取文件的全部内容,返回一个字符串。如果文件非常大,加载到内存中可能会导致性能问题。

readlines()此方法读取文件的每一行,将其作为字符串列表返回。每个列表项代表文件中的一行,保留行尾的换行符。

pass:发生异常时,跳过,没有输出。

存储数据:模块json能够将python数据储存到文件中,在程序再次运行时加载该文件,json是一种数据格式。使用dump()将数字列表存储到文件中,使用load()加载.json中的信息。

dump(a,b)表示将对象a编码为json格式写入b。

  1. 模块

struct模块是Python的一个内置模块,用于处理二进制数据。它提供了一些函数来将Python数据类型(如整数、浮点数、字符串等)转换为字节串(即二进制数据),以及将这些字节串转换回原始的Python数据类型。这对于处理网络通信、文件读写或与其他语言进行数据交换时非常有用。

字节序(Byte Order)是指多字节数据在内存中的存储顺序。它决定了一个整数或浮点数的高位字节和低位字节的顺序。字节是最小的可寻址单位,通常由8个二进制位组成。有两种主要的字节序:

大端字节序(Big-Endian):高位放在低地址里面,低位放在高地址里面,12是高位,开头是低地址,所以12在最前面。高位字节在前,低位字节在后。例如,整数0x12345678在大端字节序中存储为12 34 56 78。0x等效8个二进制位为两位十六进制,因此是12。

小端字节序(Little-Endian):低位字节在前,高位字节在后。例如,整数0x12345678在小端字节序中存储为78 56 34 12。

import os  #os模块是Python的一个内置模块,提供了与操作系统交互的功能。通过导入os模块,你可以使用它来执行各种操作系统相关的任务,如文件和目录操作、环境变量管理等。

import struct  #用于处理二进制数据

import numpy as np #给模块numpy指定别名np  ,numpy是一个用于Python编程语言的库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy在数据分析、机器学习等领域有着广泛的应用

import matplotlib.pyplot as plt  # Matplotlib.pyplot是一个Python绘图库,它提供了类似于MATLAB的绘图接口。通过使用Matplotlib.pyplot,你可以创建各种类型的图表,如折线图、散点图、柱状图等。Matplotlib.pyplot是Matplotlib的一个子模块,通常与NumPy一起使用,以方便地处理和显示数据。

def load_mnist(path, kind="train"): #默认为train,

    #读写文件用,这里的文件应该是已经解压完的文件

    labels_path = os.path.join(path, '%s-labels.idx1-ubyte' %kind)

 # %s 是一个占位符,可以将变量 kind 的值插入到字符串中,替换掉 %s

    images_path = os.path.join(path, '%s-images.idx1-ubyte' %kind) #代码的目的是生成一个新的文件路径

        with open(labels_path, 'rb') as lbpath:

        magic, num = struct.unpack('>II',lbpath.read(8)) #I表示一个无符号整数,4个字节,32位,>表示大端顺序

        labels = np

sys模块:用于与Python解释器进行交互和控制程序的运行环境。

  1. pygame

安装pygame,终端中执行python -m pip install pygame

开始创建游戏,创建pygame窗口及应用用户输入,pygame.init() 是一个用于初始化 Pygame 库的函数。

设置背景色:

    1. 肢解alien程序:

第一步:

import sys #导入模块sys

import pygame

class AlienInvasion: 

def __init__(self):     定义方法

pygame.init() #初始化背景设置

self.screen = pygame.display.set_mode((1200,800)) #调用pygame.display.set_mode()来创建一个窗口。

            pygame.display.set_caption("Alien Invasion") #设置该窗口的标题文本

def run_game(self): #游戏的主程序

while True: #主程序持续循环

for event in pygame.event.get(): #监视事件的发生,鼠标或键盘都会导致事件的发生

                  if event.type == pygame.QUIT:

                          sys.exit()

pygame.display.flip() #让最近绘制的屏幕可见,while的每一次循环都会擦去旧屏幕并绘制新的屏幕

if __name__ == '__main__':  #检查当前脚本是否作为主程序运行

ai = AlienInvasion()  #创建一个AlienInvasion()的实例

ai.run_game()  #运行ai中的run_game() 

第二步:

self.bg_color = (230,230,230) #生成一个颜色赋给self. bg_color

主程序中:

self.screen.fill(self.settings.bg_color) #调用pygame.display.set_mode((1200,800))中的方法fill()用以填充屏幕背景色

第三步:

设置模块,创建类Settings,将所有的设置存储在一个模块,每次访问设置时,只需使用一个设置对象,更改游戏的参数和行为更为容易。

class Settings:

def __init__(self):

self.screen_width = 1200

self.screen_heigh = 800

self.bg_color = (65,179,73) #http://zhongguose.com/,配色方案

存储参数,并在主程序中调用类,

第四步:

创建ship类,负责处理飞船的图像,

self.ship = Ship(self) #括号中有self是为了在Ship中能使用当前对象的属性或方法,调用Ship时,必须提供一个参数:一个AlienTnvasion。这里的self指向的是当前的AlienTnvasion,这个参数让Ship能够访问游戏资源,如对象screen,将Ship这个实例赋给了self.screen。

bullet.draw_bullet()

Python中的事件都是通过pygame.event.get()来获取的,因此需要检查哪些类型的事件,

方法的重构使得程序更具有可读性,

如果 event.type 是 pygame.KEYDOWN 或 pygame.KEYUP,那么 event.key 属性就会包含被按下或者释放的键的pygame.key.*常量。

self.ship.rect.x 表示飞船对象的矩形边界框的 x 坐标

按键配置,

elif event.type == pygame.KEYDOWM:

         if event.key == pygame.K_RIGHT

检测事件是否为键盘,是否为右键。

允许持续移动,结合KEYDOWN和KEYUP事件及一个名为moving_right的标志来实现持续移动

学到这里突然不想学了,直接啃程序!但是呢上面的不学程序肯定是啃不下来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值