Python 快速扫盲—— 输入与输出

本文首发于:Python 快速扫盲—— 输入与输出

获取输入

Python中并不存在利用 %d、%c 进行格式化输入,无论用户的输入如何,都会读取一行转化成字符串,然后返回给程序。所以,我们没有办法直接获取用户输入的数字。

获取单个数据

获取用户输入的字符串应该没有任何问题,主要是数字方面无法直接获取,所以,我们可以间接的获取用户输入的数据,比如获取用户输入的数字:

num_test = int(input())

这样就可以把 input() 返回的字符串转化为数字,然后赋值给 num_test。

获取多个数据

插播一下,python 中的等号(赋值符号)还能这样用:

a, b = 1, 2
print(a, b)
# 1 2

所以,在这个基础上面,我们就可以实现交换,而无需定义新的变量。

a, b = b, a

上面是一种比较常用的一个赋值操作,可以让代码变得更加的简洁。

使用逗号分割

好,回到正题,我们可以利用这个性质实现多个数据的输入。首先要做的是需要对用户的输入进行处理。

a, b = input().split()

split() 是上一部分所介绍到的一个方法,可以把字符串按照空格分割成多个元素放到列表中。然后对应赋值给 a,b。但是,要注意,只有当你明确知道用户的输入是两个元素的时候才这么用。

而且,如果想要获取用户所输入的数字的话,还要分别进行类型转换

a, b = input().split()
a = int(a)
b = int(b)
使用列表保存

原理跟上面一样,但是,这次是直接保存到列表里面,然后再对数据进行处理。这样就会避开数据的数量问题了。

user_input = input().split()

for i in range(len(user_input)):
    user_input[i] = int(user_input[i])

print(user_input)

# in  1 2 3 4 5 6 7 8
# out [1, 2, 3, 4, 5, 6, 7, 8]

但是,有一个地方要注意!下面这个代码是无法实现这个功能的,具体原因可以参考 for 循环的原理尝试一下。

user_input = input().split()

for i in user_input:
    i = int(i)

print(user_input)
使用 map 格式化输入

map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的迭代器(python2 会返回一个列表)。说起来挺复杂,举个例子。

# map(fun, seq)
a, b, c = map(int, ['1', '2', '3'])
# 1 2 3
a, b, c = map(int, input().split())

这里的 int 是指一个函数,会把后面的序列的每一个当作参数进行处理,然后返回给前面的变量。map 还有很多高级的用法,但是呢,在获取输入上面我们可以只掌握用法就好,不必太过深究。

# 获取浮点型数据
a, b, c = map(float, input().split())

end!上面所涉及到的所有多数据输入都是默认以空格隔开的,如果不是以空格隔开的,就要在 split() 的括号里面加上相应的字符。

a, b, c = map(int, input().split(',')  # 以逗号隔开的情况

格式化输出

C语言里面的 printf 的功能很强大,可以以不同的形式输出数据,主要利用的是 %d, %c, %s等,但是 python 的 print 和 input 一样单纯,就是单纯的输入和输出。python 的格式化输出准确来说是对字符串的格式化,因为 所以接下来所涉及到的格式化输出,实际上操作对象是字符串。

format

format 是字符串的一个方法,先看示例吧,讲起来比较费劲。

name = "JNWA"
formatted_str = '{} is my name'.format(name)
print(formatted_str)

# JNWA is my name

示例中 {} 是占位符,后面的 format 方法会自动利用括号里面的参数替换掉原本字符串里面的括号。当然也支持多个参数进行格式化。

name = "JNWA"
age = 18
formatted_str = '{} is my name, my age is {}'.format(name, age)
print(formatted_str)

# JNWA is my name, my age is 18

这样虽然能够进行格式化输出了,但是似乎还是没有 C 语言一样强大,可以制定类型,包括输出小数点之后多少位之类的。别担心,这个 python 也会。

#include <stdio.h>

int main() {
    char name[5] = "JNWA";
    float money = 187.8888;
    printf("%s is my name, and I have %.2f CNY", name, money);
    return 0;
}
// JNWA is my name, and I have 187.89 CNY

python

name = "JNWA"
money = 187.88
print('{} is my name, {:.2f}'.format(name, money))
# JNWA is my name, and I have 187.89 CNY

python 的那个花括号可不是摆设,是可以进行数据填充的,使用冒号表示进行数字格式化,最常用的就是保留两位小数,如上面的例子。用法还有很多,下面就直接看表格吧(抄来的)

数字格式输出描述
3.1415926{: .2f}3.14保留小数点后两位
3.1415926{: +.2f}+ 3.14带符号保留小数点后两位
-1{: +.2f}- 1.00带符号保留小数点后两位
2.71828{: .0f}3不带小数
5{: 0 > 2d}05数字补零(填充左边, 宽度为2)
5{: x < 4d}5xxx数字补x(填充右边, 宽度为4)
10{: x < 4d}10xx数字补x(填充右边, 宽度为4)
1000000{:, }1, 000, 000以逗号分隔的数字格式
0.25{: .2 %}25.00 %百分比格式
1000000000{: .2e}1.00e+09指数记法
13{: 10d}13右对齐(默认, 宽度为10)
13{: < 10d}13左对齐(宽度为10)
13{: ^ 10d}13中间对齐(宽度为10)
11‘{:b}’.format(11)1011二进制
11‘{:d}’.format(11)11十进制
11‘{😮}’.format(11)13八进制
11‘{:x}’.format(11)b十六进制
11‘{:#x}’.format(11)0xb十六进制(含 0x,小写)
11‘{:#X}’.format(11)0XB十六进制(含 0x,大写)

^<>分别代表,居中对齐、左对齐、右对齐

说明一下,当我们只是想要单纯的使用花括号的时候,就需要使用花括号进行转义。 {{}}.format(...)会被转义成 {}

自定义顺序

上面的输出方法都是固定了的输出顺序的,我们也可以通过指定参数的顺序。看例子!

temp_1 = 90
temp_2 = 67
temp_3 = 78

print('{2}, {0}, {1}'.format(temp_1, temp_2, temp_3))

# 78, 90, 67

或者

age = 89
money = 187.8888
name = "JNWA"

print('money:{money:.2f}, name:{name}'.format(name=name, money=money))

# money:187.89, name:JNWA

还有一种输出方法是 % 输出,比较少用了。可以了解下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值