【Python番外】关于 input() 与 print() 函数

前言

        在最近接触 Python 的这段时间内,遇到许多关于输出格式要求的题目(如十进制转二进制一类的)。在循规蹈矩的按照要求完成题目后,博主不免想起学习 C++ 的那些日子,尤其是接触标准库后,对于这类问题一般就是一行的事儿,根本不需要从原理上去一步一步实现。故博主十分贪心,想进一步了解在 Python 中是否也有类似于标准库这一类十分好用的 “工具”。


目录

1   input() 函数

1.1   input() 函数赋值后数据在 Python 内部的类型。

1.2   input()函数读取数据的转换

1.3   input()函数的交互性

1.4   input()函数一次读取多个变量

1.4.1   利用split()函数进行输入的分割,一般默认为空格分割符,也可以自己设置。

1.4.2   input()函数一次性输入多个变量值

1.4.3   将多个变量同时进行类型强制转换

2   print() 函数

2.1   print() 函数的语法

2.2   print() 打印输出文本

2.3   print() 中空格的使用方法

2.4   print() 换行

2.5   区隔符 sep

2.6   制表符 \t

2.7   输出数学表达式

2.8   打印输出反斜杠

2.9   print() 变量的输出

2.10   print() 数据的格式化输出

2.11   print() 中文输入显示乱码问题

2.12   print() 写入文件

2.13   print() 配合函数输出

2.14   print() 配合 format 格式化输出

2.15   print() 在终端输出彩色字体

2.16   一些好玩的 print() 输出实例


1   input() 函数

1.1   input() 函数赋值后数据在 Python 内部的类型。

if __name__=="__main__":
    a=input()
    print(type(a))
    b=input()
    print(type(b))
    c=a+b
    print(c)
    print(type(c))

输入及输出:

从结果可以看出,我们通过input输入的数据在python中被默认为string型即字符串类型。执行a+b得到的并不是两个数据的和,而是字符串的连接。

1.2   input()函数读取数据的转换

为了让input()函数读取的数据转换为我们想要的类型,我们可以使用类型强制转换,将数据转换为我们想要的int、float、list等类型。

实验代码:

if __name__=="__main__":
    a=int(input())
    print(type(a))
    b=float(input())
    print(type(b))
    c=a+b
    print(c)
    print(type(c))

实验结果:

1.3   input()函数的交互性

可以在()内放入需要显示的提示性语言,具体如下代码所示:

if __name__=="__main__":
    a=int(input())
    print(type(a))
    b=float(input())
    print(type(b))
    c=a+b
    print(c)
    print(type(c))
    name=input("请输入您的名字")
    print(name)
    number=input("请输入"+str(name)+"同学的学号")

结果如下:

从结果可以看出,如果想在提示语中增加变量,需要使用str(变量名),连接方式为“+”。前面已经提到,input()函数读取的变量在python中默认为string类型,因此这里不需要添加str()强制转换也可以正常输出。

1.4   input()函数一次读取多个变量

1.4.1   利用split()函数进行输入的分割,一般默认为空格分割符,也可以自己设置。
 

if __name__=="__main__":
   list1=input("请输入一个列表:\n").split(" ")
   print(type(list1))
   list2= input("请输入一个列表:\n").split(",")
   print(type(list2))
   print(type(list1[1]))

实验结果:

从实验结果我们可以看出,split()函数可以对输入字符串进行分割,且必须设定分割符,空格不可以省略,上面报错是因为没有指定分割符,分隔符是空格也不可以省略。同时,split()函数分割后返回值是列表类型,列表中每个元素是string类型。

1.4.2   input()函数一次性输入多个变量值

代码:

if __name__=="__main__":
  a,b,c=input("请输入多个变量值:\n").split()
  print(a)
  print(b)
  print(c)
  print(type(c))

结果:

 

结果分析:当我们输入的数据大于变量个数时,会报错。split()如果没有指定分割符,默认为空格,但是()内不能输入“”。分割后的变量仍然是string类型。

1.4.3   将多个变量同时进行类型强制转换

map()函数用来实现多个输入的强制类型转换,map()函数接收两个参数,一个是强制转换的类型函数,一个是序列。map()函数将将强制转换类型的函数依次作用到序列的每个元素,并将结果作为list进行返回。

代码:

if __name__=="__main__":
  a,b,c=map(int,input("请输入多个变量值:\n").split())
  d,e,f=[1,2,3]
  print(a)
  print(type(a))
  print(d)
  print(e)

 实验结果:
