Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python在一行中读取两个变量_Python_Input - Fatal编程技术网

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

使用Python在一行中读取两个变量,python,input,Python,Input,我熟悉input()函数,可以从用户输入中读取单个变量。有没有类似的简单方法来读取两个变量 我正在寻找与之相当的: scanf("%d%d", &i, &j); // accepts "10 20\n" 实现这一点的一种方法是使用raw\u input(),然后split输入内容。还有更优雅的方式吗 这不是现场使用的。只是为了学习。不,通常的方法是raw\u input().split() 在本例中,如果希望它们是整数而不是字符串,则可以使用map(int,raw\u inpu

我熟悉input()函数,可以从用户输入中读取单个变量。有没有类似的简单方法来读取两个变量

我正在寻找与之相当的:

scanf("%d%d", &i, &j); // accepts "10 20\n"
实现这一点的一种方法是使用
raw\u input()
,然后
split
输入内容。还有更优雅的方式吗


这不是现场使用的。只是为了学习。

不,通常的方法是
raw\u input().split()

在本例中,如果希望它们是整数而不是字符串,则可以使用
map(int,raw\u input().split())

不要为此使用
input()
。考虑如果用户输入

会发生什么
导入操作系统;操作系统(“做坏事”)


您也可以从sys.stdin读取

import sys

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

我在这方面也是新手。在python.org网站上做了一些研究,并进行了一些黑客攻击,以使其正常工作。原始输入功能再次返回,从输入更改。这就是我想到的:

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函数从控制台获取字符,并将它们连接成单个字符串作为其输出。当在赋值运算符的左侧仅找到一个变量时,split函数将该字符串分解为一个列表,其中包含字符串

在我们的例子中,我们期望有两个变量,我们可以使用逗号分隔的标识符列表将值放入其中字符串值然后被分配到列出的变量中。如果我们想对这些值进行算术运算,我们需要使用Python内置的intfloat函数将它们转换为数值int(或float)数据类型


我知道这篇帖子是对一篇非常老的帖子的回复,可能这些知识作为“常识”已经存在了一段时间。然而,我会很感激像这样的帖子,而不是花几个小时的搜索和黑客攻击,直到我找到了我认为在CS1课堂上可以展示的最优雅的解决方案。

首先将整行读成字符串

    string = raw_input()
然后使用这样的for循环

    prev = 0 
    lst = []
    index = 0 
    for letter in string :
        if item == ' ' or item == '\n' :
            lst.append(int(string[prev:index])
            prev = index + 1
此循环将整行作为字符串的输入,并单独处理其中的部分,然后在将数字转换为整数后将数字追加到列表-lst中。

或者您可以这样做

input_user=map(int,raw_input().strip().split(" "))

在Python3.6.1中,您可以通过使用它读取2个int值

n,m = map(int,input().strip().split(" "))

您还可以对任意数量的输入使用此方法。考虑以下三个由空白分隔的输入:

import sys

S = sys.stdin.read()
S = S.split()
S = [int(i) for i in S]
l = S[0]
r = S[1]
k = S[2]

您可以使用此方法在一行中获取输入

a, b = map(int,input().split())
请记住,您可以在该语句的LHS中使用任意数量的变量

要将输入作为字符串,请使用str而不是int

并将列表作为输入

a = list(map(int,input.split()))

在Python3.9中,使用a,b=map(int,input().split())
因为您将获得未定义的原始输入()

请注意,从Python 3.0开始,
raw\u input
被重命名为
input
。(要获得
input
的原始行为,请使用
eval(input)
)…应该是“将
eval
应用到
input
的输出”。是的,3中的明显行为要好得多,但我希望他们在2.6中删除一些关于这些更改的警告。我想我需要研究一下升级指南。它应该是
int(input()
,如果你在python3中执行
eval(input())
,你会得到一个非常危险的后门,因为用户将能够执行任何python语句(甚至os.system)使用您的用户权限。@dialloliogn:请重新阅读。我对如何在Python 3中获取Python 2的
输入
行为作了一般性的评论。您能否对您的代码添加一个解释,以及为什么它可以解决此问题?仅使用代码的答案通常没有多大帮助。