Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一个输入中解包值以进行整数处理?_Python_Error Handling_Integer - Fatal编程技术网

Python 从一个输入中解包值以进行整数处理?

Python 从一个输入中解包值以进行整数处理?,python,error-handling,integer,Python,Error Handling,Integer,首先。我知道这看起来很混乱,但在将py2.7转换为Py3.5代码时遇到了一个大问题,我还没有清理它。继续。我试图将所有值作为一行解包。这段代码可以工作,但没有我想要的那么好。我可以为1-9之间的任何其他数字输入值,这将起作用,但如果我想滚动1d20呢?还是10d4?我似乎无法使整数分开。在py2.7和Py3.5中,由于我现在在这两者上都有一个工作代码,如果我(.split())或(.join(“”)变量,我仍然无法让它将整数作为单独的条目从“r3d4”行拉到一起。一旦我输入了一个两位数的数字,就

首先。我知道这看起来很混乱,但在将py2.7转换为Py3.5代码时遇到了一个大问题,我还没有清理它。继续。我试图将所有值作为一行解包。这段代码可以工作,但没有我想要的那么好。我可以为1-9之间的任何其他数字输入值,这将起作用,但如果我想滚动1d20呢?还是10d4?我似乎无法使整数分开。在py2.7和Py3.5中,由于我现在在这两者上都有一个工作代码,如果我(.split())或(.join(“”)变量,我仍然无法让它将整数作为单独的条目从“r3d4”行拉到一起。一旦我输入了一个两位数的数字,就会出现一个错误“太多的值无法解包”,或者出现“int base 10”错误。有什么想法吗?我不想把它分成“你想掷多少骰子?”等等。我想要一个干净的单行条目。下面的代码在这里工作:但我不确定它是2.7还是3.5

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')