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. 1282 时钟(最小表示法+hash)

    1282 时钟 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N个时钟,每个时钟有M个指针,P个刻度.时钟是圆形的,P个刻度均分整 ...

  2. 巨蟒python全栈开发django10:ajax&&登录认证

    通过题目进行知识点回顾: 聚合查询 From django.db.models import Avg,Min,Max,F,Q,Count,Sum #查询书籍的平均值 Ret= Models.Book. ...

  3. AJAX 异步传数组时候,后台接收不到!

    呵呵,那么问题又来了! 这是为啥呢!! var ids= []; $.ajax({ url: 'xxxx.do', data: { ids: ids}, dataType: "json&qu ...

  4. JavaScript确定一个字符串是否包含在另一个字符串中的四种方法

    一.indexOf() 1.定义 indexOf()方法返回String对象第一次出现指定字符串的索引,若未找到指定值,返回-1.(数组同一个概念) 2.语法 str.indexOf(searchVa ...

  5. Django之REST_framework 框架基本组件使用

    快速实例 快速实例: 点击查看官方文档 阅读推荐:点击查看 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如j ...

  6. 2、Python request、BeautifulSoup(download mm_pic)

    import requests from bs4 import BeautifulSoup import os class DownLoadImg(object): def __init__(self ...

  7. Hub,bridge,switch and router的区别

    首先说HUB,也就是集线器.它的作用可以简单的理解为将一些机器连接起来组成一个局域网.而交换机(又名交换式集线器)作用与集线器大体相同.但是两者在性能上有区别:集线器采用的式共享带宽的工作方式,而交换 ...

  8. 剑指offer 面试13题

    面试13题: 题目:机器人的运动范围 题:地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子 ...

  9. mysql用户管理(新增用户及权限管理)

    一.登录: # mysql  –u  root  –p  回车输入密码 退出: #exit; 二.修改密码: 格式:mysqladmin  –u 用户名 –p旧密码  password  新密码 # ...

  10. Android下拉快捷设置面板添加快捷开关流程

    快速设定面板上快捷开关的加载流程,包括图标等的加载和点击事件等的处理过程,以及创建一个快捷开关的主要过程(以增加一个锁屏开关为例).本文所讨论的Android版本为5.1. 快捷开关的加载流程 资源模 ...