2017-02-23 5 views
0
def formula(listA, count_zero=0, start_waiting_time = 0, result=[], service_time=random.expovariate(1.2), interarrival=1): 
    for i in listA: 
     if i == 1: 
      result.append(max(start_waiting_time + service_time - (count_zero + 1) * interarrival), 0) 
      count_zero = 0 
     elif i == 0: 
      count_zero += 1 
    return result 

# Test case 
print(formula([1, 1, 1, 0, 1, 0, 0, 1])) 

#This returns result: TypeError 'float' object is not iterable 

result.append(max(start_waiting_time + service_time - (count_zero + 1) * interarrival), 0)からmaxを削除すると結果が得られますが、これらの結果は私が望んでいないものです。タイプエラーを修正する方法: 'float'オブジェクトはプログラム内で反復可能ではありませんか?

これはmaxは式から削除されたコードである。これらの結果は、結果は私が方程式にmaxを追加するための理由だった否定することになったことがないことを除いて正しい

def formula(listA, count_zero=0, start_waiting_time = 0, result=[], service_time=random.expovariate(1.2), interarrival=1): 
    for i in listA: 
     if i == 1: 
      result.append(start_waiting_time + service_time - (count_zero + 1) * interarrival) 
      count_zero = 0 
     elif i == 0: 
      count_zero += 1 
    return result 

#[1.536003224186501, 1.536003224186501, 1.536003224186501, 0.5360032241865009, -0.4639967758134991] 

、私は結果が否定的になった場合に0を計算するようプログラムに指示しようとしていました。そこで、私が期待される結果となった。

#[1.536003224186501, 1.536003224186501, 1.536003224186501, 0.5360032241865009, 0] 

差が、結果の最後の出力は0ではなく-0.4639967758134991であるということです。あなたはタプルを渡しますのであれば

start_waiting_time + service_time - (count_zero + 1) * interarrival 

:のpython3のドキュメントから

+0

括弧を修正する必要があります。あなたのコードは 'list.append(max(...、0))の代わりに' list.append(max(...)、0) 'です。 –

+0

はい、これは正しい、それは働いた。 –

答えて

1

:あなたのコードで

Help on built-in function max in module builtins:

max(...) max(iterable[, key=func]) -> value max(a, b, c, ...[, key=func]) -> value

With a single iterable argument, return its largest item. 
With two or more arguments, return the largest argument. (END) 

、あなたは、式の結果である単一のfloat値、上の最大を使用しましたあなたの式で0をmax関数に代入すると、次のようになります。

result.append(max((start_waiting_time + service_time - (count_zero + 1) * interarrival,0))) 

期待通りに動作します。

関連する問題