#python #python-3.x #python-3.8
#python #python-3.x #python-3.8
Вопрос:
Я пытаюсь составить список, чтобы у вас было имя, их поведение и действие. Кажется, я просто не могу заставить свое if/else
утверждение работать. Он выбирает только мой else
. Никогда не мой if
, хотя это должно иметь более высокую вероятность. Это мой код:
import random
Names = ['john', 'james', 'dave', 'ryan']
behaviour = ['good', 'bad']
good = ['candy', 'presents', 'hug']
bad = ['get coal', ' have to stand in the corner']
for i in Names:
n = random.choices(behaviour,weights=(3,1))
k = random.choice(bad)
if n=='good':
print('{} was good this year therefor they get {}'.format(i,random.choice(good)))
else:
print('{} was bad this year therefor they {}'.format(i,random.choice(bad)))
все мои вещи — это просто название, которое было плохим в этом году, поэтому они получают, а затем либо уголь, либо угол…..
Комментарии:
1. Попробуйте выполнить
print(n)
, и вы обнаружите проблему2. Добро пожаловать в Stack Overflow! Пожалуйста, прочитайте о том, как отлаживать небольшие программы . Вы также можете использовать Python-Tutor , который помогает визуализировать пошаговое выполнение кода.
Ответ №1:
Из документации:
random.choices(population, weights=None, *, cum_weights=None, k=1)
Возвращает список элементов размером k
Он вернет список, но вы сравниваете его с одной строкой 'good'
— они никогда не будут одинаковыми, и там он всегда выбирает else
блок.
Вы могли бы, например:
if n == ['good']:
print('{} was good this year therefor they get {}'.format(i,random.choice(good)))
else:
print('{} was bad this year therefor they {}'.format(i,random.choice(bad)))
Или:
if n[0] == 'good':
Комментарии:
1. Рад помочь, если вы считаете, что какой-либо из ответов достаточно хорош, пожалуйста, примите его с галочкой, чтобы вопрос был отмечен как ответ, и другие могли найти его как решаемый.
Ответ №2:
Это потому random.choices
, что возвращает список, поэтому он никогда не будет равен строке (например 'good'
).
Измените его на:
n = random.choices(behaviour, weights=(3,1))[0]
Ответ №3:
Random.choices выдает список с одним элементом. Чтобы выполнить сравнение со строкой «good», вам нужно проиндексировать этот элемент с помощью n[0]
if n[0]=='good':
print('{} was good this year therefor they get {}'.format(i,random.choice(good)))
Я считаю полезным использовать оператор print для сравнения переменных и проверки того, что они соответствуют тому, что я думаю. Это хороший способ проверить наличие проблем. Тестовая печать, подобная этой
print(n, 'good', n=='good', str(n)=='good')
перед тем, как операторы if выдадут этот вывод
['good'] good False False
что довольно поучительно относительно того, в чем проблема.