Python 从一个输入中解包值以进行整数处理?
首先。我知道这看起来很混乱,但在将py2.7转换为Py3.5代码时遇到了一个大问题,我还没有清理它。继续。我试图将所有值作为一行解包。这段代码可以工作,但没有我想要的那么好。我可以为1-9之间的任何其他数字输入值,这将起作用,但如果我想滚动1d20呢?还是10d4?我似乎无法使整数分开。在py2.7和Py3.5中,由于我现在在这两者上都有一个工作代码,如果我(.split())或(.join(“”)变量,我仍然无法让它将整数作为单独的条目从“r3d4”行拉到一起。一旦我输入了一个两位数的数字,就会出现一个错误“太多的值无法解包”,或者出现“int base 10”错误。有什么想法吗?我不想把它分成“你想掷多少骰子?”等等。我想要一个干净的单行条目。下面的代码在这里工作:但我不确定它是2.7还是3.5Python 从一个输入中解包值以进行整数处理?,python,error-handling,integer,Python,Error Handling,Integer,首先。我知道这看起来很混乱,但在将py2.7转换为Py3.5代码时遇到了一个大问题,我还没有清理它。继续。我试图将所有值作为一行解包。这段代码可以工作,但没有我想要的那么好。我可以为1-9之间的任何其他数字输入值,这将起作用,但如果我想滚动1d20呢?还是10d4?我似乎无法使整数分开。在py2.7和Py3.5中,由于我现在在这两者上都有一个工作代码,如果我(.split())或(.join(“”)变量,我仍然无法让它将整数作为单独的条目从“r3d4”行拉到一起。一旦我输入了一个两位数的数字,就
import random
print("Dice Roller testing")
roll, amount, dice, sides = str(input("Input the format. example: r3d4. rolls 3d4 "))
amount = int(amount)
sides = int(sides)
i = 1
while i <= amount and roll == "r" and sides == 4:
x = random.randint(1, 4)
print(x)
i = (i+1)
while i <= amount and roll == "r" and sides == 6:
x = random.randint(1, 6)
print(x)
i = (i+1)
while i <= amount and roll == "r" and sides == 8:
x = random.randint(1, 8)
print(x)
i = (i+1)
else:
print("We are finished or the input is not valid.")
随机导入
打印(“骰子滚筒测试”)
滚动、数量、骰子、边=str(输入(“输入格式。示例:r3d4.rolls 3d4”))
金额=整数(金额)
侧面=int(侧面)
i=1
而我以滚动作为输入
import re
exp = re.compile('r?(\d{1,2})d(\d{1,2})')
try:
amount, faces = exp.fullmatch(roll).group(1,2)
except AttributeError:
print('bad format')
如果您使用100个面或数量,请根据位数(即:\d{1,2}
)更改\d{1,3}
),甚至在您说出之前。我不想处理这段代码的函数。请不要回答功能问题。你不能那样打开包装。如果侧面大于10,就可以拆包。这不是我的意思。我能够以“r3d4”为例对上述内容进行解包。如果你把打印语句放在那里或者尝试一下,它会把它们解包。我想知道的是如何分别以字母和数字的形式迭代或解析整个元组,而不是将每个输入字符作为一项。虽然你的代码几乎失去了可读性…@fantascey你可以回答你自己的问题,并选择它作为你选择的答案,但实际上我不能。在我学会如何只留下评论之前,我用答案提问,所以我的账户被禁止回答(
import re
exp = re.compile('r?(\d{1,2})d(\d{1,2})')
try:
amount, faces = exp.fullmatch(roll).group(1,2)
except AttributeError:
print('bad format')