✨基本介绍

​ 在 Python3.xraw_input()input()进行了整合,去除了 raw_input( ), 仅保留了input( )函数,其接收任意任性输入,将所有输入默认为字符串处理,并返回字符串类型。

input() 函数接受一个标准输入数据,返回为 string 类型。

🎈input()输入

0. 基本用法

input括号里面写的是输入提示信息,input()输入的是字符串形式,如果要是输入其他类型需要进行转换。

1
2
3
4
'''
变量 = input("提示信息/输入介绍")
'''
a = input(“intput”)

1. 输入字符串

非常简单🎨

1
2
3
## 字符串输入
_str = input("输入一个字符串:")
print(f"输出字符串:{_str},输出字符串类型:{type(_str)}")

2. 输入数字

只需在input外面套上一层int

1
2
3
## 数字输入
_num = int(input("输入一个整数:"))
print(f"输出整数:{_num},输出字符串类型:{type(_num)}")

输出:

3.输入一维数组

input只能输入一行其中的空格也会被包括进去,所以我们要使用split(“ “)空格分隔,strip()是去掉首末尾的特定字符。ps:默认不填是去掉首尾空格

1
2
3
## 一维数组输入
arr = input("输入一维数组,空格间隔:").strip().split(" ")
print(arr, "\narr元素类型:",type(arr[0]))

输出:

这里使用了列表和字典两种写法

1
2
3
4
5
6
7
8
9
10
11
12
## 一维数组数组输入

##方法一
n = int(input("数组长度:"))
# 输入数组
arr = [int(x) for x in input("输入一维数组,空格间隔:").split(" ")]
print(arr, "\narr元素类型:",type(arr[0]))

##方法二
n = int(input("数组长度:"))
arr = list(map(int, input("输入一维数组,空格间隔:").split(" ")))
print(arr, "\narr元素类型:",type(arr[0]))

输出:

4.输入二维数组

对于二维数组的输入,情况变得复杂起来,下面我们看看什么情况吧。

不恰当的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
## 二维数组输入

##不恰当的方法
#行,列数不相同
_row = int(input("输入行数:"))
_list = int(input("输入列数:"))
arr = [[0] * _list] * _row

for i in range(_row):
arr[i] = input().split(" ")
for j in range(_list):
arr[i][j] = int(arr[i][j])
print(arr)

​ 此时我们初始化一个2行3列的列表,令arr[0][0]=1,这时我们发现第1行和第2行的第1个元素都变成了1,不对啊,我们不是只动了第1行第1个元素,怎么第二行也变了?

​ 我们看arr = [[0] * _list] * _row 这句代码,首先我们定义了一个[[0] * _list],代表长度为_list的元素全为0的列表这里是没有问题的,但是后面的* row,是将这个列表浅拷贝,形成连接,而不是真正的创建了三个列表,如同C中的指针,三个指针同时指向了一个列表,所以对其中一个进行改变,另外的也会发生变化。所以这种写法并不恰当

输出:

恰当的方法

所以我们要写成下面这种arr = [[0] * _list for i in range(_row)],这样写才是创建了_row个列表,形成一个二维列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
##恰当的方法
_row = int(input("输入行数:"))
_list = int(input("输入列数:"))
arr = [[0] * _list for i in range(_row)]
for i in range(_row):
arr[i] = input().split(" ")
for j in range(_list):
arr[i][j] = int(arr[i][j])
#打印二维数组
print(arr)

##简化写法
_row = int(input("输入行数:"))
_list = int(input("输入列数:"))
arr = [[0] * _list for i in range(_row)]
for i in range(_row):
arr[i] = input().split(" ")
arr[i] = [int(j) for j in range(arr[i])]

5. 多维数组输入(调用库函数)

​ 可以像创建二维数组那样创建多维数组,但是那样写比较复杂,此时我们可以直接调用第三方库numpy.

numpy.ndarray 可以创建一个 C 一样的数组。必填参数 shape 决定数组的形状,如 numpy.ndarray((7, 9, 11)) 创建的数组相当于 C 中的 float[7][9][11];选填参数 dtype 决定数组中的数据类型,默认为 float,如 numpy.ndarray((3, 5), int) 就相当于 C 中的 int[3][5].

此外 numpy.array可以将一个 Python list 转化成 numpy.ndarray

1
2
3
4
5
6
7
8
9
10
11
import numpy as np

arr = np.ndarray((7, 9), int)
for i in range(7):
for j in range(9):
arr[i][j] = 0 # np.ndarray 会不加初始化地从内存分配一块空间,使用前需要初始化,因此不推荐这种用法
arr2 = np.array([[0 for _ in range(7)] for _ in range(9)], int) # 同样可以填入 dtype

print(arr, "\n", arr2)
# 现在可以像操作 C 列表一样操作 arr 和 arr2 了