变量类型 相加运算 回忆上次内容
  • 上次讲了是从键盘输入变量
  • input 函数
  • 可以有提示字符串
  • 需要有具体的变量接收输入的字符串
 
  • 输入单个变量没有问题
  • 但是输入两个变量之后
  • 一相加就非常离谱
 

 
添加图片注释,不超过 140 字(可选)
 
  • 怎么办呢?
基本实验
  • 回到 游乐场
  • 做个 实验
 
  • 两个整数 相加
  • 结果是求和
 
  • 两个字符串 相加
  • 结果是字符串拼接
 

 
添加图片注释,不超过 140 字(可选)
 
  • 目前的结果
  • 显然来自于拼接
 
  • input()进来的东西
  • 真的 都是字符串
 
确定类型
  • type()函数
  • 可以确定变量的类型
  • 比如 type("1")
 
  • 那么
  • 能把接收 input()的变量类型
  • 输出出来么?
 
 

 
添加图片注释,不超过 140 字(可选)
转化函数
  • 从 input()来的
  • 肯定是 字符串类型的变量
  • 需要 转化为 数字类型
  • 然后 再相加
 

 
添加图片注释,不超过 140 字(可选)
 
  • 好了
  • 思路有了
 
  • 整合到原来的 py 程序中吧
整合到一起
  • input 得到的是字符串 a,b
  • 需要做加法的是数字
  • 要数字相加
  • 不要字符拼接
 
#!/usr/bin/python a = input("How many apples do you got?\n") print("You got " + a + " apples!") b = input("How many bananas do you got?\n") print("You got " + b + " bananas!") total = int(a) + int(b) print("You got " + total + " fruits!")
  • 所以要把字符串 a、b 转化为 int 数字
  • 所以 total=int(a)+int(b)
 
运行结果

 
添加图片注释,不超过 140 字(可选)
 
  • 第7行出了问题
  • 字符串类型变量 和 数字类型变量
  • 不能相加
 
 

 
添加图片注释,不超过 140 字(可选)
 
  • 最终输出 要使用字符串连接
  • int 型(数字型)的变量 total
  • 不能 implicitly隐式地
  • 转化为 str 型(字符串类型)
 
 
  • 怎么办?
  • ctrl+z
  • 将vi挂起
  • 撤到游乐场
 
 
字符串转化为数字
  • 先试试能否 explicit 显示 转化

 
添加图片注释,不超过 140 字(可选)
 
  • 这样就可以 把整型数字变量 转化为字符串变量
  • 然后就可以 和字符串 拼接了
  • 这也是 python之禅 里面的一句话
  • Explicit is better than implicit
 
  • 怎么理解呢?
plicare
  • plicare是拉丁语词根折叠
  • ex往外
  • explicit
  • 展开了
  • 掰开了
  • 揉碎了
  • 说清楚了
 
 
  • im往里
  • implicit
  • 折叠了
  • 遮盖了
  • 掩藏了
  • 暗示了
 
 
 
  • Explicit is better than implicit
  • 明了胜于晦涩
 
"1" + 2
  • "1" + 2
  • 报错了
 

 
添加图片注释,不超过 140 字(可选)
 
  • 不接受隐式地类型转化
  • 要显示地转化
 
  • 明了胜于晦涩
  • Explicit is better than implicit
 
1 + "2"
  • 这次说的更明确

 
添加图片注释,不超过 140 字(可选)
 
  • +号的两端不能分别是 int 和 str
  • 要么转前面
  • 要么转后面
  • 两边应该是同样类型的
 
  • 明了胜于晦涩
  • 这句话确实
  • 真有禅机
 
 
  • 这 python之禅 还说了些什么?
  • 是名人名言么?
 
python 之禅
  • 这是Tim Peters写的

 
添加图片注释,不超过 140 字(可选)
 
  • 在游乐场
  • import this
 
翻译
  • python 之禅 by Tim Peters
  • 优美胜于丑陋(Python 以编写优美的代码为目标)
  • 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
  • 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
  • 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
  • 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
  • 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
  • 可读性很重要(优美的代码是可读的)
  • 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
  • 不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
  • 当存在多种可能,不要尝试去猜测而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
  • 虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )
  • 做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
  • 如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
  • 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)
 
  • 这些并不是挂在墙上的名言
  • 而是可以用的
  • 怎么用呢?
 
  • exit()退出游乐场
  • fg 回到 vim
转化之后 #!/usr/bin/python a = input("How many apples do you got?\n") print("You got " + a + " apples!") b = input("How many bananas do you got?\n") print("You got " + b + " bananas!") total = int(a) + int(b) print("You got " + str(total) + " fruits!")
  • 这个东西终于成功了

 
添加图片注释,不超过 140 字(可选)
 
  • 突发奇想
  • 这最后一句不是要字符串么?
 
  • 我是不是可以去掉这双引号
  • 直接把 str(total)放进去?
 
转化之后 #!/usr/bin/python3 a = input("How many apples do you have: ") print("You have got " + a + " apples!") b = input("How many banana do you have: ") print("You have got " + b + " bananas!") total = int(a) + int(b) print("You have got + str(total) + fruits in all!")
  • 可以运行么?
尝试
  • 事实证明不行
  • 哈哈哈
  • 加号就是用来拼接的
 

 
