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 * "*")