Проверить значение случайно сгенерированного списка по ключам в словаре и вернуть значение словарей - PullRequest
0 голосов
/ 06 декабря 2018

Играя с Python, и чтобы проверить свои навыки, я хотел создать скрипт Python, основанный на правилах создания персонажа в D & D 5E.Скрипт до сих пор:


for x in range (1):
    strength.append(random.randint(3,18))
str_score = strength


Ability_Score_Modifiers = {'1' : '-5',
                           '2' : '-4',
                           '3' : '-4',
                           '4' : '-3',
                           '5' : '-3',
                           '6' : '-2',
                           '7' : '-2',
                           '8' : '-1',
                           '9' : '-1',
                           '10' : '0',
                           '11' : '0',
                           '12' : '+1',
                           '13' : '+1',
                           '14' : '+2',
                           '15' : '+2',
                           '16' : '+3',
                           '17' : '+3',
                           '18' : '+4',
                           '19' : '+4',
                           '20' : '+5',
                           '21' : '+5',
                           '22' : '+6',
                           '23' : '+6',
                           '24' : '+7',
                           '25' : '+7',
                           '26' : '+8',
                           '27' : '+8',
                           '28' : '+9',
                           '29' : '+9',
                           '30' : '+10'}

for keys in Ability_Score_Modifiers.keys() and str_score:
        if Ability_Score_Modifiers.keys([str_score]) == Ability_Score_Modifiers.keys():
            print ('True', value)
        else:
            pass

Проблема, с которой я столкнулся, состоит в том, чтобы заставить Скрипт посмотреть на значение, сгенерированное умением, и сравнить его со своим словарем, а затем вернуть значение длясоответствующий ключ, который соответствует номеру, возвращенному для навыка.

Это фрагмент кода, источник здесь 5E Создатель персонажа - издание Python

Я был на этом дляоколо полутора дней, и я выхожу пустым.Конечно, я использую pythonfiddle для практики на работе, поэтому я не получаю логические ошибки.

Спасибо

1 Ответ

0 голосов
/ 06 декабря 2018

Хорошо, так что я получаю: вы генерируете случайный счет силы.Вы хотите сравнить его со словарем, который определяет связь между статической оценкой и модификатором.Должно быть достаточно просто.Попробуйте это:

for key in Ability_Score_Modifiers:
        if Ability_Score_Modifiers[key] == Ability_Score_Modifiers[int(str_score)]:
            print('True', value)

Это работает, потому что мы говорим о том, что изначально мы перебираем все ключи (левые) в словаре модификаторов.Если сторона справа текущей клавиши равна правой стороне клавиши, равной силе, выведите True.Функционально, я не уверен, почему вы хотите проверить логическое равенство, но в любом случае это должно быть сделано.Дайте мне знать, если это работает!

Обновлено

Вот код:

import random
str_score = str(random.randint(3,18))

Ability_Score_Modifiers = {'1' : '-5', '2' : '-4', '3' : '-4', '4' : '-3', '5' : '-3', '6' : '-2', '7' : '-2', '8' : '-1', '9' : '-1', '10' : '0', '11' : '0', '12' : '+1', '13' : '+1', '14' : '+2', '15' : '+2', '16' : '+3', '17' : '+3', '18' : '+4', '19' : '+4', '20' : '+5', '21' : '+5', '22' : '+6', '23' : '+6', '24' : '+7', '25' : '+7', '26' : '+8', '27' : '+8', '28' : '+9', '29' : '+9', '30' : '+10'}
for key in Ability_Score_Modifiers:
        if Ability_Score_Modifiers[key] == Ability_Score_Modifiers[str_score]:
            print("True")
            print("Stat score of {} grants a modifier of {}".format(str_score, Ability_Score_Modifiers[str_score]))

Вывод:

True
Stat score of 15 grants a modifier of +2
True
Stat score of 15 grants a modifier of +2

Просто развлекайтесь

Может быть, это пригодится позже!

import random
#Generate our Str, Dex, Con, Int, Wis, Cha
Ability_Scores = {}
for n in ['Str', 'Dex', 'Con', 'Int', 'Wis', 'Cha']:
    Ability_Scores[n] = str(random.randint(3,18))

Ability_Score_Modifiers = {'1' : '-5', '2' : '-4', '3' : '-4', '4' : '-3', '5' : '-3', '6' : '-2', '7' : '-2', '8' : '-1', '9' : '-1', '10' : '0', '11' : '0', '12' : '+1', '13' : '+1', '14' : '+2', '15' : '+2', '16' : '+3', '17' : '+3', '18' : '+4', '19' : '+4', '20' : '+5', '21' : '+5', '22' : '+6', '23' : '+6', '24' : '+7', '25' : '+7', '26' : '+8', '27' : '+8', '28' : '+9', '29' : '+9', '30' : '+10'}
for score in Ability_Scores:
            print("{} score of {} grants a modifier of {}".format(score, Ability_Scores[score], Ability_Score_Modifiers[Ability_Scores[score]]))

Вывод:

Str score of 7 grants a modifier of -2
Dex score of 12 grants a modifier of +1
Con score of 17 grants a modifier of +3
Int score of 8 grants a modifier of -1
Wis score of 12 grants a modifier of +1
Cha score of 5 grants a modifier of -3

Отредактировано

Оказывается, это даже проще, чем мы думали!

import random
str_score = str(random.randint(3,18))

Ability_Score_Modifiers = {'1' : '-5', '2' : '-4', '3' : '-4', '4' : '-3', '5' : '-3', '6' : '-2', '7' : '-2', '8' : '-1', '9' : '-1', '10' : '0', '11' : '0', '12' : '+1', '13' : '+1', '14' : '+2', '15' : '+2', '16' : '+3', '17' : '+3', '18' : '+4', '19' : '+4', '20' : '+5', '21' : '+5', '22' : '+6', '23' : '+6', '24' : '+7', '25' : '+7', '26' : '+8', '27' : '+8', '28' : '+9', '29' : '+9', '30' : '+10'}
for key in Ability_Score_Modifiers:
        if key == str_score:
            print("True")
            print("Stat score of {} grants a modifier of {}".format(str_score, Ability_Score_Modifiers[str_score]))
True
Stat score of 3 grants a modifier of -4

Таким образом, при выполнении оператора If вам даже не нужно сравнивать, используя словарную индексацию.Вы можете просто использовать «ключ» от итератора и сравнить его с показателем способностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...