Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 如何处理在for循环中没有足够值解包的错误_Python_For Loop_If Statement_Error Handling_Action - Fatal编程技术网

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()
默认分隔符是任何空格,因此结果将取决于用户输入字符和数字的准确程度。