我正在编写一个演示线性搜索的程序,但我仍然坚持我正在采取的其中一个步骤。在这一步中,我试图让程序获取用逗号分隔的数字输入列表,然后以列表形式返回列表。
(例如1,5,2,4 - > [1,5,2,4])。
到目前为止,我的代码将以列表形式返回输入,但仅当我输入一个数字时。 (例如3 - > [3])。
def main():
n = eval(input("Enter list of numbers separated by commas: "))
list = []
n = int(n)
list.append(n)
print(list)
main()
但是当我用逗号输入数字列表时,我收到了这个错误:
Traceback (most recent call last):
File "C:/Users/eardery/Desktop/Final Exam Practice/linearsearch.py", line 8, in <module>
main()
File "C:/Users/eardery/Desktop/Final Exam Practice/linearsearch.py", line 4, in main
n = int(n)
TypeError: int() argument must be a string or a number, not 'tuple'
在没有出现此错误的情况下评估输入的另一种方法是什么,让程序按照我的意图工作?并且有人可以解释什么是&#39;元组&#39;是
答案 0 :(得分:3)
您不应在此使用eval
。使用用户输入时最好避免使用eval
。此外,它通常会返回意外的结果,就像你的情况一样,它处理的整数列表不同于单个整数。)
这样的事情怎么样:
line = input("Enter list of numbers separated by commas: ")
data = [int(i) for i in line.split(',')]
最后一行将文本分开,并将每个元素转换为int。它相当于
data = []
for i in line.split(','):
data.append(int(i))
答案 1 :(得分:2)
元组是一个不可变的(不可更改的)列表。这就是Python假设你输入的内容,因为它是一个以逗号分隔的列表。
split(',')
允许您将'1,2,3'
分解为['1', '2', '3']
并将'4'转换为['4']
你仍然需要将每个字符串转换为int,并且我正在为此进行列表理解。
def main():
n = input("Enter list of numbers separated by commas: ")
# For each val in list of input, make int.
list = [int(val) for val in n.split(',')]
print(list)
if __name__ == '__main__':
main()
答案 2 :(得分:0)
您不需要评估功能。它仅用于评估这些东西。
您需要通过拆分功能拆分输出并将其转储到列表中。
您的解决方案: -
def main():
n = raw_input("Enter list of numbers separated by commas: ")
list= [int(value) for value in n.split(',')]
print(list)
main()
答案 3 :(得分:0)
def main():
n = list(input("Enter list of numbers separated by commas: "))
n = map(lambda x:int(x),n)
print( n)
main()
答案 4 :(得分:-1)
不要使用eval
因为eval是邪恶的。
def main():
raw = input("Enter list of numbers separated by commas: ")
numbers = list(map(int, raw.split(',')))
print(numbers)
if __name__ == '__main__':
main()