从while循环到ValueError

时间:2019-02-25 22:30:54

标签: python python-3.x list while-loop

我想为变量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循环?

2 个答案:

答案 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())

编辑:我主要是指出引起错误的问题,但是更大的问题可能是如上所述的无限循环。