Python 此代码中的列表输入有问题(如何使其与自定义列表输入一起工作?)

Python 此代码中的列表输入有问题(如何使其与自定义列表输入一起工作?),python,Python,我必须将整数列表作为输入,然后打印出对应于每个整数的直方图 Ex: input = [4,9,7] output: **** ********* ******* 这是我写的代码: def histogram(list1): for i in range(len(list1)): print (list1[i]* "*") ls=input("Enter the numbers: ") (histogram(ls)) 但当我输入497时

我必须将整数列表作为输入,然后打印出对应于每个整数的直方图

Ex: input = [4,9,7]
output: ****
        *********
        *******
这是我写的代码:

def histogram(list1):
    for i in range(len(list1)):
        print (list1[i]* "*")

ls=input("Enter the numbers: ")
(histogram(ls))
但当我输入497时,这不起作用(我还尝试了list(input))。但当我做出以下改变时,它是有效的:

def histogram(list1):
    for i in range(len(list1)):
        print (list1[i]* "*")

input = [4,9,7]
histogram(input)

如何编写代码,使其根据用户提供的任何输入工作?

使用
python3

(histogram(eval(ls)))

对于
python2

(histogram(ls))
演示

Enter the numbers: [1,2]
*
**
另一种解决方案:

def histogram(list1):
    for i in list1:
        print (i * "*")

ls=[]
while True:
    cur = input("Enter next number: ")
    if (cur == ""):
        break;
    ls.append(int(cur))

histogram(ls)

如果确实希望用户输入Python列表,可以使用
ast.literal\u eval
将其转换为真实列表:

import ast
ls = ast.literal_eval(input('Enter the numbers: '))
histogram(ls)
但是,您可以让他们输入以空格分隔的数字,然后使用
split

ls = [int(x) for x in input('Enter the numbers, separated by a space: ').split()]
histogram(ls)
您的
直方图
功能也可以缩短为:

def histogram(list1):
    for i in list1:
        print (i * "*")

如果您使用的是Python2.x,则需要使用
raw\u input
而不是
input

您的代码适合我。用户如何提供输入?如果它的字面意思是“
497
”,你需要先对它进行预处理。它对你有什么作用?您提供了什么输入(以及以什么格式?)?因为当我给出任何输入时,它会给我一个错误:不能将序列乘以粘贴代码的非int类型的strJust copy。你给出输入并用它测试了吗?顺便说一句,你在说什么代码?第一个还是第二个?
eval
是危险的。由于您只需要输入一个整数列表,您可以使用
ast.literal\u eval
谢谢,它与ast.literal\u eval一起工作,但是当我在代码中使用.split()函数(或您建议的缩短版本)时,我得到一个错误:“不能用非int类型的str乘以序列”我的错误!编辑了那个,先把输入转换成ints。你能解释一下你在这里做了什么吗?您是否将列表输入强制转换为int?(比如ls=int(input))?我使用列表理解从
split()
调用中获取每个元素,并将其转换为int:
[int(x)for x in input(“…”).split()]
-它返回一个新列表,每个元素都作为整数而不是字符串。谢谢!现在一切都清楚了,它工作得很完美D
def histogram(list1):
    for i in list1:
        print (i * "*")