在Python中,我试图创建一个product_ID生成器,它接受任意值的数字,并将其转换为十六进制格式的“#AA0000”。当4个数字溢出超过9999时,它们将ASCII大写字母集中的第一个字母增加1。也就是说,如果我输入10000,我会得到#AB0001
目前,我正在使用模运算符(%)查找输入数字的剩余部分,因此它始终在4位以内。(作为参考,我使用的公式是Numb%9999。)
我目前遇到的问题是如何正确增加第二个字母。我已经设法使一个单字母版本工作,您可以在这里看到:
from string import ascii_uppercase as upper
upper = [a for a in upper]
def Convert_Numb_To_Ref(Order_Number):
"""Takes an Order_Number (int), and converts it into a unique Order_ID"""
Number = str((Order_Number%9999)+1) # Makes it so it never is bigger than 4 digits
Number = ("0"*(4-len(str(Number))))+Number # If number < 1000, adds on 0s to the beginning, so 1 -> 0001
try:
Letter = upper[Order_Number//9999] # Divides and floors
except IndexError:
print("Number too large! Cannot generate Product_ID")
return False
return f"#{Letter}{Number}"
如果我输入10000,我会得到#B0002
这很好,返回我想看到的。(目前上述代码只适用于一个字母,这就是为什么没有2个字母的原因。)我只需要增加第二个字母
问题出在这一行:
如果订单号过大,索引将大于25,因此您将得到一个
IndexError
。为了避免这种情况,您应该使用“模26”来获得一个小于26的数字。你应该再查找下一个字母(左边的那个)其他一些评论:
'%04d' % nr
就可以了李>把它放在一起,你可以这样写:
相关问题 更多 >
编程相关推荐