【问题标题】:Check for int and float given by the user input in a list检查列表中用户输入给出的 int 和 float
【发布时间】:2021-10-28 22:52:31
【问题描述】:

如何在列表中具体检查用户输入提供的数据类型?

例如:

user_inp = [float(number) for number in input(
"Enter Number: ").replace(',', ' ').split()]

>>> print(user_inp) 
Enter Number: 1 2 3 4 
[1.0, 2.0, 3.0, 4.0]

我想专门检查用户是否在输入中包含小数。如果他们特别给出 1.0 或 2.0,那么我希望程序接受它,如果他们给出整数,那么程序应该接受整数。我使用 float 的原因是使用 int 会触发错误,并且用户可以输入他们想要的任何数字而不会导致程序崩溃。

期望的结果:

>>> print(user_inp)
Enter Number: 1 2 3 4
[1, 2, 3, 4]

>>> print(user_inp)
Enter Number: 1.0 2.0 3.0 4.0
[1.0, 2.0, 3.0, 4.0]

我尝试过的:

lst = []

for num in user_inp:
    if isinstance(num, float):
        lst.append(int(num))

print(lst)

# input: 1.0 2.0
# output: [1, 2]

【问题讨论】:

  • 输入“1.0 2”会发生什么?
  • “我使用float的原因是使用int会触发错误”——为什么1会导致错误而1.0不会?
  • 如果输入被解释为floats,而它可以被解释为ints,为什么会导致问题?
  • 如果您有一个函数可以为输入中的单个项目适当地返回floatint,您能了解如何使用它来解决问题吗?你能写出那个函数吗?如果你尝试会发生什么?

标签: python list floating-point integer


【解决方案1】:

尝试检查小数点:

>>> user_inp = [float(number) if '.' in number else int(number) for number in input("Enter Number: ").replace(',', ' ').split()]
Enter Number: 1.0 2 3.0 4
>>> user_inp
[1.0, 2, 3.0, 4]
>>> 

【讨论】:

    【解决方案2】:

    您不需要手动检查type,如果您使用ast.literal_eval,类型将根据字符串表示形式保留,也就是说,以浮点表示形式输入的值将存储为浮点数和整数表示将存储为整数,否则将存储为字符串:

    import ast
    user_inp = [ast.literal_eval(number) for number in input(
    "Enter Number: ").replace(',', ' ').split()]
    

    【讨论】:

      猜你喜欢
      • 2020-09-03
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      相关资源
      最近更新 更多