用Python在一行中读取两个变量

15 投票
9 回答
83559 浏览
提问于 2025-04-15 15:10

我知道 input() 这个函数,可以用来从用户那里读取一个变量。那有没有类似的简单方法可以读取两个变量呢?

我想找到一个和下面这个等价的方式:

scanf("%d%d", &i, &j); // accepts "10 20\n"

我现在的做法是先用 raw_input() 读取输入,然后用 split 方法把输入的内容分开。有没有更优雅的方法呢?

这不是为了实际使用,只是为了学习。

9 个回答

6

我也是刚接触这些东西。查了一下python.org网站,做了一些小改动,才让这个代码跑起来。现在又回到了raw_input这个函数,之前是input。这是我写出来的代码:

i,j = raw_input("Enter two values:  ").split()
i = int(i)
j = int(j)

当然,这段代码没有C语言的scanf或者C++的cin那么简洁。Python的代码看起来更像Java(它的机制和C、C++或Python完全不同),每个变量都需要单独处理。

在Python中,raw_input函数从控制台获取字符,并把它们合并成一个str类型的字符串作为输出。当赋值操作符左边只有一个变量时,split函数会把这个str分割成一个str值的列表。

在我们的例子中,我们希望有两个变量,可以通过用逗号分隔的方式来给它们赋值。然后这些str值就会被赋给列出的变量。如果我们想对这些值进行数学运算,就需要用Python内置的intfloat函数把它们转换成数字类型。

我知道这条信息是对一条很旧的帖子回复,可能这些知识早就被大家当作“常识”了。不过,我还是希望能看到这样的帖子,而不是花几个小时去搜索和尝试,最后才找到我觉得在CS1课堂上能展示的最优雅的解决方案。

11

你也可以从 sys.stdin 读取数据。

import sys

a,b = map(int,sys.stdin.readline().split())
31

不,通常的做法是用 raw_input().split()

在你的情况下,如果你想把输入的内容变成整数而不是字符串,可以使用 map(int, raw_input().split())

不要用 input() 来做这个。想想看,如果用户输入了:

import os;os.system('do something bad')

撰写回答