【问题标题】:Python truncating numbers in integer arrayPython截断整数数组中的数字
【发布时间】:2012-03-02 20:13:44
【问题描述】:

我正在自学 Python,但遇到了一个奇怪的问题。我想要做的是将一个列表传递给一个函数,并让函数返回一个列表,其中元素是它周围数字的总和,但我认为会产生一些奇怪的结果,所以我制作了一个调试版本仍然表现出该行为的代码如下:

当我创建一个整数数组并将其传递给一个函数,该函数然后使用 for 循环打印列表的各个值时,每个 int 中第一个数字后面的数字将被截断。

例如下面的输入输出:

Please enter a number: 101
Please enter a number: 202
Please enter a number: 303
Please enter a number: .
1
2
3

无论输入是 10、101 还是 13453,都会发生这种情况 - 会发生相同的行为。

我知道我可能遗漏了一些简单的东西,但是为了我,再多的谷歌搜索都无法解决这个问题。下面附上我用来执行此操作的代码。有趣的是:在任何时候在 for 循环之外打印整个列表时,它都会返回完整且正确的列表(即 ['101', '202', '303'])

谢谢!

temp = list()

def sum(list):
    print list
    for i in range(1, len(list)+1):
        print i
    return temp

L = list()
while True:
    input = raw_input("Please enter a number: ");
    if input.strip() == ".":
        break
    L.append(input);

print L

L2 = sum(L)
print L2

【问题讨论】:

  • 您的缩进错误,可能是复制/粘贴错误。
  • 你不应该使用listinput作为变量名,因为它们会影响它们对应的内置函数。
  • 您知道要附加到L 的值是字符串,而不是整数吗?
  • @JoelCornett 不,我不知道...是否有指导您可以指出我会澄清这一点。我认为 Python 根据需要强制转换变量...类似于 Ruby
  • @Suki:Python 确实动态类型变量,但在这种情况下,您接受字符串输入。所以变量被输入为字符串。当您对该变量进行操作时,python 将对它执行字符串操作。您可以使用userInput = int(raw_input("Please enter a number: "))。这会将传递给userInput 的值转换为整数。阅读 [python.org](www.python.org) 上的 python 文档。

标签: python list function


【解决方案1】:

循环

for i in range(1, len(my_list)+1):
    print i

遍历从 1 到 len(my_list) 的数字,而不是列表中的项目。要执行后者,请使用

for x in my_list:
    print x

(我已将list 重命名为my_list,以免您再头疼。)

【讨论】:

  • 谢谢!现在我需要知道的是:使用您描述的 my_list 方法中的 for x 是否有任何简单的方法可以在类似于 Java 的方法中将数字相加。以 i+1 / i / i-1 为例,将一个列表的所有邻居添加到一个列表中,这样如果 L1 = [1, 2, 3] 那么 L2 = [3, 6, 5] [1+2 , 1+2+3, 2+3] 通常我会做 number = i-1 + i + i+1 (使用适当的错误检查 ofc)
  • @Suki:您不是在要求澄清,而是在问一个全新的问题。请使用页面顶部的“”按钮让我以外的其他人看到新问题。
【解决方案2】:

您正在打印计数器,而不是列表项。这就是你想要的:

for i in list:
    print i

list 本身是可迭代的,您不需要计数器来循环它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 2014-08-26
    • 2014-06-07
    • 2015-04-29
    • 2021-06-11
    • 2021-10-18
    相关资源
    最近更新 更多