Python 如何处理在for循环中没有足够值解包的错误
在以下代码中,用户将输入单个整数Python 如何处理在for循环中没有足够值解包的错误,python,for-loop,if-statement,error-handling,action,Python,For Loop,If Statement,Error Handling,Action,在以下代码中,用户将输入单个整数N,作为他下一步应输入的对数b。假设输入的列表是b=[('r',1),('a',1),('a',2),('a',1),('r',1),('r',2)]并且输出应该是b=[1]。用户将输入如下数据: 6 r 1 a 1 a 2 a 1 r 1 r 2 引发的代码出现错误:“没有足够的值来解包(预期为2,得到1)” 您正试图迭代一个值数组,将每个项解压为多个变量。为此,您需要一个2D数组(第一个维度用于在数组上循环,第二个维度用于解压值) 您正在尝试循环使用用户输入
N
,作为他下一步应输入的对数b
。假设输入的列表是b=[('r',1),('a',1),('a',2),('a',1),('r',1),('r',2)]
并且输出应该是b=[1]。用户将输入如下数据:
6
r 1
a 1
a 2
a 1
r 1
r 2
引发的代码出现错误:“没有足够的值来解包(预期为2,得到1)”
您正试图迭代一个值数组,将每个项解压为多个变量。为此,您需要一个2D数组(第一个维度用于在数组上循环,第二个维度用于解压值) 您正在尝试循环使用用户输入的最后一个值。在您的例子中,它是
r2
,被拆分为['r','2']
。在第一次迭代中,您试图将'r'
解包为两个变量,但这是无法完成的
相反,您应该在用户输入值时将其解压缩
N = int(input())
B=[]
for i in range(N):
b = (input().split())
action, value = b
if action == 'a':
B.append(value)
elif action == 'r':
try:
B.remove(value)
except ValueError:
pass
或者使用数组存储输入:
N = int(input())
B=[]
inputs = []
for i in range(N):
b = (input().split())
inputs.append(b)
for action, value in inputs:
if action == 'a':
B.append(value)
elif action == 'r':
try:
B.remove(value)
except ValueError:
pass
您正试图迭代一个值数组,将每个项解压为多个变量。为此,您需要一个2D数组(第一个维度用于在数组上循环,第二个维度用于解压值) 您正在尝试循环使用用户输入的最后一个值。在您的例子中,它是
r2
,被拆分为['r','2']
。在第一次迭代中,您试图将'r'
解包为两个变量,但这是无法完成的
相反,您应该在用户输入值时将其解压缩
N = int(input())
B=[]
for i in range(N):
b = (input().split())
action, value = b
if action == 'a':
B.append(value)
elif action == 'r':
try:
B.remove(value)
except ValueError:
pass
或者使用数组存储输入:
N = int(input())
B=[]
inputs = []
for i in range(N):
b = (input().split())
inputs.append(b)
for action, value in inputs:
if action == 'a':
B.append(value)
elif action == 'r':
try:
B.remove(value)
except ValueError:
pass
如果要创建列表,应首先将用户输入作为元组附加到列表“b”中,然后循环遍历它并处理如下操作:
N = int(input())
B=[]
b = []
for i in range(N):
user_input = input().split() # this returns a list
b.append(tuple(user_input)) # append user input as a tuple
# Handle actions here
for (action, value) in b:
if action == 'a':
B.append(value)
elif action == 'r':
try:
B.remove(value)
except ValueError:
pass
如果要创建列表,应首先将用户输入作为元组附加到列表“b”中,然后循环遍历它并处理如下操作:
N = int(input())
B=[]
b = []
for i in range(N):
user_input = input().split() # this returns a list
b.append(tuple(user_input)) # append user input as a tuple
# Handle actions here
for (action, value) in b:
if action == 'a':
B.append(value)
elif action == 'r':
try:
B.remove(value)
except ValueError:
pass
用户只输入整数还是字母和整数?您知道实际上,
b
被覆盖N次,您不会得到N个对,是吗?字母和整数与上述完全相同。str.split()
默认分隔符是任何空格,因此,结果将取决于用户输入字符和数字的准确程度。用户只输入整数,还是字母和整数?您知道实际上b
被覆盖N次,您不会得到N对,是吗?字母和整数与上面完全一样。str.split()
默认分隔符是任何空格,因此结果将取决于用户输入字符和数字的准确程度。