Python - 输入输出

Python中的print函数是向我们展示输出内容,那我们如何向程序输入内容呢?这种需求,可以通过通过另一个函数input来实现。

username = input()  
print(username)  

如果你动手敲了代码并执行的话,你就可以看到,程序好像卡着了,其实是程序并没有结束,而是input函数在执行,程序被阻塞,等待我们输入一个值。当我们输入并回车确认之后,input函数将输入的内容赋值给username变量,然后print函数打印出来,我们来改动一下程序,使之更友好一些:

>>> username = input('please enter your name:')      # 输入oldboy  
please your name:oldboy  
>>> password = input('please enter your password:')  # 输入123  
please your password:123  
>>> print(username, password)  
('oldboy', '123')  

注意:input函数返回的是字符串,也就是说变量的类型是字符串类型,比如:

>>> num=input("enter num: ")  
enter num: 12  
>>> num, type(num)  
('12', <class 'str'>)  

提示:type为Python的内置函数,功能是打印某个变量的数据类型。其中,str在Python中代表字符串,注意,字符串不能用来进行数字计算。

>>> num + 100  
Traceback (most recent call last):  
  File "<stdin>", line 1, in <module>  
TypeError: Can't convert 'int' object to str implicitly  

想要计算,必须将字符串类型的数字转换为数字类型才能计算,用到int函数:

>>> int_num = int(num)  
>>> print(int_num + 100, type(int_num))
(112, <class 'int'>)  

print函数能接受多个字符串,字符串之间以逗号为分隔符,在打印时会依次打印每个字符串,遇到一个逗号,则打印一个空格:

>>> print('i', 'am', 'oldboy')  
i am oldboy  

让我们再次对程序进行优化:

>>> username = input('enter name:')  # 输入 oldboy
enter name:oldboy  
>>> password = input('enter password:')  # 输入 123
enter password:123  
>>> print("用户名:%s | 密码:%s" %(username, password))  
用户名:oldboy | 密码:123  

上面的程序是不是更加友好了,是的,我们在不知不觉间又学到了一个新的知识点,格式化输出与占位符,顾名思义,格式化输出就是按照某种固定的格式进行字符串输出,而占位符呢,就是先固定一个字符串格式,涉及到这个变化的内容,用%s占住位置,字符串后面跟一个%(),括号内,按照顺序,依次存放对应的变量值,如果之后一个占位符,则不用括号,直接跟变量名即可:

>>> username = input('enter name:')  
enter name:oldboy  
>>> print('用户名:%s' % username)  
用户名:oldboy  

'gbk' codec can't encode character '\ufffd' in position 1636: illegal multibyte sequence

有的Windows系统下,执行print会报错'gbk' codec can't encode character '\ufffd' in position 1636: illegal multibyte sequence,这个意思是gbk编码解码了一串字符串,但这个字符串的编码不是gbk的,导致编码不同解不开而报的错。
什么原因呢,这里首先要说明下,Windows系统的默认字符编码是gbk,如果你的数据是utf-8的话,就会导致报错。并且这个报错是偶然的,并不是所有Windows电脑都会遇到。
那么在print中报这个错,是因为print内部调用了stdout来输出打印结果的,这个stdout输出打印结果时,使用的编码调用了系统的默认编码,也就是gbk,进而导致gbk编码无法解码UTF-8的字符串。
如果你的代码报了上面的错误,那么你可以在报错代码之前打印下此时stdout使用的编码:

import sys
print(sys.stdout.encoding)  # gbk

那么解决方案就是,将stdout的编码调整为utf-8编码:

import sys
# 调整之前
# print(1111, sys.stdout.encoding)  # gbk
sys.stdout.reconfigure(encoding='utf-8')  # 指定print输出的字符编码
# 调整之后
# print(sys.stdout.encoding)  # utf-8

你只需要将上面的两行代码放到你报错代码执行之前的某个位置,就行了。


欢迎斧正,that's all
posted @ 2019-03-15 10:15  听雨危楼  阅读(373)  评论(0编辑  收藏  举报