(1)列表可以直接赋值给多个变量。
(2)split()函数的返回值是列表。
(3)map()函数的返回值是对象。

2   print() 函数

2.1   print() 函数的语法

  print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

  将 "objects" 打印输出至 "file参数" 指定的文本流,以 "sep 参数"分隔开并在末尾加上 "end参数"。 "sep" 、 "end "、 "file" 和"flush" 必须以关键字参数的形式给出。 flush 关键字参数是在 phthon3.3 版后增加的。

  所有非关键字参数都会被转换为字符串,就像是执行了 str() 一样,并会被写入到流,以 “sep参数“ 且在末尾加上 “end参数“。 “sep参数“ 和 “end参数“都必须为字符串;它们也可以为 “None“,这意味着使用默认值。 如果没有给出 “objects参数“,则 print() 将只写入 “end参数“。

  "file 参数"必须是一个具有 write(string) 方法的对象;如果参数不存在或为 None,则将使用 sys.stdout。 由于要打印的参数会被转换为文本字符串,因此 print() 不能用于二进制模式的文件对象。 对于这些对象,应改用 file.write(...)。输出是否缓存通常取决于 file,但如果 flush 关键字参数为 True,输出流会被强制刷新。

        参数的使用可参考:Python基础(九)——print函数详解,配合参数示例详解_python print 参数_Mood Crows的博客-CSDN博客

2.2   print() 打印输出文本

        打印的文本内容不仅仅是指中文文本,还可以是英文文本或者包含特殊符号的文本,打印文本时需要使用引号将文本内容引起来,引号可以是单引号('  '),双引号(" "),三引号("""  """)

使用方法代        码运行结果
单引号一对单引号,单引号里可以用双引号,并可以将单引号打印出来print('有生命便有希望')有生命便有希望
print('"有生命便有希望"')"有生命便有希望"
双引号一对双引号,双引号里可以用单引号,并可以将单引号打印出来print("永不气馁!")永不气馁!
print("永不气馁!")'永不气馁! '
三引号一对三引号,引用多行文本

Multilinetext="""

They who cannot do as they would,

must do as they can.

不能如愿而行,

也须尽力而为。

"""

print(Multilinetext)

hey who cannot do as they would,

must do as they can.

不能如愿而行,

也须尽力而为。

2.3   print() 中空格的使用方法

方        法代        码运行结果
1直接在引号中打空格,空格数不限print("谋事在人  成事在天  有生命便有希望")谋事在人  成事在天  有生命便有希望
2相邻的两项用逗号间隔print("谋事在人","成事在天","有生命便有希望")谋事在人 成事在天 有生命便有希望
3多行打印时用逗号结尾

print ("谋事在人",)

print ("成事在天")

此版本适合python3.4

最新版的方法是:

谋事在人 成事在天  

(2个字符串之间有个空格)

4相邻的两项或多行打印时没有用逗号间隔

print("谋事在人""成事在天")

print ("谋事在人")

print ("成事在天")

谋事在人成事在天

谋事在人成事在天

5字符串间不要空格print ("谋事在人" + "成事在天")

谋事在人成事在天  

(2个字符串之间没有空格了)

2.4   print() 换行

        print()函数的“end”参数指定了print()函数在打印完内容之后,用什么符号来表示结尾,默认值是“\n”,表示换行,即print()函数在打印完指定内容之后,就会自动换行。

  我们可以通过“end”参数的定义,用其他符号来表示print()输出打印完成。例如:print()函数的“end”参数指定为“|”,即print()函数每次输出完成之后,都输出“|”。

强行换行
代码print("有生命\n便有希望")
运行结果

有生命

便有希望

打印后不换行,用 end 参数来设置你想要的结束符号
代码

print("谋事在人",end =" ")

print("成事在天", end =" ")

print("有生命便有希望", end =" ")

运行结果谋事在人 成事在天 有生命便有希望
代码

print("谋事在人",end ="|")

print("成事在天", end ="|")

print("有生命便有希望", end ="|")

运行结果谋事在人|成事在天|有生命便有希望|
代码

for x in range(0, 6):

    print(x, end=' ')

for x in range(0, 6):

    print(x, end=',')

运行结果0 1 2 3 4 5 0,1,2,3,4,5,
代码

for x in range(1, 6):

    print(x, end=' ')

print()

for x in range(1, 6):

    print(x, end=',')

print()

运行结果

1 2 3 4 5

1,2,3,4,5,

