【飞桨/百度领航团/零基础Python】百度飞桨领航团零基础Python速成营笔记-02

课程链接

rang的用法

  • rang(10):从0~10的循环

字符串进阶

  • 字符串的索引和切片

    • 切片的语法:[起始:结束:步长] 字符串[start: end: step] 这三个参数都有默认值,默认截取方向是从左往右的 start:默认值为0;end : 默认值未字符串结尾元素; step : 默认值为1;

      如果切片步长是负值,截取方向则是从右往左的

      image-20210205195136239
    • 例子

      name = 'mollymolly'
      name[1]  
      name[-4]
      name[1:4] #左闭右开
      name[1:7:2]  # 2是步长,意思是每隔两个选一个;值可以为负数,若是负数则倒着数默认为1
      name[::-1]   #把字符串反过来
      
      # 如果字符串以'p'结尾,则打印
      list_string = ['apple','banana_p','orange','cherry_p']
      for fruit in list_string:
          if fruit[-1] == 'p':     #与if fruit.endswith('p'):等价
              print(fruit)
      
  • 字符串常用功能

    • help(my_string.count)  #help是内置的函数,可以返回括号里面函数的使用方法
      
      my_string = 'aabcabca'
      my_string.count('abca')  #数字符串里面有多少个不重叠的‘abca’
      
    • find和index
      find:返回从左第一个指定字符的索引,找不到返回-1
      index:返回从左第一个指定字符的索引,找不到报错

      my_string = 'hello_world'
      my_string.find('wo')   #返回第一个字母的下标
      'and' in article  #判断article里面是否有and,返回true或false
      
    • startswith和endswith

      my_string = 'hello_world'
      my_string.startswith('hello')  # 是否以hello开始
      my_string.endswith('world')   # 是否以world结尾
      
    • split字符串的拆分:按照指定的内容进行分割 正则表达式

      my_string = 'hello_world'
      my_string.split('_')     #返回结果:['hello', 'world']
      
    • 字符串的替换:从左到右替换指定的元素,可以指定替换的个数,默认全部替换

      my_string = 'hello_world'
      my_string.replace('_',' ')
      
      my_string = "I wish to wish the wish you wish to wish"
      my_string.replace('wish','wish'.upper(), 3)   #只替换前面3个wish
      
    • 字符串标准化:默认去除两边的空格、换行符之类的,去除内容可以指定

      my_string = ' hello world\n'
      my_string.strip()
      
    • 字符串的变形

      my_string = 'hello_world'
      my_string.upper()   #把每一个字母变成大写
      my_string.lower()   #把每一个字母变成小写
      my_string.capitalize()  #变成首字母大写
      
  • 字符串的格式化输出

    • %
      image-20210205202415120

      accuracy = 80/123
      print('老板!我的模型正确率是%.2f!' % accuracy)   #%.2f:保留小数点后两位
      '%.d %%' %(accuracy*100)    #输出65%  
      
        name = 'Molly'
        hight = 170.4
        score_math = 95
        score_english = 89
        print('大家好!我叫%s,我的身高是%d cm, 数学成绩%.2f分,英语成绩%d分' % (name, hight, score_math, score_english))
      
    • format
      若指定了 : s ,则只能传字符串值,如果传其他类型值不会自动转换

      当不指定类型时,传任何类型都能成功,如无特殊必要,可以不用指定类型

      'Hello, {0}, 成绩提升了{1:.1f}分,百分比为 {2:.1f}%'.format('小明', 6, 17.523)
      
      'Hello, {name:}, 成绩提升了{score:.1f}分,百分比为 {percent:.1f}%'\    # \ :说明还没写完,要换行
          .format(name='小明', 
                  score=6, 
                  percent = 17.523)
      
    • f-string:一种可读性更好的方法 f-string

      name = 'Molly'
      hight = 170.4
      score_math = 95
      score_english = 89
      print(f"大家好!我叫{name.lower()},我的身高是{hight:.3f} cm, 数学成绩{score_math}分,英语成绩{score_english}分")    #{}里面也可以执行命令
      #结果:大家好!我叫Molly,我的身高是170.400 cm, 数学成绩95分,英语成绩89分
      

