怎么输入n行数字,每行数字包含两个数,其中n未知
时间: 2024-05-03 09:23:21 浏览: 51
对于Python来说,可以使用循环语句,先输入n的值,然后再循环n次,每次输入一行数字,并将其存储到一个列表中。
代码示例:
```
n = int(input("请输入数字的行数:"))
nums = []
for i in range(n):
line = input("请输入第{}行数字,用空格分隔:".format(i+1))
nums.append(list(map(int, line.split())))
print(nums)
```
输入示例:
```
请输入数字的行数:3
请输入第1行数字,用空格分隔:1 2
请输入第2行数字,用空格分隔:3 4
请输入第3行数字,用空格分隔:5 6
```
输出示例:
```
[[1, 2], [3, 4], [5, 6]]
```
其中,列表nums中包含了n行数字,每行数字都被转换成了一个包含两个整数的列表。
相关问题
python做出两名宇航员在探索一个未知行星,行星上有一些障碍物,这些障碍物用数字1表示,没有障碍物用数字0表示。行星被表示成一个 N * M 的矩阵。 探索过程中两名宇航员走散了。已知 A 宇航员的位置 (x1,y1)和 B 宇航员的拉置(x2,y2),请你帮助 A 宇航员寻找一条最短路径到达 B 宇航员的位置,并输出最短路径的长度(不包括起点)。
这是一个典型的图论最短路径问题,我们可以使用广度优先搜索算法(BFS)解决。
具体的做法是,我们将每个格子看作一个图中的节点,如果两个格子相邻且都没有障碍物,那么它们之间就有一条无向边。然后我们从起点开始进行 BFS,每次将当前格子周围没有访问过且没有障碍物的格子加入队列,直到找到终点或者队列为空。
用一个二维数组 dist[i][j] 来记录从起点到每个格子的最短距离,初始时所有元素设为正无穷。每次访问一个新的格子时,如果它的距离比之前计算出的距离更短,就更新 dist 数组。最后 dist[x2][y2] 就是起点到终点的最短距离。
以下是 Python 代码实现:
```python
from queue import Queue
# BFS 搜索
def bfs(matrix, x1, y1, x2, y2):
n, m = len(matrix), len(matrix[0])
visited = [[False] * m for _ in range(n)]
dist = [[float('inf')] * m for _ in range(n)]
q = Queue()
q.put((x1, y1))
visited[x1][y1] = True
dist[x1][y1] = 0
while not q.empty():
x, y = q.get()
for dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
nx, ny = x + dx, y + dy
if 0 <= nx < n and 0 <= ny < m and not visited[nx][ny] and matrix[nx][ny] == 0:
visited[nx][ny] = True
dist[nx][ny] = dist[x][y] + 1
q.put((nx, ny))
if nx == x2 and ny == y2:
return dist[x2][y2]
return -1 # 无法到达终点
# 测试代码
matrix = [
[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 0]
]
x1, y1 = 0, 0
x2, y2 = 4, 4
print(bfs(matrix, x1, y1, x2, y2)) # 输出 8
```
基于flex/bison工具设计一个简单的语法分析器,能够将输入的单词序列分析成语法树,支持语法规则、优先级等特性
好的,以下是一个基于flex/bison工具设计的简单语法分析器示例,它可以将输入的单词序列分析成语法树:
首先是 lex 文件的内容,它定义了输入字符串的单词规则:
```lex
%{
#include <stdio.h>
#include "y.tab.h"
%}
%%
[0-9]+ { yylval.num = atoi(yytext); return NUMBER; }
[-+*/\n] { return yytext[0]; }
[ \t] { /* ignore whitespace */ }
. { printf("Unknown character %c\n", yytext[0]); }
%%
int yywrap() {
return 1;
}
```
其中,`%{` 和 `%}` 之间的内容是 C 代码,这里我们包含了 `<stdio.h>` 头文件和 Bison 自动生成的头文件 `y.tab.h`。
接下来是一个正则表达式和对应的动作,它们定义了如何将输入字符串分解成单词,比如 `[0-9]+` 表示匹配一个或多个数字,然后将这个数字保存到 `yylval.num` 变量中,最后返回对应的单词类型 `NUMBER`。
`[-+*/\n]` 表示匹配加减乘除符号和换行符,然后直接返回对应的单词类型。
`[ \t]` 表示匹配空格和制表符,但并不返回任何单词类型,因为我们要忽略它们。
最后的 `.` 表示匹配任意其他字符,如果遇到了未知字符,就输出错误信息。
接下来是 yacc 文件的内容,它定义了语法规则和语法树的构建方式:
```yacc
%{
#include <stdio.h>
%}
%union {
int num;
}
%token NUMBER
%left '+' '-'
%left '*' '/'
%nonassoc UMINUS
%start expr
%%
expr:
expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { $$ = $1 / $3; }
| '-' expr %prec UMINUS { $$ = -$2; }
| '(' expr ')' { $$ = $2; }
| NUMBER { $$ = $1; }
;
%%
int main() {
yyparse();
return 0;
}
void yyerror(const char *msg) {
fprintf(stderr, "%s\n", msg);
}
```
其中,`%{` 和 `%}` 之间的内容是 C 代码,这里我们包含了 `<stdio.h>` 头文件。
`%union` 定义了一个联合类型,它可以存储 `int` 类型的数据。
`%token` 定义了单词类型,这里只有一个 `NUMBER`,表示数字。
`%left` 和 `%nonassoc` 定义了运算符优先级和结合性,这里我们定义了加减乘除和取负号的优先级和结合性。
`%start` 指定了语法分析的起点,这里是 `expr`。
接下来是语法规则,它们描述了如何将单词序列转换成语法树。比如:
```yacc
expr: expr '+' expr { $$ = $1 + $3; }
```
表示一个表达式可以由两个表达式和一个加号组成,它的值等于两个表达式的值相加。
`$$` 表示当前规则的结果,`$1`、`$2`、`$3` 等表示当前规则的各个子规则的结果。
其中的 `{ }` 中间的 C 代码会在规则匹配成功后执行,用来构建语法树。
最后是 `main` 函数和 `yyerror` 函数的定义,它们分别用来启动语法分析和处理语法错误。
上述示例代码是一个简单的四则运算语法分析器,可以计算输入字符串表达式的值,并生成对应的语法树。
当然,实际的语法分析器要比这个复杂得多,需要根据具体的语言语法规则来编写相应的 lex 和 yacc 文件。
相关推荐
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)