【问题标题】:Python how do it get pure data from user input in an entry widget=Python如何从条目小部件中的用户输入中获取纯数据=
【发布时间】:2019-10-10 12:50:35
【问题描述】:

我想从用户输入中获取原始数据,但我得到的是一个字符串。

我的目标是得到这个:

X =[[8,5,3,9,1,4]]

现在我希望用户输入(条目小部件)8,5,3,9,1,4

所以我把它保存在一个变量中:

Y= entry.get()
X = [[Y]]

现在 Y 来自数据类型 String 所以我得到的是:

X=[["8,5,3..."]]

但我想要像 8,5,7 这样的“纯”数据...而不是字符串“8,5,7”。我能做什么?

【问题讨论】:

标签: python string


【解决方案1】:

“我想从用户输入中获取原始数据,但我得到的是一个字符串。”

嗯,这实际上“原始数据”。

我得到的是 X=[["8,5,3..."]] 但我想要像 8,5,7 这样的“纯”数据。

所以您的问题是“如何将逗号分隔的数字字符列表解析为整数列表”。这实际上很简单:用逗号分割字符串,将每个部分传递给int,然后收集结果:

X = [[int(part.strip()) for part in Y.strip().split(",")]]

请注意,如果用户不遵循预期的输入格式,这将中断 - 但这不是问题的一部分(提示:您可以使用正则表达式预先验证输入格式,或捕获异常)。

【讨论】:

  • 如果列表包含整数和浮点数怎么办,例如:8,4,4,1,6.1,10,2,5,2 现在有 6.1 但会导致错误因为 int(part.strip)。我也可以解析整数和浮点数吗?
  • @Arrogant 那么您最好的选择可能是将所有内容都视为浮动。如果出于任何原因真的需要将整数保留为整数,则可以测试part 是否包含点并相应地选择所需的类型。
  • 成功了,感谢您的帮助...非常感谢
【解决方案2】:

所以...我不擅长 tkinter,但无论如何你的问题与它无关。也许这会有所帮助:

Y= entry.get()
X= []
for char in str(Y):
    try:
        y = int(char)
        X.append(y)
    except ValueError:
        if char != ',':print("error. don't enter invalid stuff")
        else: pass
print(X)

【讨论】:

  • 请问为什么是@brunodesthuilliers?
  • 因为它会捕获每个异常(包括SystemExit)并将它们全部静音。您希望始终只捕获您期望 并且 可以在给定点有效处理的 exact 异常。 FWIW,在这种情况下,您不希望静默传递异常 - 如果用户输入不正确,您希望拒绝它而不是将其转换为可能错误的内容。
  • 这更好,但仍然没有雪茄 ;-) - 如果用户输入“1,3,A,8,B”,您不想接受“A”和“B”。所以如果你在这里得到一个ValueError,你不想忽略它,你想显示一个清晰的错误信息。
  • 仍然更好,但仍然错误 xD 现在它将把大于 9 的数字变成两个不同的 4, 2。提示:阅读str.split(sep) 方法的文档。哦,else:pass 部分没用。
  • 抱歉,我不喜欢使用内置函数。但会努力去做。不错的挑战! ?
猜你喜欢
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多