2015-04-05 9 views
0
import random 
stats = [0]*6 
fixed = [1,2,3,4,5,6] 
def single_roll(n,fixed=(),sides=6): 
    for x in range(0,n): 
     dice = random.randint(1,6) 
     if dice == 1: 
      stats[0] += 1 
     elif dice == 2: 
      stats[1] += 1 
     elif dice == 3: 
      stats[2] += 1 
     elif dice == 4: 
      stats[3] += 1 
     elif dice == 5: 
      stats[4] += 1 
     elif dice == 6: 
      stats[5] += 1 
x = list(zip(fixed, stats)) 
single_roll(10) 
print (x) 

Когда я пытаюсь запустить это, почему он создает список с 0 для списка статистики? Почему цикл for не используется в программе? Благодарю.Почему мой цикл for игнорируется?

ответ

3

Вы создаете x перед вызовом функции single_roll, и в этот момент список stats - это все нули. stats используется для вычисления значения x, но впоследствии x - это новый список без подключения к stats, поэтому хотя single_roll изменяет stats, x не изменяется. Вы можете просто поставить задание после вызова:

single_roll(10) 
x = list(zip(fixed, stats)) 
+0

Просто бил меня к нему;) – Joost

+0

Еще один вопрос с синтаксисом: есть ли способ поставить статистику и фиксированные функции после моей строки def вместо нее? – Zach2095

+0

@ Zach2095 Вы могли бы, если хотите, но каждый раз, когда вы вызываете функцию, это приведет к тому, что список 'stats' перейдет в список нулей. Это будет зависеть от того, чего вы пытаетесь достичь. – logic

0

Все, что вам нужно сделать, это:

import random 
stats = [0]*6 
fixed = [1,2,3,4,5,6] 
def single_roll(n,fixed=(),sides=6): 
    for x in range(0,n): 
     dice = random.randint(1,6) 
     if dice == 1: 
      stats[0] += 1 
     elif dice == 2: 
      stats[1] += 1 
     elif dice == 3: 
      stats[2] += 1 
     elif dice == 4: 
      stats[3] += 1 
     elif dice == 5: 
      stats[4] += 1 
     elif dice == 6: 
      stats[5] += 1 


single_roll(10)  
x = list(zip(fixed, stats)) #place this after the function call 
print (x) 

Теперь это будет выход:

[(1, 1), (2, 2), (3, 2), (4, 2), (5, 2), (6, 1)] 
Смежные вопросы