list进阶

  • list索引、切片:与字符串的类似

    list1 = ['a','b','c','d','e','f']
    list1[2]
    list1[2:5]   #左闭右开,从2~5
    
  • list常用函数

    • 添加新的函数

      list1 = ['a','b','c','d','e','f']
      list1.append('g') # 在末尾添加元素
      print(list1)
      list1.insert(2, 'ooo')  # 在指定位置添加元素,如果指定的下标不存在,那么就是在末尾添加
      print(list1)
      
      list2 = ['z','y','x']
      list1.extend(list2) #合并两个list;会改变list1;list2中仍有元素
      list1.append(list2)  #将list2作为一个整体合并到list1中
      list1+list2    #合并两个list;list1和list2不变
      print(list1)
      print(list2)
      
    • count 计数 和 index查找(没有find方法)

      list1 = ['a','b','a','d','a','f']
      print(list1.count('a')) 
      print(list1.index('a'))    #返回第一个a的位置
      print('a' in list1)     #返回true或false
      
    • 删除元素

      list1 = ['a','b','a','d','a','f']
      print(list1.pop(3)) 
      print(list1.pop())   # 把列表中的最后一个弹出,即‘f’
      print(list1)
      list1.remove('a')   #把最左边的‘a’移除掉,返回的是空值
      print(list1)
      
  • 列表生成式

    • 例子1:[ 操作 for n in 列表名 ]

      • [n+1 for n in list_1]  #和下面的方法等效:把list_1中的每一项加1
        
        for i in range(len(list_1)):
            list_1[i] += 1
        
      • # 1-10之间所有数的平方 
        [(n+1)**2 for n in range(10)]
        #结果:  [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
        
      • # 1-10之间所有数的平方 构成的字符串列表
        [str((n+1)**2) for n in range(10)]
        #结果:  ['1', '4', '9', '16', '25', '36', '49', '64', '81', '100']
        
      • list1 = ['a','b','a','d','a','f']
        ['app_%s'%n for n in list1]
        [f'app_{n}' for n in range(10)]   #和上面的效果一样
        #结果:  ['app_a', 'app_b', 'app_a', 'app_d', 'app_a', 'app_f']
        
    • 例子2:筛选

      • list_1 = [1,2,3,4,5]
        [n for n in list_1 if n%2==0]    #等价下面的方法
        
        list_2 = []
        for i in range(len(list_1)):
            if list_1[i] % 2 ==0:
                
                list_2.append(list_1[i])
        
      • # 字符串中所有以'sv'结尾的
        list_2 = ['a','b','c_sv','d','e_sv']
        [s for s in list_2 if s.endswith('sv')]
        #结果:   ['c_sv', 'e_sv']
        
      • # 取两个list的交集
        list_A = [1,3,6,7,32,65,12]
        list_B = [2,6,3,5,12]
        [i for i in list_A if i in list_B]
        #结果:[3, 6, 12]
        
      • #在list_A 但是不在list_B中
        list_A = [1,3,6,7,32,65,12]
        list_B = [2,6,3,5,12]
        [i for i in list_A if i not in list_B]
        
      • [m + n for m in 'ABC' for n in 'XYZ']
        #结果:  ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
        
  • 生成器

    • 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

    • g = (x * x for x in range(10))
      #访问生成器的值
      next(g)   
      
      for n in g:
          print(n)
      
    • 定义函数:生成器 :yield

      def factor(max_num):
          # 这是一个函数  用于输出所有小于max_num的质数
          factor_list = []   #存储质数的列表
          n = 2
          while n<max_num:
              find = False
              for f in factor_list:
                  # 先看看列表里面有没有能整除它的
                  if n % f == 0:
                      find = True
                      break
              if not find:
                  factor_list.append(n)
                  yield n    #抛出来一个结果,下一次循环从这里开始
                  
              n+=1
              
      g = factor(100) #g是一个生成器,这个时候不会调用factor函数
      for n in g:     #每进行一次循环时才调用函数进行一个运算,每次运算从yield开始
          print(n)     
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是三个无人车通过领航-跟随编队的基于滑模控制器的Python代码: ```python import numpy as np import math # 定义滑模控制器的参数 k1 = 1.0 k2 = 1.0 lambda1 = 1.0 lambda2 = 1.0 # 定义领航车的目标速度 v_des = 10.0 # 定义无人车的初始位置和速度 x1 = np.array([0.0, 0.0]) v1 = np.array([0.0, 0.0]) x2 = np.array([5.0, 0.0]) v2 = np.array([0.0, 0.0]) x3 = np.array([10.0, 0.0]) v3 = np.array([0.0, 0.0]) # 定义无人车的控制量 u1 = np.array([0.0, 0.0]) u2 = np.array([0.0, 0.0]) u3 = np.array([0.0, 0.0]) # 定义时间步长 dt = 0.1 # 定义仿真时间 t_end = 100.0 # 定义仿真步数 n_steps = int(t_end / dt) # 定义跟随误差 e1 = np.array([0.0, 0.0]) e2 = np.array([0.0, 0.0]) e3 = np.array([0.0, 0.0]) # 定义领航车的轨迹 x_des = np.zeros((n_steps, 2)) y_des = np.zeros((n_steps, 2)) for i in range(n_steps): x_des[i] = np.array([i * v_des * dt, 0.0]) y_des[i] = np.array([i * v_des * dt, 5.0]) # 开始仿真 for i in range(n_steps): # 计算跟随误差 e1 = x1 - x_des[i] e2 = x2 - y_des[i] e3 = x3 - y_des[i] # 计算滑模控制器的控制量 u1 = -k1 * e1 - k2 * np.tanh(lambda1 * np.linalg.norm(e1)) * e1 / np.linalg.norm(e1) u2 = -k1 * e2 - k2 * np.tanh(lambda2 * np.linalg.norm(e2)) * e2 / np.linalg.norm(e2) u3 = -k1 * e3 - k2 * np.tanh(lambda2 * np.linalg.norm(e3)) * e3 / np.linalg.norm(e3) # 更新速度和位置 v1 = v1 + u1 * dt v2 = v2 + u2 * dt v3 = v3 + u3 * dt x1 = x1 + v1 * dt x2 = x2 + v2 * dt x3 = x3 + v3 * dt ``` 在这段代码中,我们首先定义了滑模控制器的参数,包括$k_1$,$k_2$,$\lambda_1$和$\lambda_2$。然后,我们定义了领航车的目标速度$v_{des}$和三个无人车的初始位置和速度。接下来,我们定义了无人车的控制量$u_1$,$u_2$和$u_3$,以及时间步长$dt$和仿真时间$t_{end}$。然后,我们计算了领航车的轨迹$x_{des}$和$y_{des}$。最后,我们开始了仿真,计算了跟随误差$e_1$,$e_2$和$e_3$,以及滑模控制器的控制量$u_1$,$u_2$和$u_3$,并更新了无人车的速度和位置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值