#python #string #variables #parameters
#python #строка #переменные #параметры
Вопрос:
import random
import time
from sports import sports
from states import states
def get_word():
while True:
user_input = input('Select a category (sports or states): ')
if user_input in ['sports', 'states']:
return random.choice([user_input])
else:
print(f'{user_input} is not a valid category, try again!')
print('n')
Эта функция get_word() пытается выбрать случайное слово из списка в зависимости от категории, которую выбирает пользователь. У меня возникла проблема со строкой 10, потому что переменная user_input представляет собой строку либо ‘sports’, либо ‘states’. Эти строки уже являются именами переменных для списка, импортированного из других скриптов python. Когда я вызываю random.choice(user_input) Я получаю случайную букву из строки ‘sports’ или ‘states’ в зависимости от того, что выбрал пользователь. Вместо этого я хочу случайный элемент либо из переменной sports, либо из состояний. Как мне изменить переменную user_input, которая сохраняется как строка, для вызова фактических переменных.
Комментарии:
1. пожалуйста, не вставляйте свой код в виде скриншота.
2. как мне тогда опубликовать свой код?
3. скопируйте свой код, добавьте его в виде текста
4. Смотрите meta.stackexchange.com/questions/22186 /…
5. Хорошо, спасибо, но знаете ли вы решение моего вопроса, пожалуйста?
Ответ №1:
Если у вас есть только несколько возможностей, часто проще создать набор if
операторов:
if user_input in ['sports', 'states']:
if user_input == 'sports':
return random.choice(sports)
elif user_input == 'states':
return random.choice(states)
Если вместо этого вы хотите иметь возможность обрабатывать произвольно большое количество категорий, вы можете использовать a dict
для их организации, а затем выбрать, какую из них использовать, dict
когда вам нужно:
user_input_options = {
'sports': sports,
'states': states,
}
...
if user_input in user_input_options: # this checks the keys of user_input_options, which makes it identical to ['sports', 'states'] for our purposes
return random.choice(user_input_options[user_input])
Комментарии:
1. Хорошо, спасибо! И да, я в конечном итоге собираюсь добавить больше категорий, поэтому я хотел избежать операторов if.