Python 将数字分配给名称,而不基于该数字枚举和打印名称

Python 将数字分配给名称,而不基于该数字枚举和打印名称,python,python-3.x,Python,Python 3.x,我想做的是使用n作为列表“角色”中的字符数,打印出数字n及其旁边的角色。有没有一种方法可以让我以后根据我要的号码,得到一个“分配”给那个号码的字符。我尝试使用enumerate,但后来无法使用if/while/for调用枚举的角色,或者如果我想打印它们。我也试过使用字典,但不能使用附加作为字典。如果可以调用列举的角色,我想知道如何才能做到这一点,如果不能,我回到我最初的问题。以下是我使用的代码: import random Roles = ["One", "Two", "Three", "Fou

我想做的是使用n作为列表“角色”中的字符数,打印出数字n及其旁边的角色。有没有一种方法可以让我以后根据我要的号码,得到一个“分配”给那个号码的字符。我尝试使用enumerate,但后来无法使用if/while/for调用枚举的角色,或者如果我想打印它们。我也试过使用字典,但不能使用附加作为字典。如果可以调用列举的角色,我想知道如何才能做到这一点,如果不能,我回到我最初的问题。以下是我使用的代码:

import random
Roles = ["One", "Two", "Three", "Four"]
SheriffList = []
Alive = []
for n in range(0, len(Roles)):
    random.shuffle(Roles)
    Role = random.choice(Roles)
    Alive.append(Roles.pop(Roles.index(Role)))
    Role2 = n,Role
    print(Role2)
    SheriffList.append(Role2)
    n += 1
    if n == len(Roles):
        random.shuffle(Alive)
        random.choice(Alive)

print(SheriffList)
   [(0, 'One'), (1, 'Four'), (2, 'Three'), (3, 'Two')]
k = int(input("Choose a number:"))

现在,我希望k(我选择的数字)能够打印回分配给它的角色,例如,如果我将1分配给“k”,它将向我发送“4”。很抱歉,如果之前已经有人问过这个问题,我就是找不到我需要的东西。

你其实不需要做太多,你可以留一张清单。如果您希望
'One'
位于索引
1
,可以附加
None

>>> Roles = [None, "One", "Two", "Three", "Four"]
>>> Roles[2]
'Two'
>>> Roles[3]
'Three'
>>> roles = ["One", "Two", "Three", "Four"]
>>> random.shuffle(roles)
>>> roles
['Three', 'Four', 'Two', 'One']
>>> roles = [None] + roles
>>> roles[3]
'Two'
>>> roles[2]
'Four'
>>> roles[1]
'Three'
>>> roles[4]
'One'
您可以在添加
None
之前对列表进行洗牌:

>>> Roles = [None, "One", "Two", "Three", "Four"]
>>> Roles[2]
'Two'
>>> Roles[3]
'Three'
>>> roles = ["One", "Two", "Three", "Four"]
>>> random.shuffle(roles)
>>> roles
['Three', 'Four', 'Two', 'One']
>>> roles = [None] + roles
>>> roles[3]
'Two'
>>> roles[2]
'Four'
>>> roles[1]
'Three'
>>> roles[4]
'One'

你最好用措辞:

import random
Roles = ["One", "Two", "Three", "Four"]
SheriffList = {}
Alive = []
for n in range(0, len(Roles)):
    random.shuffle(Roles)
    Role = random.choice(Roles)
    Alive.append(Roles.pop(Roles.index(Role)))
    #Role2 = (n, Role)
    SheriffList[str(n)]=Role
    #SheriffList.append(Role2)
    n += 1
    if n == len(Roles):
        random.shuffle(Alive)
        random.choice(Alive)

print(SheriffList)
 #  [(0, 'One'), (1, 'Four'), (2, 'Three'), (3, 'Two')]
k = int(input("Choose a number:"))
print(SheriffList[str(k)])

解决此问题的常用方法是使用间接表:

ind = [0, 3, 2, 1]
然后,要获得与number
k
对应的角色,只需使用:

cur_role = Role[ind[k]]

简单、干净且不需要循环…

这将洗牌角色列表,并根据用户给定的0到3的数字为您提供其中一个角色

import random

Roles = ['One','Two','Three','Four']

random.shuffle(Roles)

k = int(input('choose a number:'))

print(Roles[k])

如果你想处理东西之间的关联,可以使用
字典
。你在
for
循环中的具体目标是什么?我使用了for循环,因此我可以首先为每个角色分配一个数字,然后清空角色列表并将角色移动到列表aliveElegant。