我想为变量20 15 7 5 4 2
输入整数,并用空格隔开。 用户输入示例。x
。该列表应输入Traceback (most recent call last):
File "C:/Users/Array Partitioning.py", line 28, in <module>
arrpartitioning(input().split())
File "C:/Users/Array Partitioning.py", line 18, in arrpartitioning
b.append(max(x))
ValueError: max() arg is an empty sequence
,然后分成两部分。然后应将零件彼此相减,并输出可能的最小差异。下面的代码将已部分输入拆分为列表,但没有完成。我以为我可以创建一个封装所有if语句的while循环,但这会给我以下错误。
错误消息
x
我假设while语句不会停止,并且会在一段时间后尝试遍历变量x
的空列表。最初,我认为应该在再次启动while循环之前检查# User input, space separated
ui = input()
x = list(map(int, ui)
half = sum(x)//2
# two empty lists to enter the x-values
a = []
b = []
flag = False
# while len(x) != 0:
# while loop to divide the values
while flag == False:
if sum(a) < half:
a.append(max(x))
x.remove(max(x))
while sum(b) < sum(a):
b.append(max(x))
x.remove(max(x))
# Same error message even if I indent the if-statement to the while-block
if len(x) == 0:
flag == True
变量的长度,但这不起作用。即使我缩进将它包括在while循环中,第二个while循环中的if语句也无济于事。
x
有人可以先请我解释一下,问题是否在我的while循环中;如果是,然后是第二个,一旦dict = {x: [true, false]}
中不再有值,如何退出while循环?
答案 0 :(得分:2)
您需要添加一个条件,以便在x不再有效时退出循环:
# User input, space separated
ui = input()
x = list(map(int, ui.split(' ')))
half = sum(x)//2
# two empty lists to enter the x-values
a = []
b = []
# while len(x) != 0:
# while loop to divide the values
while len(x) > 1:
if sum(a) < half:
a.append(max(x))
x.remove(max(x))
while sum(b) < sum(a):
b.append(max(x))
x.remove(max(x))
# check last element independently
if sum(b) < sum(a) < half:
b.append(x.pop())
else:
a.append(x.pop())
print(x)
print(a)
print(b)
答案 1 :(得分:1)
在将int
映射到输入之前,需要将用户输入拆分为单独的字符串。否则,它将尝试将20 15 7 5 4 2
的整个字符串转换为一个整数值。要解决此问题,请尝试在地图输入中添加split()
,以将其转换为字符串列表:
x = list(map(int, ui.split())
编辑:我主要是指出引起错误的问题,但是更大的问题可能是如上所述的无限循环。