获取输入
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
还有一种输出方法是 % 输出,比较少用了。可以了解下