print 和 input

print

我们在课程最开始的时候就讲过 print,在版本2的使用方法是:

print 'this is version 2'

也可以是

print('this is version 2')

但到了3,就只能加上括号,像一个函数一样来使用 print:

print('this is version 3')

假如你看了基于2的教程(比如我写的),然后又装了python 3,可能就会奇怪为什么完全照着写,结果却不一样。

input

而 input 就更绕一点。2里面有两个用来从命令行接受输入的函数:input 和 raw_input。

value = input()

input 接收的是一个值或变量,也就是说,你如果输 123,程序接收到的就是整数 123,你输 True,就是 bool 值 True。如果你输了 abc,程序会认为这是一个叫做 abc 的变量,而假如你没有定义过这个变量,就会报错。

所以,当你想用 input 得到一段文字的话,必须把文字写在引号 "" 或 '' 中。

text = raw_input()

raw_input 接收的则是你输入的字符串,而不管你输的是什么内容。如果你直接拿 raw_input 得到的“数字”去比较大小,则会得到奇怪的结果。

在版本3里,为了减少混乱,这两种输入方式被合并了。只是合并的方式又坑了新手:它保留了 input 这个名字和 raw_input 的效果。3里只有input函数,它接收你输入的字符串,不管你输的是什么。

text = input()

这种情况下,不管你是看着3的教材用2,还是看着2的教材用3,都会踩到这个坑。3里直接拿 input 得到的“数字”比较大小,会报错类型不同无法比较。

那么在3里,如何像2一样得到用户输入的一个值呢?方法是 eval_r():

value = eval_r(input())

或者,如果你只是需要一个整数值,也可以:

value = int(input())

除了一开始越到的这两个坑外,还有其他一些可能遇到的变动,这里以3与2相比的差异来说:

  • 打开文件不再支持 file 方法,只能用 open

  • range不再返回列表,而是一个可迭代的range对象

  • 除法 / 不再是整除,而是得到浮点数,整除需要用双斜杠 //

  • urllib和urllib2合并成了urllib,常用的urllib2.urlopen()变成了urllib.request.urlopen()

  • 字符串及编码相关有大变动,简单来说就是原来的str变成了新的bytes,原来的unicode变成了新的str。

python 2 到 3 的新手坑的更多相关文章

  1. Python练习-生成器-一个生成器被坑的体无完肤

    代码如下,尽可能独立阅读: # 编辑者:闫龙 from urllib.request import urlopen #导入一个包,这就是egon留的一个坑 def get(url):#这是为了保证题目 ...

  2. 初次撸Python,踩平些小坑~

    [转义字符] os.path.isdir(targetPath)总是报错,以为字符串不行而是要转成file类型,尝试了很多方法还是没解决,最后发现,windows下的路径中字符串中需要转义(例子在网上 ...

  3. python中json.dumps使用的坑以及字符编码

    我们知道,python中的字符串分普通字符串和unicode字符串,一般从数据库中读取的字符串会自动被转换为unicode字符串 下面回到重点,使用json.dumps时,一般的用法为: >&g ...

  4. 记一次 Apache HUE 优化之因使用 Python 魔术方法而遇到的坑

    最近的工作是基于 Apache HUE 做二次开发.刚接手 HUE 的代码的时候,内心是崩溃的:开源的代码,风格很多种, 代码比较杂乱; 虽是基于 Django 开发的,但是项目的结构改变很大; 很多 ...

  5. 在Deepin系统上装Python 3.8遇到的那些坑

    - 作为一天时间在Deepin上都没装好Python的代表,我感觉有必要记录一下我自己的解决方法 坑1-- SSL/TLS 字样错误 "pip is configured wih locat ...

  6. 踩的python列表及for循环一个坑儿

    一个列表循环的问题,困扰了半个小时,我也是醉了,值得深思 下面开始提需求: 一个列表mylist = [{'tag':1,'num' :5000},{'tag':2,num: 6000},{'tag' ...

  7. python开发中常见的小坑

    (1)可变参数类型作为函数参数默认值,函数参数默认值的设置在Python中只会被执行一次,也就是定义该函数的时候. 解决办法,设置为None,然后判断 (2)Python中的变量名解析遵循所谓的LEG ...

  8. python --appium搭建环境过程 ---新手总结(大牛勿喷,新手互相交流)

    首先安装python 安装包:https://yunpan.cn/cSdYZqjJ4xDZ3  访问密码 4bf9 1.安装pip   cd 到pip安装包  python setup.py inst ...

  9. Python连接MySQL数据库中各种坑

    第一个坑 要想连接数据库,我们必须拥有MySQL-python这个模块,首先,我在安装这个模块的时候就到了第一个大坑. 常规安装方法:进入cmd 使用 pip install MySQL-python ...

随机推荐

  1. 查看java进程的所有信息

    查看java 进程下的所有信息 ll /proc/pid/fd ru:ll /proc/24047/fd

  2. oracle 查看表是否被锁

    --以下几个为相关表SELECT * FROM v$lock;SELECT * FROM v$sqlarea;SELECT * FROM v$session;SELECT * FROM v$proce ...

  3. C# MD5加密与校验 引用

    using System; using System.Security.Cryptography; using System.Text; class Example { // Hash an inpu ...

  4. _utf8_encode _utf8_decode base64_encode base64_decode

    const Base64 = { // private property _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv ...

  5. tomcat 的 Pipeline 机制

    一.server.xml 在每个容器对象里面都有一个pipeline,Pipeline就像是每个容器的逻辑总线. <Host name="localhost" appBase ...

  6. Linux中权限管理之文件特殊权限

    SetUID 1.只有在可执行的二进制程序上设定SUID权限才是有意义的 2.命令执行者要对该程序拥有执行权限 3.命令执行者在执行该程序时获得该程序文件属主的身份 4.SetUID权限只在该程序执行 ...

  7. PhoneGap 兼容IOS上移20px(包括启动页,拍照)

    引自:http://stackoverflow.com/questions/19209781/ios-7-status-bar-with-phonegap 情景:在ios7下PhoneGap app会 ...

  8. LeetCode:对角线遍历【498】

    LeetCode:对角线遍历[498] 题目描述 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示. 示例: 输入: [ [ ...

  9. width

    position:absolute 其widht:%是想对于最近的已经定位的父元素,如果没有就想对于body widht 是指的内容区的with,设置除了width其他的元素都会使元素变的比width ...

  10. Ubuntu中输入输出重定向及管道技术简述

    输出 1.标准输出 定义:程序在默认情况下输出结果的地方(stdout). 2.输出重定向 定义:用于把数据的输出转移到另一个地方去. 3.Ubuntu中例子 $ls > ~/ls_out  # ...