В приведенном ниже коде "roll_counts" используется как возврат для первой функции, а затем как параметр для второй функции. мой вопрос в том, что если я изменил roll_counts во втором функциональном параметре на ABC и оставил его roll_counts в первой функции, код все равно будет работать нормально. Я знаю roll_counts = 6 в круглых скобках, но как? и почему результат не меняется, когда я новичок в python и программировании, заранее спасибо
import random as rd
def simulate_dice_rolls(N):
roll_counts = [0,0,0,0,0,0]
for i in range(N):
roll = rd.choice([1,2,3,4,5,6])
index = roll - 1
roll_counts[index] = roll_counts[index] + 1
return roll_counts
def show_roll_data(roll_counts):
number_of_sides_on_die = len(roll_counts)
for i in range(number_of_sides_on_die):
number_of_rolls = roll_counts[i]
number_on_die = i+1
print(number_on_die, "came up", number_of_rolls, "times")
roll_data = simulate_dice_rolls(1000)
show_roll_data(roll_data)
Ответ blhsing правильный. Но прежде чем принять этот ответ, вам нужно понять переменную область действия. В python есть глобальные переменные и локальные переменные. А локальные переменные привязаны к функциям. Если в функции есть одна и та же локальная переменная для глобальной переменной, то локальная переменная используется без привязки к глобальной переменной. Поскольку roll_counts является локальной переменной simulate_dice_rolls, вам не нужно рассматривать roll_counts в show_roll_data.
roll_counts
в show_roll_data(roll_counts)
- это имя параметра и доступно во всей области функции show_roll_data
. Его значение передается из roll_data
в вызове show_roll_data(roll_data)
и не имеет ничего общего с локальной переменной с тем же именем, что и в show_roll_data(roll_data)
simulate_dice_rolls
. Вот почему вы можете переименовать roll_counts
в show_roll_data
на что угодно, и это все равно будет работать.
roll_counts
когда-либо получает значение 6, поскольку это список из 6 элементов. Он получает значение из вызова функции show_roll_data(roll_data)
, поэтому значение roll_data
становится значением roll_counts
в функции show_roll_data
.