0

我不想创建一个从两个不同字典中选择 2 个随机项目的程序。现在我不想检查这些项目的总和是否等于用户提供的值。在我从不同的字典中找到 2 个随机项目,这些项目加起来等于用户输入的数字之前,我不会执行此操作。

这是我试图做的:

import random
credit=int(raw_input("Please enter your amount: "))
food=dict([(10, 'Lays'), (10,'Pepsi'), (10,'Burger')])
toys=dict([(10, 'Car'), (10,'Train'), (10,'Chess')])
ranf=random.choice(food.keys())
rant=random.choice(toys.keys())
while int(ranf)+int(rant)!=credit:
    ranf=random.choice(food.keys())
    rant=random.choice(toys.keys())
print(ranf)
print(food[ranf])
print(rant)
print(food[rant])

当我尝试运行此代码时,它无法打印这两个随机项目。我没有收到任何错误消息。请运行此代码并帮助我。

谢谢你

4

2 回答 2

3

问题在于您使用重复键创建字典 - 实际上,您的food字典仅包含(10,'Burger')并且您的玩具字典只有(10,'Chess')项目(它们都只包含最近添加的项目,它替换了所有以前的项目)。最简单和最快的解决方法是放弃使用字典:

import random
credit=20
food=[(10, 'Lays'), (10,'Pepsi'), (10,'Burger')]
toys=[(10, 'Car'), (10,'Train'), (10,'Chess')]
ranf=random.choice(food)
rant=random.choice(toys)
while int(ranf[0])+int(rant[0])!=credit:
    ranf=random.choice(food)
    rant=random.choice(toys)

print(ranf)
print(rant)
于 2013-09-17T14:25:57.973 回答
1

food.keys() 只返回唯一键。因此,基本上由 food.keys() 函数返回的唯一键列表是 [10]。例如,如果您制作像 food = dict([(10, 'Lays'), (15,'Pepsi'), (15,'Burger')]) 这样的字典,那么 food.keys() 返回的列表将是 [ 10,15] 而不是 [10,15,15] 这是您所期望的。因此,在您的代码中,如果 ranf = 10,则解释器会占用分配给该键的最新值。

因此,您使用的 random.choice() 是徒劳的。此外,您的代码中有一个愚蠢的错误,您编写了 print(food[rant]) 而不是 print(toys[rant])。

如果你不使用列表会更好,否则,使键不同。

于 2013-09-17T14:46:16.157 回答