【问题标题】:Multiple assignment from method results in TypeError: Int is not iterable in Python方法中的多重赋值导致 TypeError:Int 在 Python 中不可迭代
【发布时间】:2017-03-30 13:58:34
【问题描述】:

我正在处理一个基本问题,它输出用于达到在方法调用时输入的总和的硬币类型的数量。

虽然我可以通过其他方式做到这一点,但我想创建一个方法并想使用多个赋值。

divide 方法应该得到 2 个输入,并且应该返回除法和剩余的原始值。

def divide(coin,value):
    if value >= coin:
        remains = value % coin
        value = (value - remains) / coin
        return value, remains
    else:
        return 0

下面的主要函数,它调用了divide函数,将硬币和值作为参数发送,以获得要更新的硬币数量和初始值。

def stamps(x):
    fives, x = divide(5, x)
    twos, x = divide(2, x)
    print(fives, twos, x)  

print stamps(0)

当硬币输出被计算为正整数时,这很好用。 (比如输入8会输出(1,1,1))但是如果一个或多个硬币计算为0(比如,如果你发送5,输出应该是(1,0,0))但是它给出了以下错误:

twos, x = divide(2, x) TypeError: 'int' object is not iterable

我没有使用任何迭代(至少不是故意的)。为什么我有这个错误?如果 value 小于硬币,divide 方法应该返回 0 是不是正确的?

【问题讨论】:

  • 默认返回一个二元组,例如return 0, 0

标签: python methods multiple-assignment


【解决方案1】:

你的代码是正确的,唯一的问题是你在 else 条件下只返回一个值,这是抛出这个错误。

试试下面的代码-

def divide(coin, value):
if value >= coin:
    remains = value % coin
    value = (value - remains) / coin
    return value, remains
else:
    return 0, 0  #or return 0, value

def stamps(x):
    fives, x = divide(5, x)
    twos, x = divide(2, x)
    print(fives, twos, x)

print(stamps(0))

【讨论】:

  • 请注意:最好返回0, value,否则剩余值“丢失”。
  • 是的!感谢您的提及,我已进行了相关更改。
  • 感谢您的回复,很尴尬没有注意到:/
猜你喜欢
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多