2016-06-27 11 views
1

number_of_dice回の 'ロール'を行い、ロールの合計を見つけるコードを作成したいと思います。これは私が持っているものです。 "sum = sum + roll"を実行するとエラーが発生します。サポートされていないオペランドの型は+:built_in_function_or_methodとintです。これをどうすれば解決できますか?サイコロでサイコロをn回転記する

for i in range(0,number_of_dice): 
    roll = random.randint(1,number_of_sides + 1) 
    sum = sum + roll 
    return sum 
+0

は、あなたが開発したようあなたに見てみたいことがあります[ジェネレータ式](https://www.python.org/dev/peps/pep-0289/)と使用組み込み 'sum'関数です。 – AChampion

答えて

2

Pythonは配列として与えられる数値の和を返す関数sumに内蔵されています。変数sumを宣言していないので、組み込み関数rollは許可されていない+にしようとしています。ループの前に変数を定義する必要があります。

sum = 0 
for i in range(0,number_of_dice): 
    roll = random.randint(1,number_of_sides + 1) 
    sum = sum + roll 

return sum 

ループ内からではなく、ループの後に戻ることになっています。また、組み込み関数sumをシャドーしたくない場合は、変数に別の名前を使用できます。

+1

'sum'をシャドーしません。誰がそれが壊れるかを知っていますか? –

+0

@SamyBencherifこのコードが小さな関数の中にある場合、小さなローカルスコープで非常に問題なく組み込むことができます。しかし、スコープが問題よりも大きい場合はスコープが問題になる可能性があります。当然のことながら、ここでは状況を言うことはできません。だから私は答えの最後の行を置いたのです。 – taskinoor

+0

しかし、新しい人をコーディングに導入しようとしているのであれば、組み込み関数を変数名として使用する習慣を壊すべきです。 – PyNEwbie

0

私が使用したい:

import random 

def sum_of_dice(number_of_dice, n_sides_on_die=6): 
    return sum([random.choice(range(1, n_sides_on_die + 1)) 
       for i in range(number_of_dice)]) 
+0

本当にリストを作成する必要はありません。 '[]'を削除して、ジェネレータ式を持っています。 'randint()'は 'choice(range(...))'と同じことをします。 – AChampion

関連する問題