从带有variab的字典中请求值

2024-05-20 17:59:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python创建一个串行生成器,当我生成一个数字时,它被分配给一个变量。现在序列号有数字和字母。我使用变量来存储每个字符,最后我将它们组合成一个序列。到目前为止,我得到了所有的数字,所以我为字母点设置了一个更高的范围。我想从字典中调用这个号码,使用我已经拥有的变量和归属于它的号码。你知道吗

我已经试过用这个变量打印dictionary变量,但它会引发一个错误。你知道吗

我使用以下代码:

# ironkeys serial gen prototype 1.0 - python 3.7 | 6 character (alternate 
# characters)
import random

v1 = 0
v2 = 0
v3 = 0
v4 = 0
v5 = 0
v6 = 0

d = {10: "A",11: "B",12: "C",13: "D",14: "E",15: "F",16: "G",17: "H",18: 
"I",19: "J",20: "K",21: "L",22: "M",22: "N",23: "O",24: "P",24: "Q",25: 
"R",26: "S",27: "T",28: "U",29: "V",30: "W",31: "X",32: "Y",32: "Z"}

def gen():
    v1 = random.randint(0,9)
    v2 = random.randint(10,33)
    v3 = random.randint(0,9)
    v4 = random.randint(10,33)
    v5 = random.randint(0,9)
    v6 = random.randint(10,33)

def letterAssignAndPrint(v2, v4, v6):
    checkVar1 = d[v2]
    checkVar2 = d[v4]
    checkVar3 = d[v6]
    print(v1, checkVar1, v3, checkVar2, v5, checkVar3)

尝试运行上述代码时发生以下错误:

Traceback (most recent call last)
<ipython-input-24-d45f5b5c2e55> in <module>
----> 1 print(d[v2])

KeyError: 0

Tags: 代码def错误字母数字randomv3号码
3条回答

为什么不这样做:

from random import choice
from string import ascii_uppercase, digits

serial = "".join((choice(digits) + choice(ascii_uppercase) for _ in range(3)))
print(serial)

string.digits = "0123456789"(参见string constants);并且^{}选择其中一个。其余的只是把一个数字加上一个字母的3倍。你知道吗


在您的示例中v2似乎是0,而在您的字典中没有该键d。你知道吗

你的代码应该大部分都能工作。我不知道你为什么拿钥匙错误:0。您应该偶尔得到Key Error:33,因为random.randint(10,33)有时会生成33,这在您的字典中并不存在。这应该管用。你知道吗

# ironkeys serial gen prototype 1.0 - python 3.7 | 6 character (alternate characters)
import random

v1 = 0
v2 = 0
v3 = 0
v4 = 0
v5 = 0
v6 = 0

d = {10: "A",11: "B",12: "C",13: "D",14: "E",15: "F",16: "G",17: "H",18: 
"I",19: "J",20: "K",21: "L",22: "M",22: "N",23: "O",24: "P",24: "Q",25: 
"R",26: "S",27: "T",28: "U",29: "V",30: "W",31: "X",32: "Y",32: "Z"}

#def gen():
v1 = random.randint(0,9)
v2 = random.randint(10,32)
v3 = random.randint(0,9)
v4 = random.randint(10,32)
v5 = random.randint(0,9)
v6 = random.randint(10,32)

#def letterAssignAndPrint(v2, v4, v6):
checkVar1 = d[v2]
checkVar2 = d[v4]
checkVar3 = d[v6]

sn = '{}{}{}{}{}{}'.format(v1, checkVar1, v3, checkVar2, v5, checkVar3)
print(v1, checkVar1, v3, checkVar2, v5, checkVar3)


print(sn)

这给了

8 R 8 W 9 C
8R8W9C

format function用提供的值替换模板字符串中的所有大括号({})。这是一种制作包含字母和数字的格式化字符串的简便方法。你知道吗

您也可以使用Python % operator。每个%d都替换为整数,每个%s都替换为字符串。你知道吗

sn = '%d%s%d%s%d%s' % (v1, checkVar1, v3, checkVar2, v5, checkVar3)

我不明白分开函数genletterAssignAndPrint的意义。如果你认为你最终想要一个函数,那么你必须小心变量的作用域。一种方法是从函数中返回元组或列表:

# ironkeys serial gen prototype 1.0 - python 3.7 | 6 character (alternate characters)
import random

v1 = 0
v2 = 0
v3 = 0
v4 = 0
v5 = 0
v6 = 0

d = {10: "A",11: "B",12: "C",13: "D",14: "E",15: "F",16: "G",17: "H",18: 
"I",19: "J",20: "K",21: "L",22: "M",22: "N",23: "O",24: "P",24: "Q",25: 
"R",26: "S",27: "T",28: "U",29: "V",30: "W",31: "X",32: "Y",32: "Z"}

def gen():
    v1 = random.randint(0,9)
    v2 = random.randint(10,32)
    v3 = random.randint(0,9)
    v4 = random.randint(10,32)
    v5 = random.randint(0,9)
    v6 = random.randint(10,32)
    return (v1, v2, v3, v4, v5, v6)

def letterAssignAndPrint(v2, v4, v6):
    checkVar1 = d[v2]
    checkVar2 = d[v4]
    checkVar3 = d[v6]
    return (checkVar1, checkVar2, checkVar3)

v1, v2, v3, v4, v5, v6 = gen()
checkVar1, checkVar2, checkVar3 = letterAssignAndPrint(v2, v4, v6)


print(v1, checkVar1, v3, checkVar2, v5, checkVar3)

sn = '{}{}{}{}{}{}'.format(v1, checkVar1, v3, checkVar2, v5, checkVar3)
print(sn)

def gen()中的变量v1到v6是函数gen()的本地变量,不更新主程序中的变量v1到v6。你知道吗

相关问题 更多 >