2.5   区隔符 sep

用sep参数来约束print括号里多项内容之间的区隔符
代码print("谋事在人", "成事在天", "有生命便有希望", sep ="&")
运行结果谋事在人&成事在天&有生命便有希望
代码print("www", "csdn", "net", sep=".")
运行结果www.csdn.net

2.6   制表符 \t

制表符\t控制水平间隔,作用如tab键,在打印输出时控制间隔距离

\t表示空8个字符,
如果元素占位小于8,各列能实现完美对齐,皆大欢喜;
如果字符元素占位大于或等于8个字符,对齐会出现偏差,可以再在其中插入N个\t拼起来,这样就能使元素对齐

或者使用格式化输出,具体请看实例

代码print("不能如愿而行\t也须尽力而为")
运行结果不能如愿而行     也须尽力而为
代码

for i in range (1, 11):

    print(i,'\t',i*2,'\t',i*3,'\t',i*4)

运行结果

1        2       3       4

2        4       6       8

3        6       9       12

4        8       12      16

5        10      15      20

6        12      18      24

7        14      21      28

8        16      24      32

9        18      27      36

10       20      30      40

代码

name = 'Adversity awake'

saying="Man proposes, god disposes 谋事在人,成事在天"

print(name.title()+" once said"+": "+'\n\t"'+saying+'"')

运行结果

Adversity Awake once said:

        "Man proposes, god disposes 谋事在人,成事在天"

代码

#错误print()效果距离:

print("学生号\t姓名\t科目\t分数")
print("100000101\t阿凡达\t语文\t80")
print("100000102\t卡梅隆卡梅隆\t语文\t85")
print("100000103\t莫妮卡·贝鲁卡梅隆\t语文\t85")

运行结果

# 对齐出现偏差

代码print("学生号\t\t姓名\t\t\t\t\t科目\t\t分数")
print("100000101\t阿凡达\t\t\t\t语文\t\t80")
print("100000102\t卡梅隆卡梅隆\t\t\t语文\t\t85")
print("100000103\t莫妮卡·贝鲁卡梅隆\t\t语文\t\t85")
运行结果

# 用多个制表符,对齐完好

代码

print("%-10s\t %-28s\t %-10s\t %-10s"%("学生号","姓名","科目","分数"))
print("%-10s\t %-32s\t %-10s\t %-12s"%("100000101","阿凡达","语文","80"))
print("%-10s\t %-30s\t %-10s\t %-12s"%("100000102","卡梅隆卡梅隆","语文","82"))
print("%-10s\t %-26s\t %-10s\t %-12s"%("100000103","莫妮卡·贝鲁卡梅隆","语文","85"))

运行结果# 对齐完好

 编外话:有时需要对齐输出,还可以使用format()来实现:

代码

products=[["iphone",6888],["MacPro",14800],["coffee",32],["abc",2499],
["Book",60],["Nike",699],["MacPro",45600],["coffee",432],
["abc",244499],["Book",6230],["Nike",61299],["MacPro",14800],
["coffee",32],["abc",2499],["Book",60],["Nike",699]]
print("-"*10+"商品列表"+"-"*10)
i=0
for product in products:
    print('{:<6}\t{:<10}\t{:<10}'.format(str(i), product[0], str(product[1])))
    i = i+1

运行结果

2.7   输出数学表达式

print后的括号中如果是数学表达式,则打印结果为表达式最终运算的结果

Print 打印表达式的值
代码Print(1+2+3+4+5)
运行结果15
代码print(8/1)
运行结果8.0
代码print(2*4)
运行结果8
代码print(18-10)
运行结果8
代码print(2+6)
运行结果8

2.8   打印输出反斜杠

打印反斜杠,把2个反斜杠放一起
代码Print("不能如愿而行\\也须尽力而为")
运行结果不能如愿而行\也须尽力而为

2.9   print() 变量的输出

无论什么类型的数据,包括但不局限于:数值型,布尔型,列表变量,字典变量…...都可以通过print()直接输出。

print()变量的输出
代码

#输出数值型变量

num = 91682

print(num)

运行结果91682
代码

#输出字符串变量

name = '逆境清醒'

print(name)

运行结果逆境清醒
代码

#输出列表变量

list = [1,2,3,4,5,'a','b','c']

print(list)

运行结果[1, 2, 3, 4, 5, 'a', 'b', 'c']
代码

#输出元组变量

tuple = (1,2,3,4,5,'a','b','c')

