Python的交互和注释介绍
Python程序交互
如何能让Python识别读取用户的输入,就像windows安装程序那样傻瓜式的交互呢,下面我们简单介绍一下Python的交互输入输出。
实例代码如下:
#!/usr/bin/env python3
# encoding: utf-8
username = input("Please enter your username:")
password = input("Please enter your password:")
print("Your name is %s, Your Password is %s" % (username, password))
代码执行结果为:
$ python3 py_input.py
Please enter your username:nock
Please enter your password:fashengba.com
Your name is nock, Your Password is fashengba.com
执行脚本的时候你会发现,程序在等待你输入用户名和密码后才会继续往下走。
说明: Python的交互式输入使用的是内置函数
input()
实现的,但是在Python2.7.x
版本的时候可以同时使用raw_input()
和input()
函数,但是在Python3.5.x
版本就没有raw_input()
函数了,只能够使用input()
。
那input
和raw_input
有什么区别呢,我们这里简单说明一下:
#!/usr/bin/env python2
# encoding: utf-8username = raw_input("Please enter your username: ")
password = input("Please enter your password: ")
print("username type is:", type(username), "password type is:", type(password))
结果如下:
$ python py_raw_input.py
Please enter your username: nock
Please enter your password: 123456
('username type is:', <type 'str'>, 'password type is:', <type 'int'>)$ python py_raw_input.py
Please enter your username: 123
Please enter your password: fashengba
Traceback (most recent call last):
File "py_raw_input.py", line 5, in <module>
password = input("Please enter your password: ")
File "<string>", line 1, in <module>
NameError: name 'fashengba' is not defined
从上面结果我们可以看到在Python2.7.x
版本下raw_input
会把接受的任何内容都当做字符串处理而input
只能接受int
类型的输入,否则就会把用户输入当做一个变量来处理,从而就会报NameError: name 'xxx' is not defined
的错误。Python3为了简洁统一,在Python3中已经不存在了raw_input
函数,input
一个函数完全可以做到所有使用,而且默认input
接受任何输入都当做str
类型处理。
平常如果我们用针对密码、密码串之类的交互的话,一般用户的输入时隐藏或者*的,输入密码时,在Python下如果你需要你输入的东西不可见,可以利用getpass 模块中的 getpass方法来处理,示例如下:
#!/usr/bin/env python3
# Author: nock.chen
# _*_coding:utf-8_*_#导入getpass模块
import getpass# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass("请输入密码:")# 打印输入的内容
print("Password is",pwd,"***print end")#比如我输入110119,执行过程和结果如下:
请输入密码:
Password is 110119 ***print end
Python代码的注释
随着学习的深入,当你利用Python写复杂程序的时候有上千上万行代码,有些代码你花了很久写出来,过了些天再回去看,发现竟然看不懂了,哈哈,这太正常了。 另外,你以后在工作中会发现,一个项目多是由几个甚至几十个开发人员一起做,你要调用别人写的代码,别人也要用你的,如果代码不加注释,你自己都看不懂,更别说别人了,这样写会挨打的。所以为了避免这种尴尬的事情发生,一定要增加你代码的可读性。
而注释就能很大程度减少这一麻烦,写代码养成标注注释这是一个非常好的习惯。
单行注释:# 开头就好,跟shell一样
多行注释:成对的三个单引号 ‘’’ 注释内容 ‘’’ 或者 成对的三个双引号 “”” 注释内容 “”” , 养成一致习惯,多行统一用""" """
就好
下面给大家看一段标准代码的注释,忽略代码意思
try:
# OpenSSL's PKCS5_PBKDF2_HMAC requires OpenSSL 1.0+ with HMAC and SHA
from _hashlib import pbkdf2_hmac
except ImportError:
_trans_5C = bytes((x ^ 0x5C) for x in range(256))
_trans_36 = bytes((x ^ 0x36) for x in range(256))def pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None):
"""
Password based key derivation function 2 (PKCS #5 v2.0)This Python implementations based on the hmac module about as fast
as OpenSSL's PKCS5_PBKDF2_HMAC for short passwords and much faster
for long passwords.
"""
if not isinstance(hash_name, str):
raise TypeError(hash_name)if not isinstance(password, (bytes, bytearray)):
password = bytes(memoryview(password))
if not isinstance(salt, (bytes, bytearray)):
salt = bytes(memoryview(salt))# Fast inline HMAC implementation
inner = new(hash_name)
outer = new(hash_name)
blocksize = getattr(inner, 'block_size', 64)
if len(password) > blocksize:
password = new(hash_name, password).digest()
password = password + b'x00' * (blocksize - len(password))
inner.update(password.translate(_trans_36))
outer.update(password.translate(_trans_5C))
代码注释原则:
- 不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可
- 注释可以用中文或英文,但绝对不要拼音噢,最好也不要英中文交叉
- 简单易学的机器学习算法——马尔可夫链蒙特卡罗方法MCMC
- 推荐算法——基于图的推荐算法PersonalRank算法
- 推荐算法——非负矩阵分解(NMF)
- 【Go 语言社区】转-golang windows 判断锁屏
- 【Go 语言社区】单点redis 持久化在高并发下存在延迟情况
- 设计模式(2)-策略模式之多用组合少用继承
- Golang获取随机端口和本机ip地址
- 设计模式(3)-装扮你的类(装饰模式)
- [Go 语言社区]服务器读取配置文件只-json数据
- gsoap开发webservice
- [Go 语言社区]测试模块之---utf8例子
- org.hibernate.type.StringType cannot be cast to org.hibernate.type.VersionType
- JBPM4.4(2)-state结点和decision结点
- [Go 语言社区] Golang架构底层---日志函数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android开发实现的内存管理工具类
- Android日期和时间选择器实现代码
- Android开发实现ImageView加载摄像头拍摄的大图功能
- Android开发实现的Intent跳转工具类实例
- Android开发中的文件操作工具类FileUtil完整实例
- Android开发中超好用的正则表达式工具类RegexUtil完整实例
- Android ijkplayer的使用方法解析
- Android开发实现查询远程服务器的工具类QueryUtils完整实例
- 解决android studio 3.0 加载项目过慢问题–maven仓库选择
- Android实现朋友圈点赞列表
- Kotlin基本类型自动装箱一点问题剖析
- Kotlin入门教程之开发环境搭建
- Android:Field can be converted to a local varible.的解决办法
- Android使用多线程进行网络聊天室通信
- android实现banner轮播图无限轮播效果