添加图片注释,不超过 140 字(可选)
 
  • 写在里面就原样输出了
  • "You got " + a + " apples!" 的 + 号不是装饰
  • 而是 进行拼接运算 的
 
  • 把变量 a 融到字符串里面去的
 
总结
  • 变量相加
  • 整型数字变量可以相加
  • 字符串变量也可以拼接
 
  • 但是
  • 字符串 和 整型数字
  • 整型数字 和 字符串
  • 不能相加
 
  • 怎么办?
  • 转格式
  • int("1")
  • str(2)
 
  • 可是
  • 如果输入的苹果数量是
  • 字符串"abc"
 
  • int("abc")会发生什么??
 


[oeasy]python0137_相加运算_python之禅_import_this_显式转化的更多相关文章

  1. python自动类型转换(针对于Number数据类型来的)精度从低到高 bool->int-> float->complex 当两个不同是数据类型运算时候,默认想更高进度转化

    # ### 自动类型转换(针对于Number数据类型来的) ''' 精度从低到高 bool->int-> float->complex 当两个不同是数据类型运算时候,默认想更高进度转 ...

  2. [C#] 走进 LINQ 的世界

    走进 LINQ 的世界 序 在此之前曾发表过三篇关于 LINQ 的随笔: 进阶:<LINQ 标准查询操作概述>(强烈推荐) 技巧:<Linq To Objects - 如何操作字符串 ...

  3. LINQ 的使用

    [转]链接:cnblogs.com/liqingwen/p/5832322.html LINQ 简介 语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET Framewo ...

  4. .NET LINQ基本查询操作

    获取数据源      在 LINQ 查询中,第一步是指定数据源.像在大多数编程语言中一样,在 C# 中,必须先声明变量,才能使用它.在 LINQ 查询中,最先使用 from 子句的目的是引入数据源 ( ...

  5. Java Data Type

    官方文档:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 转载地址:http://blog.csdn.n ...

  6. 面试准备(四)Java基本数据类型

    Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed ...

  7. Java基础-基本数据类型转换案例

    java基本数据类型八中 byte = Byte short = Short char = Character int = Integer long = Long float = Float doub ...

  8. 【转】Java基本数据类型

    原文网址:http://blog.csdn.net/bingduanlbd/article/details/27790287 Java语言是静态类型的(statical typed),也就是说所有变量 ...

  9. 转载 Java基本数据类型

    Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed ...

  10. JAVA 第二天 基本数据类型

    在栈中可以直接分配内存的数据是基本数据类型.引用数据类型:数据的引用在栈中,但他的对象在堆中. 基本数据类型,小可转大,大转小会失去精度 第一类:逻辑型boolean 第二类:文本型char 第三类: ...

随机推荐

  1. kubernetes之python调用

    安装 sudo pip3 install kubernetes 认证 首先引入SDK支持库.然后将 ~/.kube 的config文件的内容复制到本地目录,保存为文件kubeconfig.yaml,然 ...

  2. jQuery——链式操作

    链式操作,即连续操作. 例如: <!DOCTYPE html> <html> <head> <script src="https://cdn.boo ...

  3. H.264码流解析

    这一篇内容旨在对H.264码流中的一些概念做简单了解. 1.概念了解 VCL:Video Coding Layer视频编码层,它是H.264(AVC)编码中的核心,负责视频数据的编码工作.VCL层会应 ...

  4. 前端使用 Konva 实现可视化设计器(12)- 连接线 - 直线

    这一章实现的连接线,目前仅支持直线连接,为了能够不影响原有的其它功能,尝试了2.3个实现思路,最终实测这个实现方式目前来说最为合适了. 请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 ...

  5. 常用的注意力机制模块(SE、CBAM)

    [深度学习]总目录 SE论文:<Squeeze-and-Excitation Networks>将重点放在了通道(channel)关系上,并提出了一种新的结构单元SE block.将SE ...

  6. 算法学习笔记(45): 快速沃尔什变换 FWT

    遗憾的是 math 里面一直没有很好的讲这个东西--所以这次细致说说. FWT 的本质 类似于多项式卷积中,利用 ntt 变换使得卷积 \(\to\) 点乘,fwt 也是类似的应用. 定义某种位运算 ...

  7. 剑指Offer-61.序列化二叉树(C++/Java)

    题目: 请实现两个函数,分别用来序列化和反序列化二叉树   二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存.序列化可以基于先序 ...

  8. kettle从入门到精通 第十七课 kettle Transformation executor

    Transformation executor步骤是一个流程控件,和映射控件类似却又不一样. 1.子转换需要配合使用从结果获取记录和复制记录到结果两个步骤,而子映射需要配合映射输入规范和映射输出规范使 ...

  9. The sultion of P4959

    problem & blog 首先我们看到 \(x,y\) 有可能为负数,所以我们先把它旋转到第一象限. 然后我们发现如果 \(x_a \ge x_b\) 且 \(y_a \ge y_b\) ...

  10. 使用 OpenTelemetry 构建可观测性 04 - 收集器

    在之前的博文中,我们讨论了如何使用 SDK 和链路追踪生产者来导出进程中的遥测数据.尽管有多种类型的导出器可供选择,但其中一个常见的目标是将数据导出到 OpenTelemetry Collector. ...