我一直在做一些代码,我输入一些数字,将它们分成单独的变量,然后对这些数字进行排序,我可以将它们分开,但是当我尝试分成只有4时(例如)数字(小于变量的数量)它返回错误'没有足够的变量来解包'。我想要它所以我可以输入任意数量的数字(最大值,在这种情况下是10)并且它将对给定的数字进行排序,打印它们,但它不会打印其他变量。
我到目前为止做到了这一点:
a, b, c, d, e, f, g, h, i, j = input("enter up to 10 digits").split()
nlist=(a, b, c, d, e, f, g, h, i, j)
def bubbleSort():
for l in range(len(nlist)-1,0,-1):
for k in range(l):
if nlist[k]>nlist[k+1]:
temp = nlist[k]
nlist[k] = nlist[k+1]
nlist[k+1] = temp
bubbleSort(nlist)
print(nlist)
我知道这可能有很多错误,所以如果有人能帮我找到更有效/更正确的方法,我会非常感激。
另外,只是想知道,我怎么能这样做,所以一旦我输入数字,我就可以找到数字的均值,模式,中等和范围?
答案 0 :(得分:4)
您似乎对使用拆分所需的内容感到困惑。在前两行中,您正在解压缩列表,然后立即重建列表:
text
如果你用n a, b, c, d, e, f, g, h, i, j = input("enter numbers").split()
nlist=(a, b, c, d, e, f, g, h, i, j) # note you actually want [] not ()
替换你的nlist(因为你正在改变列表),那么你的有效案例将等同于以下内容
[]
您根本不需要打开包装。但请注意,nlist = input("enter numbers").split()
仍然是nlist
的序列,如果您想要str
列表,则可以选择几个选项。
int
其他问题包括:
1)您正在定义bubbleSort以获取零参数,但随后用一个参数调用它。 nlist是一个全球性的并不是很好。您最好将代码划分为几个函数
# 1) list comprehension
nlist = [int(i) for i in input("enter numbers").split()]
# 2) map
nlist = map(int, input("enter numbers").split())
2)你不能分配元组的元素。元组是由def bubbleSort(nlist):
...
def main():
nlist = # choose from the above options
bubbleSort(nlist)
print(nlist)
if __name__ == '__main__': # only run if module is being run directly
main()
包围的序列,与()
的原始代码中的序列一样。这不会起作用
nlist
使用列表,而不是使用>>> items = (1, 2, 3)
>>> items [0] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
[]
3)python中的多个赋值意味着你不必使用旧的交换习语。而不是像
这样的代码>>> items = [1, 2, 3]
>>> items [0] = 4 # fine
你可以写
temp = a
a = b
b = temp
这种技术可以清理你在代码中移动元素的代码
答案 1 :(得分:0)
首先,您希望将输入作为列表
input_list = map(int, input("enter up to 10 numbers").split())
然后你要对它进行排序:
input_list.sort()
或者如果您想保留原始订单的版本:
sorted_list = sorted(input_list)
然后你可以打印出来:
print(sorted_list)
如果要将用户限制为10输入,请使用循环输入:
continue_ = True
while continue_:
input_list = input("enter up too 10 numbers").split()
continue_ = len(input_list) >= 10
最终代码是:
continue_ = True
while continue_:
input_list = map(int, input("enter up too 10 numbers").split())
continue_ = len(input_list) >= 10
sorted_list = sorted(input_list)
print(sorted_list)
答案 2 :(得分:0)
如果那是你的目标,而这不是你正在做的练习,那么就这样做:
alist[i] += alist[i-1]
答案 3 :(得分:0)
其他答案有很好的解释。我只是在展示一种方式。你想通过这种方式实现的目标是什么:
print(sorted(map(int,input().split())))
简短说明:
input
获取以空格分隔的数字输入字符串split()
会将其拆分为数字字符串列表(仍为str
)map(int, ...)
会将这些字符串转换为int
(现在它们是数字)sorted
会对数字进行排序print
将打印以上是上述限制输入10个数字的精彩版本:
print('Enter 10 numbers. Press Enter after each number:')
print(sorted(int(f()) for f in [input]*10))