从名称列表创建大量字典

时间:2018-08-06 16:41:39

标签: python

我正在制作一个时间表/除法游戏,我为每个时间表和除法(最多12个)创建了词典,该词典由问题作为键,而答案作为值。那是24本字典!当然,有比我做的更好的方法,也许是创建一个for循环。

我设法使用以下循环代码制作了每个表/除法字典(24次; 12个用于多个表,12个用于除法等效项)我提供了一个多字典的示例以及一个除法

eleven_division = {}
for i in range (0,13):
    division_factor = 11 
    answer = i * division_factor
    eleven_division ['{} / {} ='.format(answer,division_factor)] = i

six_times = {}
for i in range (0,13):
    multiple = 6
    answer = i * multiple
    six_times ['{} x {} ='.format(i,multiple)] = answer

我想使用嵌套的for循环创建所有字典,但是用以下方式命名每个字典:two_times,three_times,four_times。但是,我可以找出一种方法。

我知道我可以这样做以打印出所有除法表。

for x in range (1,13):
    division_factor = x
    for i in range (0,13):
        answer = i * division_factor
        print ('%s / %s = %s' %(answer, x, i))

我现在每次循环时都需要创建一个新字典,所以我认为以下方法可以做到,但是没有!

    dicts =['one division', 'two division','three division','four division', 'five division', 'six division', 'seven division', 'eight division', 'nine division', 'ten division', 'eleven division', 'twelve division']
for f in dicts:
    f = {} 
    for x in range (1,13):
        division_factor = x
        for i in range (0,13):
            answer = i * division_factor
            f ['{} x {} ='.format(answer,x)] = i

print (one division) #THIS IS THE BIT I WANT WORKING!

我希望我已经为您弄清楚了我的问题。

TIA!

1 个答案:

答案 0 :(得分:2)

如果我了解您的问题,那么您有12个单独的部门命令,并且您不知道如何使用这些可怕的代码来对它们进行任何操作:

   #slider {
       width: 100%;
       margin: auto;
       overflow: hidden;
       background: #CCC;
   }
   .slide {
     width: 100%:
       height: 350px;
       float: left;
       text-align: center;
       border: 1PX SOLID #000;
       line-height: 8em;
       font-size: 40px;
   }

答案是,您不希望将这些字典放在12个单独的变量中,而是希望它们在字典中,因此您可以像这样查找它们:

if i==1: table = one_division
elif i==2: table = two_division
# … 10 more lines of code
do_something_with(table)

一行而不是13行,也更容易理解。

您可以循环生成此字典:

do_something_with(division_tables[i])

现在您可以编写这样的游戏:

division_tables = {}
for division_factor in range(1, 13):
    table = {}
    for i in range (0,13):
        answer = i * division_factor
        table['{} / {} ='.format(answer,division_factor)] = i
    division_tables[division_factor] = table

如果您希望这些字典按有用的顺序排列,则可以通过选择前三个表之一来选择一个简单的问题,那么您可能希望使用列表而不是字典:

factor = random.choide(division_tables)
table = division_tables[factor]
question = random.choice(table)
answer = table[question]
guess = int(input(question))
if guess == answer:
    print('You are correct, sir!')
else:
    print('Hahahaha, a 20-line Python script has outsmarted you’')

现在您可以这样做:

division_tables = []
for division_factor in range(1, 13):
    table = {}
    for i in range (0,13):
        answer = i * division_factor
        table['{} / {} ='.format(answer,division_factor)] = i
    division_tables.append(table)