如何使用'用户输入列表"在**非交互式环境中编写代码时在python中?

时间:2016-04-11 17:46:00

标签: python list python-3.x tuples

我想知道如何使用"用户输入列表"在非交互式环境中编写代码时使用Python?

例如......在字符串的情况下,我们执行以下操作: -

str1=input("Enter the string1: ") 

类似地,对于整数,我们在编写代码时键入以下行。

num1=int(input("Enter the number1:"))

类似于复数,我们在编写代码时键入以下行。

c1=complex(input("Enter complex number1: "))

请帮助并提供元组和字典的答案。语法是什么?

3 个答案:

答案 0 :(得分:0)

您可以使用ast.literal_eval 安全地评估用户的任何python文字:

import ast

data = ast.literal_eval(input("enter a python literal:"))
print(type(data),data)

这可以让你输入各种各样的东西:

enter a python literal:[1,2,3]
<class 'list'> [1, 2, 3]
enter a python literal:(3,2,1)
<class 'tuple'> (3, 2, 1)
enter a python literal:"hello"
<class 'str'> hello
enter a python literal:3.4
<class 'float'> 3.4

#this one is *extremely* malicious when put in eval()
enter a python literal:open(__file__,"w").close()
Traceback (most recent call last):
  ...
ValueError: malformed node or string: <_ast.Name object at 0x1056b4f98>

# but ast.literal_eval is safe with user input like this.

尽管你可以用逗号来split获取一个列表:

data = input("enter some values seperated by ,s: ").split(",") 

这会给你一个清单:

enter some values seperated by ,s: 1,2,3
<class 'list'> ['1', '2', '3']

答案 1 :(得分:0)

不要将此视为输入列表的用户。输入列表的用户就像你的老板手动触发神经元;列表是用户不应该处理的程序内部数据结构。

定义用户输入的格式并编写适当的格式相关代码来解析它。例如,如果您希望用户输入以逗号和(可选)空格分隔的基数为10的整数,则可以使用

ints = [int(s) for s in input().split(',')]

如果您确实希望输入格式为Python文字语法,则可以使用ast.literal_eval

obj = ast.literal_eval(input())

如果您认为老板手动触发神经元的想法没有错,您可以让用户使用eval输入任意Python表达式(而不是语句)。 这几乎不是一个好主意

# Bad idea - this makes a mess if the user does something wrong and is potentially
# catastrophic if the user does something malicious.
# For example, if the user types __import__('os').system('nasty command'),
# they can delete all your files or steal your browser's saved passwords.
terrible_idea = eval(input())

答案 2 :(得分:0)

用户只能输入 if ($_POST["username"] === "t5" && $_POST["password"] === "just4fun") { session_start(); $_SESSION['username'] = true; header('Location: menu.php'); } else { header('Location: loginform.html'); } 。这意味着str返回input()。如果您想要str,则必须将其设为list。其他一切也是如此。

list

如果您希望让他们输入您想要的x = input("a, b, c: ") # a, b, c: 2,3,4 => x -> "a,b,c" str l = [int(i.strip()) for i in x.split(",")] # [2, 3, 4] ,那么(最好不要这样做

repr()