【问题标题】:Python if else loop concatenate objectsPython if else循环连接对象
【发布时间】:2015-11-16 03:07:52
【问题描述】:

我有一个简单的 Python if else 循环,但我得到了一个

错误:prev_word += value_in 无法连接 str 和 int 对象

prev_word = 0
print_variable = 0

for line in sys.stdin:
        line = line.strip()       #strip out carriage return
        key_value = line.split('\t')   #split line, into key and value, returns a list   

        #note: for simple debugging use print statements, ie:  
        curr_word = key_value[0]         #key is first item in list, indexed by 0
        value_in = key_value[1]         #value is 2nd item

    if (value_in == "ABC"):
        print_variable = 1
    else:
        value_in = int(value_in)
        prev_word += value_in
    if (print_variable == 1):
        print( '%s\t%s' % (curr_word, prev_word) )
        print_variable = 0
    prev_word = curr_word

【问题讨论】:

  • 你能发布错误吗?
  • 这可能是因为您无法连接 str (prev_word) 和 int (value_in)。请注意在前一行中,您如何将 value_in 强制为 int,这可能就是它是 int 的原因。

标签: python loops if-statement


【解决方案1】:

这一行是你的问题:

prev_word = curr_word

在您第一次运行循环时,prev_word 是整数 0,您将 value_in 转换为整数。因此,当您将value_in 添加到prev_word 时,会成功,因为它们都是整数。 但是您永远不会将curr_word 转换为整数,因此当您将prev_word 设置为等于curr_word 时,它会变成一个字符串。在您的秒次循环中,prev_word += value_in 失败,因为您无法添加字符串和整数(该操作没有意义)。

实际上,我建议不要将名称 prev_word 用于应该保存整数的变量。将其重命名为 prev_number 或类似名称。因为很明显为什么不应该将curr_word 分配给prev_number,但是为什么不应该将curr_word 分配给prev_word 就不那么明显了。即使prev_word 确实应该是一个数字,至少你使用它的方式是这样。

【讨论】:

  • 正确的变量名确实很重要
【解决方案2】:

您在最后的循环内重新分配prev_word:

prev_word = curr_word

在重新分配之后,初始化为int 的prev_word 变为str,这会导致您的添加失败。

动态类型的力量带来了巨大的责任。好的变量名是关键:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多