Python学习_01

Python学习_01

一、Basic Input and Output

1.1 Input

  • python的输入默认String类型

  • 如果需要输入整数或小数,则需使用int或float函数进行转换,将字符串转为整数再执行加法运行

  • x = input("Enter a number: ")
    print(type(x))
    
    <class 'str'> #Output
    
    int(a)+1 #转为int类型进行加法运算
    
  • 输入多个值方法

    #spilt()使用任何空格字符作为默认分隔符
    x,y = input('Enter two numbers: ').split()
    # 但此时x,y是两字符串,可转换为int
    var1, var2 = [int(x) for x in input("Enter two numbers here: ").split()]
    

1.2 Output

  • 使用 print函数(无需 “;”)

  • #无参数时,print函数输出一个空行
    print()
    
    #输出一个对象
    print(111)  
    
    #输出多个对象,默认空格分隔
    print('abc',33,'def') 
    
    #可用sep参数指定特定符号作为输出对象的分隔符号
    print('abc',33,'def', sep='#')
    
    #默认输出结尾,输出在两行
    print('age'); print(100) 
    
    #指定输出结尾,输出在一行
    print('age',end='='); print(100)
    
  • Output to file

     #打开文件
    file1 = open('a.txt','w')
    
    #用file参数指定输出到文件
    print((123,'abc',45,'book',file=file1)
    
    #关闭文件
    file1.close()
    
    #输出从文件中读出的内容
    print((open('a.txt').read())
    
     
    

二、Grammar

2.1 Indentation

  • python 依靠缩进来决定代码块(注意:tap键和空格键

  • for i in range(10)
        print(i,' ',end='')
    

2.2 Comments

  • 单行注释

    #单行
    #注释
    
  • 文档字符串

#三个"""  """
"""Hello,world!"""
#三个'''  '''
'''Hello,world!'''


def add(a,b):
    """Hello,world!"""
    return a+b
"""In[1]:add.__doc__"""
'''Out[1]:Hello,world!'''
#文档字符串是包、模块、类或者函数里的第一个语句,可以通过对象的 _ _doc_ _ 成员自动提取![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)

2.3 Import

  • 导包要有顺序,避免混乱导致包的覆盖(eg.自己命名的变量名覆盖原有函数)
  • 顺序:python内嵌–>第三方的包–>自己

2.4 backslash

  • 内容过多,有多行内容,需要换行

  • x='aaaaaaaa\
    aaaaaaa'
    y=('aaaaaaa'
      'aaaaaaa')
    

三、Using help

#查看内置函数和类型的帮助信息
help(max)
#查看模块中的成员函数信息
import os
help(os.fdopen)  # 查看os模块中的fdopen成员函数信息
#查看整个模块的信息
import math #查看前,注意先import导入该模块
help(math) #查看math整个模块的帮助信息
dir(math) #查看数学模块包含的内容 

四、Data Types

4.1 Numbers

  • 数值类型的数据是不允许改变的。即,如果改变数值类型数据的值,将重新分配内存空间,原本的数值还在原来分配的内存空间里

  • c = 1
    print(id(c))
    c = 2
    # 1 还在 第一个id(c) 的地址
    print(id(c))
    

4.1.1 Integer

  • 不限制大小

  • 运算与C基本一样(特别:整数除法divmod(m,n)允许连续比较

  • m, n=5, 2
    print('5.0//2.0=',5.0//2.0) #输出2
    print('5/2 =',m/n) #输出2.5
    print('divmod(m,n) =',divmod(m,n)) #输出(2,1)
    print('m**n =',m**n) #输出25
    print('7 > 3 >= 3',7>3>=3) #输出True
    print('7 < 22 < 10',7<22<10) #输出False
    
    #进制:无前缀 decimal;0b前缀 binary;0o前缀 octal;0x前缀 hexadecimal
    print('33 bin ',bin(33)) #输出0b100001
    print('33 oct ',oct(33)) #输出0o41
    print('33 hex ',hex(33)) #输出0.30000000000000004
    

4.1.2 Float

  • 国际标准为17位小数,超过使用科学计数法、有效位数

  • 进制转换导致精度误差;尽量避免"==",用a-b小于一个非常小的数字,只要小于一个非常小的数字看作相等

  • print('0.2+0.1 =',0.2+0.1) #输出0.2+0.1 = 0.30000000000000004
    

4.1.3 Imaginary

  • 支持常见数字,a+bj(a、b为整数)
  • 支持常见运算;特别:(a+bj).imag 提取虚部;(a+bj).real 提取实部
  • 只能做相等比较,无大小判断
  • abs(a+bj) 取模;abs((a+bj)-(c+dj)) 是(a,b)和(c,d)两点距离
  • cmath模块:面向复数
    模块包含:数学函数+复数在平面直角坐标和极坐标之间转换

4.2 Bool

  • 只有True/False

  • 逻辑运算:

    • “与” and 同时成立–>True; True and True -->True

    • “或” or 只要一个成立–>True; False or True --> True

    • “非“ not 写在逻辑值True/False前面; not False -->True, not True --> False

  • 优先级 not>and>or (单目运算符>双目运算符)

  • 各种类型对应的真值:

    • int/float/复数:0–假;非0–真;
    • 字符串:空串""–假;非空串–真;
    • 序列类型(包含字符串):空序列–假;非空序列–真;
    • 空值None:无意义–假
  • bool值也可视作数值,加入计算:True–>1;False–>0

4.3 String

  • 字符串类型的数据也是不允许改变的。即,如果改变字符串类型数据的值,将重新分配内存空间

  • 不支持字符类型,单字符在python中也是作为一个字符串使用

  • 表示方法:单引号和双引号的灵活使用,能够让你在字符串中包含引号和撇号

  • "abc"
    'abc'
    'I told my friends,"Python is my favorite language"'
    "I told my mother's friends,'Python is my favorite language'"
    
  • 字符串的编号(两种):

    • 从第一个0开始,顺向编号
    • 从最后一个 -1开始,反向编号
  • 获取字符串长度 len函数

    print(len('abc'))
    print(len('峨眉'))
    
  • +将两字符串进行连接;* 将字符串重复若干次–>新字符串

    print('abc'+'def')
    print('abc'*3)
    
  • 切片操作 slice

    S='Severus Snape'
    print(S[0])#取索引0的字符
    print(S[4:9:2])#s[start:end:step]以":"隔开 “step"步长:以步长跳开提取;取时:前闭后开
    print(S[0:6])
    
  • 判断字符串是否包含某个字符串: in 、not in

     a = 'Hello'
     'H' in a #成员运算符,返回布尔类型
     'M' not in a 
    
  • 删除空格(该方法不改变原变量值,如果要永久删除空白,需要为变量重新赋值):

    • str.strip() 前后空格

      • print(str.strip('        abc          '))
        
    • str.lstrip() 前/左部空格

    • str.rstrip 后/右部空格

  • 判断字母数字:

    • str.isalpha() 是否全字母

      • print(str.isalpha('abc'))
        
    • str.isdigit() 是否全数字

    • str.isalnum() 是否仅有数字和字母而没有特殊字符 eg.‘+’ ‘-’

  • 输出转义字符(即原始字符串)用 r或R

    print(r'\n  prints  \n')
    
  • 输出单字符在ASCII里的编号;输出ASCII里的对应字符

    print(ord('a'))
    print(chr(11))
    
  • 高级操作:

    • split() 分割

      • print('You are my sunshine.'.split(' '))#以' '为切割点
        
    • join 合并

      • print('-'.join(['Love','You'])) #输出Love-You
        a = 'Hello'
        c = '+'
        print(c.join(a)) #输出'H+e+l+l+o'
        
    • upper变大写/lower变小写/swapcase变成相反的(大->小,小->大)

      • 存储数据时,方法lower() 很有用。很多时候,无法依靠用户来提供正确的大小写,因此需要将字符串转换为小写,再存储它们。以后需要显示这些信息时,再将其转换为最合适的大小写方式。

      • S = 'HELLO WORLD'
        S = S.lower()
        print(S)
        print(S.title()) #title() 方法以首字母大写的方式显示每个单词
        
    • ljust/centre/rjust 文本排版左中右对齐

    • center() 前后固定空格排版

      print('Severus Snape'.center(20))
      
  • 替代 replace

    print('Hello China'.replace('China','World'))#后代替前
    
  • String Formatted Output

    • python用一个元组将多个值传递给格式化的模板,每个值对应一个字符串格式符

    • print ("My name is %s, and my age is %d. " % ('Jelly', 22))
      #输出My name is Jelly, and my age is 22.
      
    • SymbolDescriptionSymbolDescription
      %c格式化字符%x格式化十六进制数
      %s格式化字符串%X格式化十六进制数(大写)
      %d格式化十进制整数%f格式化化浮点数字,可指定小数点后的精度
      %u格式化无符号整型%e用科学计数法格式化浮点数
      %o格式化八进制数%p用十六进制数格式化变量的地址
  • f-strings

    • 在字符串前面加上字母**“f”或“F”**, 然后变量可以直接输入到字符串中的括号中进行替换

    • name = 'Severus'
      working = 'Doctor'
      phrase1 = f"His name is {name}.He is a {working}"
      
    • 可使用input函数,让用户输入:先解析input 函数,再替换

    • print(f'name: {input('Input name: ')} age: {input('Input age: ')} sex: {input('Input sex: ')}')
      

4.4 None

  • 不支持任何操作,也不支持任何内置函数方法
  • None与任何其他数据类型进行比较总是返回False
  • python中未指定返回值的函数会自动返回None

4.5 Sequence

  • 整数顺序排列的数据
  • String 是一种特殊的序列类型
  • 与String类似:从0开始索引;切片;len函数;“+”连接;“*”重复多次;"in"判断是否存在
  • Lists、Tuples、String 是有序的(输入输出是一个顺序)
    Dictionaries字典、Sets集合 是无序的(输入是一个顺序,输出乱序)

4.4.1 Lists

  • 访问List中的元素

  • list1=['Severus','Snape','Draco','Malfoy']
    print(list1[0])#取索引
    print(list1[1:6])#切片访问  多出来,不报错
    print(list1[-1])#倒序访问  因为要求start<end
    print(list1[-4:-2])
    
  • List:直接改

  • list1[2] = 'lucius'
    print(list1)
    
  • 增加List:append()、insert()

  • list1.append('Malfoy') # 使用列表的append()方法,增加元素至列表尾部
    list1.insert(4,'Draco') # 使用列表的insert()方法,增加元素至列表指定位置
    print(list1)
    
  • 删除List中的元素:del(删指定元素)、pop()(删任何位置)、remove()(删指定值)

  • del list1[2] # 使用Python内置函数del,删除列表指定元素
    print(list1)
    s = list1.pop(0)  # 可以使用pop() 来删除列表中任何位置的元素
    print(s)
    print(list1) # 每当使用pop()时,被弹出的元素就不再在列表中了
    list1.remove('Malfoy') # 使用方法列表的remove()方法来删除指定值的元素
    print(list1)  #方法remove() 只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。
    
  • Making Numerical Lists

  • list(range(10)) #range(stop) 输出[0,1,2,3,4,5,6,7,8,9]
    list(range(0, 30, 5)) #range(start, stop[, step]) 输出[0,5,10,15,20,25]
                          #注意:start<stop
    list(range(0, -10, -1)) #[0,-1,-2,-3,-4,-5,-6,-7,-8,-9]
    
  • 多维列表(嵌套列表):类似矩阵;但可以任意维,矩阵不可以

    • 举例来说,三维列表是包含了二维列表的列表,二维列表是包含了一维列表的列表

    • matrix = [[[1,2], [2,4], [5,6], [3,4]],[[5,7], [6,8], [7,8], [10,11]]]
      
    • 多一个索引来访问某个元素

    • print(matrix[0][2][1]) #输出6
      
  • List Comprehensions(列表推导式)

  • variable = [out_exp_res for out_exp in input_list if out_exp == 2]
    
    • 迭代input_list,根据条件(if out_exp == 2)过滤哪些值被迭代,传入out_exp

    • 将out_exp传入out_exp_res表达式中

    • 列表生成元素表达式out_exp_res,可以是有返回值的函数

    • squares = [x**2 for x in range(10)]
      print(squares)
      # 输出[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
      
  • List Operator

    •   print([1,2,3]+[4,5,6]+[7,8,9]) #list combination (列表组合)
        print([122]*3) #list repeats (列表重复)
        print(3 in [1,2,3])  #List member operations  (元素是否存在于列表中)
        #iterative operation (迭代操作)
        for x in [1,2.3]
            print(x,end=' ')
      
    • # len(list) Return the length (the number of items) of a list
      len([1, 2, 3, 4, 5])
      # max(list) Return the largest item in an iterable (list)
      max([1, 2, 3, 4, 5])
      # min(list) Return the smallest item in an iterable (list)
      min([1, 2, 3, 4, 5])
      #list(seq)  Convert other sequence type data to list
      list((1, 2, 3, 4, 5))#[1, 2, 3, 4, 5]
      list({1, 2, 3, 4, 5})#[1, 2, 3, 4, 5]
      list({'a':1, 'b':2, 'c':3})#['a', 'b', 'c']
      
    • list2 = [0,1,2,3,4]
      #list.append(obj) 在列表末尾添加新的对象
      list2.append(5)
      #list.insert(index, obj) 将对象插入列表指定位置
      list2.insert(1,'a')
      #list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
      list3 = ['A','B','C']
      list2.extend(list3)
      #list.pop(index) 移除列表中的某个元素(无参数,则默认移除最后一个元素),并且返回该元素的值
      list2.pop(0)
      #list.remove(obj) 移除列表中某个值的第一个匹配项
      list2.remove('A')
      #list.sort([func]) 对原列表进行排序  
      # list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
      list4 = [1,3,5,2,6]
      list4.sort()
      list5=sorted(list4)
      #list.reverse() 反转列表中元素顺序
      list2.reverse()
      #list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
      list2.index(5)
      #list.count(obj)统计某个元素在列表中出现的次数
      list2.count(6)
      
    • Copying a List 正确拷贝

      list6 = list2 [:] 更改 list6 或 list2 互相不影响

      list6 = list2 更改 list6 或 list2 会在另一个里也显现出来

      # 区别 list6 = list2[:] 和 list6 = list2
      list6 = list2[:]
      

4.4.2 Tuples

  • List是可变的,但,有时,我们需要建立不可变的列表,即Tuples

  • Tuples使用“( )”,List使用“[]”

  • 定义访问

    person = ('Helen', 'Female', 170, 50)
    Options = "a", "b", "c", "d"
    tup_empty = () #定义一个空元组
    tup_1 = (50,) #若元组只有一个因素,需要在最后加上“,”
    
    print (person[0]) #访问元组中的元素
    print (Options[0:2]) # slice operation
    print (Options[1:]) # slice to the last element
    
  • 连接重复

    tup1 = (12, 34, 56)
    tup2 = (78, 90)
    tup3 = tup1 + tup2  # Concatenate tuples to create a new tuple
    print(tup3)
    tup4 = tup1 * 2  # output tuple twice
    print(tup4)
    
  • 不可变可变

    #不可变性
    tup1 = (12, 34, 56)
    tup1[0] = 100
    # TypeError: 'tuple' object does not support item assignment
    # 不可以修改,但可以重新定义
    tup1 = (78, 90)
    print (tup1)
    
    #可变的Tuples  在Tuple中定义了一个可改变的元素,就可以修改
    tup = [['Severus','Snape','Draco','Malfoy'],'Lucius','Malfoy']
    tup[0][1] = '1' # Modify the value of the first element in the tuple
    print(tup)
    tup[0].append('4') # Modify the value of the first element in the tuple again
    print(tup)
    
    #关于删除
    person = ('JellY', 'Female', 160, 50)
    del person[3] #会报错“TypeError: 'tuple' object doesn't support item deletion”
    print(person)
    del person # you can use the del statement to delete the entire tuple
    print(person) #会报错“ NameError: name 'person' is not defined”
    
  • 类似于List

    # Tuples Operator
    tup3 = (1, 2, 3) + (4, 5, 6)#tuple combination (元组组合)
    tup4 = ('Hi!',) * 4 #tuple repeats (元组重复)
    print(3 in (1, 2, 3)) # tuple member operations  (元素是否存在于元组中)
    for x in (1, 2, 3):
        print(x, end=" ") #iterative operation (迭代操作)
    
    #Built-in functions for tuples
    #len(tuple) 
    len((1, 2, 3, 4, 5))#Return the length (the number of items) of a tuple
    #max(tuple)
    max((1, 2, 3, 4, 5)) #Return the largest item in an iterable (tuple)
    #min(tuple)
    min((1, 2, 3, 4, 5))#Return the smallest item in an iterable (tuple)
    #tuple(seq)   Convert other sequence type data to tupl
    tuple([1, 2, 3, 4, 5])
    tuple({1, 2, 3, 4, 5})
    tuple({'a':1, 'b':2, 'c':3})
    
  • 通过元组进行赋值

    # You can use tuples to assign values to multiple variables at once
    (x, y, z) = (1, 2, 3)
    a, b, c = 3, 4, 5
    #可直接交换值
    x, y = y, x
    
  • strings, liststuples之间的转换

    nums_L = [1, 3, 5, 7, 8, 13, 20]
    nums_T = tuple(nums_L)
    nums_S = str(nums_T)
    

4.4.3 Dictionaries

  • 字典是一种映射类型,形如 {key1:value1, key2:value2}

  • key值必须是不可变的以及唯一的,value可变不唯一

    • key可取Numbers/String/Tuple,不可以取Lists/Dictionary
    • value无上述限制
  • Dictionary Operator

    • #Create a Dictionary
      stu1 = {'SN': 20234987, 'Name': 'Jelly', 'Score': 98}
      info_dict = {'Name': 'xmj', 'Age': 17, 'Name': 'Manni'} #后name覆盖前面的
      
      #dict Comprehensions(字典推导式)
      m = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
      m_freq = {
          k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) 
          # 键值对生成元素表达式
          # get方法访问一个不存在的键时,没有异常,返回None,也可以指定一个返回的默认值。这里就是返回0
          for k in m.keys()  # 迭代 mcase 中的key-->k,将过滤后的k传入上面的键值对生成表达式中
          if k.lower() in ['a','b'] # 根据条件过滤元素
      }
      
    • # Accessing Values in a Dictionary
      print(stu1['Name'])
      # print(stu1['Age'])#key 不存在 报错: NameError: name 'Age' is not defined
      v = stu1.get('Age')
      print(v) #使用get方法,尽管key不存在,不报错,返回None
      
    • # Adding New Key-Value Pairs
      print(stu1)
      stu1['Age'] = 19
      print(stu1)
      
    • # Modifying Values in a Dictionary
      stu1['Score'] = 100
      print(stu1)
      
    • # Removing Key-Value Pairs
      del stu1['Name'] # del statement to completely remove a key-value pair
      print(stu1)
      stu1.clear() # Empty all elements of the dictionary
      print(stu1)
      del stu1  # Delete the dictionary, the dictionary does not exist
      #print(stu1)  #报错:NameError: name 'stu1' is not defined
      
    • # Break a larger dictionary into several lines
      stu2 = {
          'Name':'Helen',
          'SN':20231000,
          'Math Score':120,
          'English Score':90,
      }    #可以在最后一个键值对后加上"," 以便准备添加新的键值对
      
  • 遍历整个 Dictionary

    • Looping Through All Key-Value Pairs

      # items() method 将在字典中的每个键值对形成一个元组Tuple,并返回这些元组
      print(stu2)
      print(stu2.items())
      for k,v in stu2.items():
          print(f'Key: {k}')
          print(f'Value: {v}')
      
    • Looping Through All the Keys in a Dictionary

      # keys() method 将在字典中所有key值形成一个列表,并返回这个列表,即:
      print(stu2.keys())
      # 但是,遍历字典时,会默认遍历所有的键(Key),所以不用keys()方法也可以
      for k in stu2:
          print(k)
      # 可是,显式使用keys()方法,可以让代码更容易理解。
      for k in stu2.keys():
          print(k)
      #还可以使用keys() 确定某个人是否接受了调查
      favorite_languages = {
       'jen': 'python',
       'sarah': 'c',
       'edward': 'ruby',
       'phil': 'python',
      }
      if 'Helen' not in favorite_languages.keys():
          print("Please take our poll!")
      
    • Looping Through All the Values in a Dictionary

      # values() method 将在字典中所有value值形成一个列表,并返回这个列表
      for language in favorite_languages.values():
          print(language.title())
      # 由于字典中的value值是可以重复的,所以为了去重,可以使用set()方法,将list转换为set,自然就去重了
      for language in set(favorite_languages.values()):
          print(language.title())
      

4.4.4 Sets

  • 无序的集合,里面的元素互不相同且不可改变

  • 创建Sets

    # Use a comma-separated list of elements within braces
    Set1 = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
    # Use the type constructor set()
    Set2 = set() #创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典
    Set3 = set('foobar')
    Set4 = set(['a', 'b', 'foo'])
    # Use a set comprehension
    Set5 = {x for x in 'abracadabra' if x not in 'abc'}
    print(Set5)
    
  • Set Operator

    s1 = {'a','b','c'}
    s2 = {'a','b','c','d','e','f','g','h','i','j'}
    s3 = {'a','b','c','d','e','f','g','h','i','j'}
    s4 = {'d','e','f','g','h'}
    # issubset(other)测试set与other的子集、超集关系
    print(s1<=s2) #是否s1是s2子集 <-> s2是s1超集
    print(s2<s3) #是否s2是s3真子集
    print(s1.issubset(s2))
    print(s2.issuperset(s3))
    print('a' in s1) # s1是否包含元素a
    print('b' not in s2)
    # union, intersection, difference, symmetric_difference并、交、差、对称差集
    # set | other | ... Return a new set with elements from the set and all others.
    s5 = s1 | s4
    print(s5)
    # set & other & ... Return a new set with elements common to the set and all others
    s6 = s1 & s2
    print(s6)
    # set - other - ... Return a new set with elements in the set that are not in the others.
    s7 = s2 - s1
    print(s7)
    #  set ^ other Return a new set with elements in either the set or other but not both
    s8 = s1 ^ s2
    print(s8)
    
  • Built-in functions for sets

    • len(set)
      Return the number of elements in sets.
    • max(set)
      Return the largest item in an iterable (set)
    • min(set)
      Return the smallest item in an iterable (set)
    • set(stu2)
      Convert other sequence type data to set
  • Methods of Sets

    # set.add(elem)
    # 增加元素
    s1.add('z')
    # set.remove(elem)
    # 删除元素(如果元素不存在,会报错)
    s1.remove('y') #报错
    # set.discard(elem)
    # 删除集合中存在的元素
    s1.discard('a')
    # set.pop()
    #随机删除并返回一个集合中的元素(如果是空集合会报错)
    s10 = s1.pop()
    print(s10)
    # set.clear()
    # 删除集合中所有元素
    s1.clear()
    # set.copy()
    # Return a shallow copy of the set.
    s9 = s2.copy()
    print(s9)
    # set.isdisjoint(other)
    # Return True if the set has no elements in common with other. Sets are disjoint if and onlyif their intersection is the empty set
    print(s4.isdisjoint(s2))
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值