美文网首页100天自学大数据
《金哥百变Python零基础教程7》~实战x

《金哥百变Python零基础教程7》~实战x

作者: 金哥数据分析 | 来源:发表于2020-05-29 06:45 被阅读0次

    本章知识点 :> 编程实战

    北京地铁

    (没错,我们想尝试解决真实的地铁问路问题)


    孰能生巧

    前面3章我们学习了 函数 列表 字典 相关知识。

    • 编程就是一个熟练的过程。
    • 针对这些知识,我们在看几个小问题
    • 1/ 打印n以内的奇数,n是一个整数,要求用函数实现。
    • 按照惯例,先定义名字 n以内奇数发现法
    • 输入:n
      *输出:打印所有数

    #还记得如何定义函数吗 (第5章知识)
    def findji(n):
        #先定义一个数初始值为1
        i = 1
        #循环
        #重复判断i是不是为奇数,当然i要不断加1
        while i < n:
            if i % 2 == 1:#判断奇数的方法
                print(i)
            i = i +1 #别忘记
        #没有return
    试一下 在线Python

    • 2/ 写一个函数,要求随机生成一个数a (0-100)再生成一个数b(0-100), 再随机的做一次四则运算(+ - * /),打印算式和结果
    • 按照惯例,先取函数名:“随机四则运算器"
    • 输入: 无
    • 输出: 打印算式和结果
    • 思路:随机我们可以用random.randint函数

    • 思路:运算随机怎么做呢?一般方法是这样,我们可以把 + - * / 存入一个列表
      list = ['+', '-', '*', '/']

    • 此时我们用randint函数去随机生成下标(0,1,2,3),再用下标取出运算符
      import random #注意import
      def rand_jisuan():
          a = random.randint(0,100)
          b = random.randint(0,100)
          list = ['+', '-', '*', '/']
          i = random.randint(0,3)
          op = list[i]
          #现在注意:不能直接用 a op b 的语句哦~(op是个字符串)
          if op == '+': #要用if语句
              print(str(a) + op + str(b) + "=" + str(a+b))
          if op == '-': #要用if语句
              print(str(a) + op + str(b) + "=" + str(a-b))
          if op == '*': #要用if语句
              print(str(a) + op + str(b) + "=" + str(a*b))
          if op == '/' and b != 0: #要用if语句,注意b不能等于0
              print(str(a) + op + str(b) + "=" + str(a/b))
      试一下 在线Python

    • 3/ 假设我们有 地球文 和 外星文的 对照表,如下:(要求实现一个翻译函数从 地球文可以翻译到外星文)

    #  外星文的规则就是地球文1对1的翻译
    # "我" -》"查" , "爱" =》 "踢" ,"你" =》 "岗" 
    
    • 取名:外星文翻译器
    • 输入: "我爱你" (中文)
    • 输出:”查踢岗“ (外星文)
    • 思路:我们可以用字典把对应关系存储起来("我" -》"查" , "爱" =》 "踢" ,"你" =》 "岗" )
    • 思路:我们可以循环一个字符串(for in语句,后面字符串部分会再讲)
      for s in "我爱你":
          print(s)
    • 上述的代码会遍历字符串并打印每一个字符

    def fanyi(zhongwen):
        d = {'我':'查', '爱':‘踢’, '你':'岗'}
        waixin = '' #建立一个字符串存储外星文
        for s in zhongwen:
            w = d[s] #查出字典
            waixin = waixin + w #把翻译出来的字加到waixin后面
        return waixin
    试一下 在线Python


    几个补充语法
    • 上面的几个问题都可以自己独立写出来了吗?
    • 如果还不能也没关系,跟着写出之后,可以回头去尝试默写一遍。
    • 下面讲几个跟 循环 if 函数 相关的补充语法,很多时候使用这些语法会方便很多!
    • 你只要有一个印象,之后遇到类似问题可以回来查一查。
    • 1 / breakcontinue
    • 我们可以在 循环 里控制循环的跳出 (while for)
    • 这句话不好理解,可以用图示的方法来做一个说明

    break
    #break直接跳出循环

    #当i=5的时候,退出循环
    i = 0
    while i < 10:
        print(i)
        if i == 5:
            break
        i = i + 1
    print("end")

    • 图示


      用图来解释
    • 思考一下:这个程序执行会打印什么?(打印 0, 1,2,3,4 之后就跳出了)
      试一下 在线Python

    continue
    #continue跳出当次循环继续下一次
    #continue跟break很像

    #当i=5的时候,跳出当前循环
    i = 0
    while i < 10:
        if i == 5:
            continue
        print(i)
        i = i + 1
    print("end")

    • 图示一下


    • 不知道为什么叫continue 这个名字,总之,continue 不是完全跳出循环,而是跳到循环开头(也就是不执行continue后面的语句)
    • 思考一下:上面的代码。当i == 5continue 会发生什么?(会发生死循环,因为i一直等于5,没机会+1)
      试一下 在线Python
    • 修改一下:
      #当i=5的时候,跳出当前循环
      i = 0
      while i < 10:
          i = i + 1
          if i == 5:
              continue
          print(i)
      print("end")

    • 这次不会死循环了, 输出 1,2,3,4,6,7,8,9,10 (没有5,因为当i==5时跳过print语句)
      试一下 在线Python

    • 2 / if else 分支语法

    • 之前说的 if,是:“如果”条件满足,就做xxx
      a = 10
      if a < 100:
          print("a < 100")

    • if else 表示的意思是 “如果”条件满足,就做xxx否则 就做 yyy
      a = 10
      if a < 100:
          print("a < 100")
      else:
          print("a >= 100")

    • 注意哦,ifelse 两个代码段只会执行1个
    • 思考:这段代码输出什么?

    试一下 在线Python

    • 现在改一下代码:
      a = 10
      if a < 100:
          print("a < 100")
      print("a >= 100")

    • 这次你再思考一下会输出什么?再改一下a=100,由输出什么?
      试一下 在线Python

    • 来个图示会更好理解


      image.png

    数据结构
    • 我们平常总说,程序由 数据结构算法 组成
    • 其实写程序也很像是写文章,数据结构 就是文章里的 名词 ,算法 就是动词
    • 我们学过的基本数据有 整数 字符串 浮点数 布尔值 None 列表 字典
    • 很有意思的是,现实中的数据不管是什么结构,都可以用这些类型组合表示。
    • 我们并不缺表示方法,只是缺少从现实问题设计出合适的 结构 的能力。
    • 比如:如何表示1号线和2号线合起来的地铁线路?( 更多线路先不考虑,太复杂了)
    • 注意:这个结构要方便我们计算最优的地铁问路算法.
    1和2号线合体
    • 思考一下:先把各个站点简化表示为a b ...
    • 可以用字典存储吗?
      d = {'a':'b', 'b':'c'} #这也是之前的表示方法
    • 如果用一个d 来表示 1,2号两个地铁可以吗?(注意:换乘站问题)
    • 现在我们注意到,换乘站 问题是最关键的。
    • 既然不能同时用一个d 表示两条线,那我们就创建2个字典
    • d1 = {'a':'b', 'b':'c'} d2 = {'a1':'b1', 'b1':'c1'}
    • 思考一下: 当问路的起始站 和 终点站不在1条线(比如起始站在1号线,终点在2号线)?
    • 这个时候,我们肯定要用上换乘站。所有需要一个结构存储换乘站信息,用什么好呢?
    • 可以用列表,list = ['复兴门', '建国门']
      试一下 在线Python

    算法
    • 问路算法


      1和2号线合体

    d1 = {'a':'b', 'b':'c'} #1号线
    d2 = {'a1':'b1', 'b1':'c1'} #2号线
    huan = ['复兴门', '建国门']

    • 现在,我们考虑一下问路问题?
    • 其中最要紧的是 换乘问题?对吧!

    试一下 在线Python


    综合运用

    目录

    0基础教程金哥Python自学笔记P0~变量与运算
    0基础教程金哥Python自学笔记P1~循环与控制

    相关文章

      网友评论

        本文标题:《金哥百变Python零基础教程7》~实战x

        本文链接:https://www.haomeiwen.com/subject/glwpahtx.html