1-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