print(tuple)

运行结果(1, 2, 3, 4, 5, 'a', 'b', 'c')
代码

#输出字典变量

dict ={'a':1, 'b':2,'c':3}

print(dict)

运行结果{'a': 1, 'b': 2, 'c': 3}

2.10   print() 数据的格式化输出

在字符串中插入代        码运  行  结  果
1字符串变量

name = "Akira"

print("我的名字是 %s " % name)

我的名字是 Akira
2整数变量

age = 18

print("我的年龄是 %d"%(age)+"岁了")

我的年龄是 18岁了
3小数变量

i = 2670.5

print("数字是 %f" %i)

数字是 2670.500000

%号点(.)前跟字段宽度;

%号点(.)后跟精度值;字段宽度中,小数点也占一位

i = 2.67145573

print("8位保留字段宽度%8f"%(i))

8位保留字段宽度2.671456

i = 2.67145573

print("保留两位小数输出的是%.2f"%(i))

保留两位小数输出的是2.67

i= 2.6714563467

print("a"+'%10.3f'%i)

print("a"+'%f'%i)

a     2.671

a2.671456
(精度为3,所以只显示.671,指定宽度为10,所以在左边补充5个空格,达到10位的字段宽度,字段宽度中,小数点也占一位)

4

s='Akira'

x=len(s)

print('%s名字的长度是 %d' %(s,x))

Akira名字的长度是 4
格式输出代   码运行结果
%s输出一个字符串,字符串采用str()的显示

i= 2.6714563467

print('%s'%i)

2.6714563467
%r字符串(repr())的显示print('%r'%repr(set([1,1,2,3])))'{1, 2, 3}'
%c输出一个单一的字符print('%c'%90)Z
%e、%E指数(基底写e)

k= 2671.4563467284

print('%e'%k)

print('%E'%k)

2.671456e+03

2.671456E+03

%b二进制整数print(bin(50))0b110010
%hd、%d、%ld以十进制、有符号的形式输出 short、int、long 类型的整数print('%d'%50)50
%hu、%u、%lu以十进制、无符号的形式输出 short、int、long 类型的整数print('%u'%50)50
%ho、%o、%lo以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数print('%o'%50)62
%#ho、%#o、%#lo以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数print('%#o'%50)0o62

%hx、%x、%lx、

%hX、%X、%lX

以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。print('%x'%50)32

%#hx、%#x、%#lx、

%#hX、%#X、%#lX

以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。

print('%#x'%50)

print('%#X'%50)

0x32

0X32

%f、%lf 、%F以十进制的形式输出 float、double 类型的浮点数

i= 2.6714563467

print('%f'%i)

2.67146

%g、%lg、

%G、%lG

以十进制和指数中较短的形式输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。

i= 2.6714563467

print('%g'%i)

2.67146
其他一些格式输出方法
代码

k= 2671.4563467284

print('二进制形式''{0:b}'.format(int(k)))

运行结果二进制形式101001101111
代码

k= 2671.4563467284

print('十进制形式''{:d}'.format(int(k)))

运行结果十进制形式2671
代码

k= 2671.4563467284

print('八进制形式''{:o}'.format(int(k)))

运行结果八进制形式5157
代码

k= 2671.4563467284

print('十六进制形式''{:x}'.format(int(k)))

运行结果十六进制形式a6f
代码

k= 2671.4563467284

print('数字形式''{:n}'.format(k))

运行结果数字形式2671.46
代码

k= 2671.4563467284

print('百分数形式''{:%}'.format(k))

运行结果百分数形式267145.634673%
代码

k= 2671.4563467284

print('幂指数形式''{:e}'.format(k))

运行结果幂指数形式2.671456e+03
代码

k= 2671.4563467284

print('十进制较短的形式输出''{:g}'.format(k))

运行结果十进制和指数中较短的形式输出2671.46
代码

k= 2671.4563467284

print('十进制浮点数''{:f}'.format(k))

运行结果十进制浮点数2671.456347
代码

输出二进制数

k= 2671.4563467284

print(bin(int(k)))

运行结果0b101001101111
代码

输出八进制数

k= 2671.4563467284

print(oct(int(k)))

运行结果0o5157
代码

输出十六进制数

k= 2671.4563467284

print(hex(int(k)))

运行结果0xa6f
英文大小写转换(title()首字母大写,upper()全大写,lower()全小写)
代码

name = 'Adversity awake'

print(name.title())

运行结果Adversity Awake
代码

