-3

为什么我在以下代码中遇到 map() 函数错误?为什么不能 map 转换列表中的负数x。输出应该类似于“1 --> 2 --> 3”。每当我输入时,列表都应该结束-999。我收到一个错误,例如:

Traceback (most recent call last):
  File "c2.py", line 3, in <module>
    x=map(int,x)
ValueError: invalid literal for int() with base 10: '-'

代码:

while(1):
    x=list(raw_input("Input a number\n(type -999 to end);"))
    x=map(int,x)
    if x<0:
        break
    pass
    print x
del x[len(x)]
for i in range(0,(len(x))):
    print "%d-->" %(x[i]),
4

3 回答 3

1

谢谢……知道了:)

    x=[]
    while(1):
       s=raw_input("Input a number\n(type -999 to end);")
       s=int(s)
       x.append(s)
       if s<0:
          break
       pass
    print "\n%d" %(x[0]),
    for i in range(1,(len(x))):
        print "-->%d" %(x[i]),
    print "\n\nNumber of items = %d" %(len(x)-1)
于 2014-09-03T13:01:39.070 回答
0

尝试

x = map(int,raw_input().split())
于 2014-09-03T12:56:40.710 回答
0

没有解决与map无关的其他错误,问题是map返回一个列表。

在 IDLE 中查看:

>>> map(int, ["123", "456", 7.3])
[123, 456, 7]
>>>

所以x<0没有意义,你会想要像 min(x) < 0 这样的东西。将列表作为输入的东西。

在这种情况下,您可能应该单独隔离和处理每个条目。获取输入行,扫描它的空格(或 split() 它,如下所述)并解析每个整数。

即使您正确使用了 split 和 map,您也会自动在 -999 的同一行上处理整数,但在它之后。任何不解析的东西都不会给你足够的反馈来了解真正出了什么问题。

解析用户输入通常必须是低级的和面向字符的,否则它无法诊断他们的错误输入。有时生活很乏味。

(另外,为什么清空列表然后尝试打印它?)

于 2014-09-03T12:57:20.797 回答