大家好 这个部分我们来综合地说一下 Python当中的标准输入输出 以及顺便提一下函数式编程和 用函数式编程里面的函数解决 输入输出的某些问题 输入输出大家应该都很熟悉了 输入函数就是用input() 提示是可以省略的 返回类型是str 而输出函数是print() 这里重点有两个参数sep和end 就是对象之间的分隔符 默认是空格 而end的默认值是换行符 也就是表示print()函数输出完成后 会自动换行 下面我们来看两组输入输出的任务 第一组是输入 先来看第一个例子 大家可以思考一下 怎么样输入也就是写什么样的输入 语句能够获得两个字符串 比如说输入的是这样的字符串 “abc def”或者是这样的形式 这是第一个问题 第二个问题 怎么样写输入语句可以获得 两个整数 比如说我们的输入是这样 第三个问题 怎么样输入以后可以获得一个元素 都是数值型的列表 比如说这样来输入 或者直接输一个列表 这是一组输入任务 再来看输出任务 怎么样在输出数据中加入一个 非空白的分隔符 比如说数据是12和345 假设要输出的时候是12,345 第二个问题是怎么样换行 输出所有的数据 比如说12和345 12在第一行 345在第二行 第三个问题 怎么样将循环输出的所有数据 放在同一行输出 我们想 这个问题是不是还是非常常见 我们在循环里面假设要输出 满足条件的一些数据 一般不会把它一行一行地输出 因为数据常常是非常得多 我们需要把它放在一行上 比如说中间用空格来分隔 这怎么做呢 下面就来试验一下 先来看输入任务 看第一个 怎么样输入可以获得两个字符串 假设输的是这样或者是这样的形式 我们试一下 x,y = input()输入提示语 就简单一点 我们想 这样可不可以呢 应该是不可以的 因为我们需要把输入的结果 给x y两个变量 应该能想到 可以用split()这样的方法把 我们输入的字符串分成两块 split()的参数默认是空白字符 这边提醒一下 空白字符除了空格以外像换行符 这样的也都是空白字符 我们在处理有一些比如说 文章等等的时候 我们尽量不要写成这样的方式 因为这样的话 换行符它就读不到了 我们来输入abc def 我们看x和y是不是分别就是 字符串’abc’和’def’ 我们再来看 假设我们的输入是这样子的 显然我们split()后面是不是 只要用逗号作为分隔符就可以了 只要改写一下就可以了 Ok, 下面一个任务 怎么样输入获得两个整数 这个任务的话方法有很多 可以获得字符串以后 把它转成整数 但是比较简单的做法是这样子的 大家可以看一下 用eval()这个函数 我们看一下x和y是不是就是 我们要的两个整数 很方便吧 再来看下面的任务 输入以后获得一个元素 均为数值型的列表 这边是两种不同的输入方式 这个输入其实也是通过eval() 我们可以来试一下 假设我们直接输的是这样的形式 我们可以在eval()调用结束后 用list()函数把结果转换一下 我们看一下lst 是不是很方便获得了我们要的列表 假设这样输得话 怎么处理呢 想一想 大家猜到了吧 是不是只要这样就可以了 非常方便吧 所以在输入的时候我们 可以多用eval()这样的一个函数 非常的方便 它可以把我们输入的字符串 当作有效的表达式来求值 所以假设你是整型它就转成整型 浮点型它就会转成浮点型 你输入的是一个列表 它就是一个列表 这个是输入部分 我们再来看输出 输出的第一个任务是如何在 输出数据中加入一个非空白分隔符 大家想 这个是不是很简单 我们的输出对象之间的分隔符 是不是用sep这个参数来指定的 所以我们就可以这样 假设x,y的值是分别是 4和5 x y sep 比如说用逗号来分隔 是不是就4和5 这是第一个任务 第二个是 换行输出所有的数据 其实这个问题我们想默认 是不是就有这样子的 所以接着写两个输出语句的话 结果就是这样 比如说print(x);print(y) 是不是就换行了 再来看第三个 怎么样循环输出所有的数据 并且在同一行输出 我们假设是这样for i in range (1,5)就1,2,3,4 print(i) 把这个1 2 3 4放在同一行上 并且中间用一个空格来分隔 我们是不是这样就可以了 这个也是非常常见的使用 输入输出我们综合地来看 一些比较常见的需要 并且比较简便的方法 我们可以这样来实现 除了用这样的方式以外 还可以通过列表解析来 解决类似的问题 假设输入是这样子的 输入12,3.4,678 这个列表就是由多个字符串构成的 那怎么样把这几个字符 串变成数值类型呢 我们就可以用列表解析的方法 我们把每个item转换一下 什么样的item呢 for item in lst 这样是不是就可以了 把它复制给一个新的变量就可以了 除了列表解析以外 我们还可以用函数式编程里面的 另外一个函数map()函数来解决 这样的一个问题 我们下面就来简单说一下 函数式编程 Python中的函数式编程主要是 由3个基本函数 map(),reduce()和filter() 和1个算子lambda来构成的 我们来看一下这3个函数的应用 我想大家一看就明白了 第一个是非常常用的map() 大家观察一下 假设我有个列表是这样子的 然后做了这个处理以后结果是这样 map()函数就是接收 一个函数和一个列表 然后把函数逐一映射 也就是map到列表的每个元素上 我们看到 对于每个x变成x的2倍 所以我们看到原来的这样一个列表 是不是就变成这样一个列表 还是蛮简单的吧 这个用的非常得多 这是第一个函数 第二个是filter() 先观察一下函数的功能是x%2==0 这边一个列表 它的参数的方式是不是也是一样的 就是一个函数加一个列表 最后我们看到 结果是2,4,6 也就是 满足这个条件的所有的元素 我们是不是可以想 filter()函数 它是不是就是筛选出列表当中 满足条件的元素 再来看第三个 reduce() reduce()在functools 这个模块中 我们也先观察一下这个结果 有没有看出来 reduce()其实跟map()很像 只不过它是递归地去计算 这个结果直到这个列表结束 所以x和y就是1,2 所以第一个结果就是1+2=3 然后3+3=6 6+4=10 10+5=15 所以结果是15 这个就是函数式编程的简单的例子 大家平时的话有一些 函数也可以用一下 特别是map()函数会用的比较多 有的时候用上以后的话会 比较地省事 好 我们就来试一下 怎么通过map()函数把这个 列表当中的类型进行转化 比如说假设我们实现 同样的这个任务 我们是不是只要这样 因为map()返回的是一个map对象 所以用list()把它转化一下 map() 第二个参数是list 第一个参数要怎么写就行呢 是不是只要写eval()就可以了 这样的话就转换了 然后把它的结果 赋给一个新的变量lst1 lst1里面的 每个元素都是数值型 假设要把它们转成字符串 怎么办呢 是不是也很简单 map(str,lst1) 还是很方便吧 接下来我们再考虑一个问题 假设我有一个列表 它里面有两个字符串 我们想把这两个字符串转成大写 也就是全部变成大写 这个怎么处理呢 还是用map()函数 大家来思考一下 大家看一下 能不能用这样的方式 map(upper, lst) 来对每一个列表的字符串进行处理 不对 为什么呢 如果这样成立的话是不是 也就意味着这样是成立的 对不对 但事实上并不是这样子的 实际的处理是不是这样 所以在定义函数的时候就要注意了 可以这样来写 所以定义函数特别要注意 这样就对了(修改成map(str.upper, lst)也是可以的) 所以要注意一下这里面不同的 函数、方法的运用 当然重点是要理解map()的功能 我们就简单说一下函数式编程 大家可以跟着试验一下 如果对函数式编程有兴趣的 小伙伴们还可以继续再深入去理解 挺有意思的 当然我希望不光是我觉得挺有意思 还要你觉得挺有意思