name = 'Adversity awake'

print(name.upper())

运行结果ADVERSITY AWAKE
代码

name = 'Adversity awake'

print(name.lower())

运行结果adversity awake

2.11   print() 中文输入显示乱码问题

        如果代码中有汉字中文,运行的时候python报错,出现python中无法正常输入中文,乱码等情况:

        编译提示:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0x*** in position 0: ...

        主要是由于编码的问题引起的。

  受开发系统和环境不同影响,解决办法会有所不同,但一般按以下办法处理就能解决,有需要者请自行尝试适合自己系统的解决办法:(记住,下面的方法不需要全部添加到python文件中,选择其中一项或两项尝试,能解决问题即可)

        在你的python文件(.py)文件第一行

中文显示乱码问题

1、开头加入

  # coding=utf-8

2、或者开头加入

  #-*- coding: UTF-8 -*-

3、或者开头加入

  #!usr/bin/env python3

  # -*- coding:utf-8 -*-

4、或者开头加上

  # -*-coding:GBK -*-

5、或者开头加上

  #coding=utf-8

  import sys

  reload(sys)

  sys.setdefaultencoding("utf-8")

6、改变标准输出print()的默认编码

  sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')

        平时开发python时注意:

  1、如果你用pycharm编译书写python代码,pycharm默认是会自动保存为UTF-8格式的,如果你无意中修改过,请在pycharm工作界面右键—File-Encoding–选择UTF-8编码----reload-----reload anyway。如果还是不行,试一下路径改为全英文。

  pycharm设置参考链接:https://blog.csdn.net/qq_35091353/article/details/108236018

  2、如果你用其他编译书写代码工具,请点击 

  文档>>设置文件编码>>Unicode>>Unicode(UTF-8)

  3、如果你用visual studio 编译书写python代码,

  visual studio 2022下python编程,报错:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte

解决办法:

        把Visual studio的文件保存编码改为UTF-8:

        ---->Unicode(UTF-8带签名)-代码页65001

        设置工程字符集为utf-8,选择工程----右键----属性----加上字符集编码

        Visual Studio Community 2022 - UTF-8 编解码器问题 #6784,可参考阅读:

        https://github.com/microsoft/PTVS/issues/6784

题外话:

  在用matplotlib(pyplot)图表制作时,标题和坐标轴中文显示会出现异常,出现小方框,无法正常显示,这时,只需在文件头部加入以下代码即可:

#-*- coding: UTF-8 -*-

import matplotlib.pyplot as plt

import matplotlib as mpl

mpl.rcParams["font.sans-serif"]=["SimHei"]

mpl.rcParams["axes.unicode_minus"]=False

2.12   print() 写入文件

将print的内容写入文件。

   有时候,我们会遇到希望print的内容不止打印屏幕上,还能保存在文件中。那么,我们可以试着将print的内容写入文件,方法如下:

建立test.py文件,输入:

写入文件
代码

# coding=utf-8

print("Hello, World!", file=open('file.txt', 'w'))

运行结果

运行后,在test.py文件所在的目录中,出现了一个file.txt文件,打开file.txt文件,会发现里面的内容是:

Hello, World!

说明我们的print()写入文件成功。

写入文件
代码

for i in range (1, 11):

    print(i,'\t',i*2,'\t',i*3,'\t',i*4,end='\n',file=open('file.txt',mode ='a',encoding='utf-8'), flush=False)

运行结果

运行后,打开file.txt文件,会发现里面的内容是:

1      2    3    4

2      4    6    8

3      6    9    12

4      8    12  16

5      10  15  20

6      12  18  24

7      14  21  28

8      16  24  32

9      18  27  36

10    20  30  40

说明我们的print()写入文件成功。
————————————————
版权声明:本文为CSDN博主「逆境清醒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_69553582/article/details/129948168

2.13   print() 配合函数输出

2.14   print() 配合 format 格式化输出

可参考:

python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印_python format函数_逆境清醒的博客-CSDN博客

2.15   print() 在终端输出彩色字体

可参考:

print()在终端输出彩色字体_终端输出彩色字符_逆境清醒的博客-CSDN博客

2.16   一些好玩的 print() 输出实例

可参考:

用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心)_浪漫的一串代码_逆境清醒的博客-CSDN博客

立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦_python绘制立体玫瑰花_逆境清醒的博客-CSDN博客

 python爱心源代码集锦(18款)_爱心代码编程python可复制_逆境清醒的博客-CSDN博客

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值