首页 > 解决方案 > 在 Python 中使用 input() 作为 range() 的参数

问题描述

input() 如何作为 Python 中 range() 的参数工作?

例如:

假设用户输入多个数字 10 和 2 或更多字面意思是“10 2”

for i in range(int(input())):
   try:
       a,b=map(int,input().split())
       print(a//b)
   except Exception as e:
       print("Error Code:",e)

那么 for 循环使用什么范围呢?是 (0,10), (0,2) 还是别的什么?或者,换一种说法,如果用户输入多个数字,范围使用哪个数字作为上限?更一般地说,我试图在这里理解 for 循环的目的以及为什么代码不能只是:

try:
    a,b=map(int,input().split())
    print(a//b)
except Exception as e:
    print("Error Code:",e)

标签: pythonfor-loopinput

解决方案


input()值将存储为str.

这一切都取决于用户输入的内容。您提供的这段代码非常糟糕,因为用户必须猜测输入什么以及何时输入。但逻辑如下:

如果您输入单个值,则int(input())将该值转换为整数。例如,如果您输入2input()则将保存字符串"2"int("2")产生整数2

如果您有多个值,那么您无法int立即转换为,因为到底是什么int("2 10")意思?这就是为什么您必须使用.split(), 将这些多个值分隔为许多奇异值。例如,如果您运行x = input()并输入2 10x则将保存字符串"2 10"。现在,"2 10".split()产生字符串列表 ["2", "10"]

这段代码map(int,input().split())用于将此字符串列表转换为整数列表。它使用函数将每个值映射int到一个新值以对其进行转换。


既然已经确定了,那么for使用range.

range根据文档,该类型在其构造函数中可能有一个参数stop或三个参数(start、stop [、step])。这些参数都是整数。

因此,来自的值input()必须适合这种结构。如果您2 10输入 input 并尝试 do range("2 10"),您将收到错误消息。因为您正在传递一个类型的参数str。这就是为什么你必须先转换为integer"2 10"但是正如我们刚刚讨论的那样,您不能立即转换为整数。这就是为什么您必须split首先,然后将每个值转换为int,然后将这些作为参数传递给range().

因此,总而言之,给定x = input()并输入2 10,以下是不起作用的:

>>> int(x)
>>> range(x)

什么工作

>>> a,b=map(int,input().split())
>>> range(a, b)

推荐阅读