所以我一直试图这样做一段时间,并且经常遇到不同的失败。我需要从用户那里获取数字输入并将其放入列表中并以递减值输出:
bids = []
bid = input('Bid: ')
while bid != '':
bids.append(bid)
bid = input('Bid: ')
print('The auction has finished! The bids were:')
for bid in bids:
bid = int(bid)
for bid in reversed(bids):
print(bid)
所以这在大多数时候运作良好,(我一直使用数字2,3,4和10作为输入,因为我一直有问题,它显示第一个数字的降序数字)但是当我键入16,30,24,它显示数字为:
The auction has finished! The bids were:
24
30
16
这是我尝试过的另一个版本:
bids = []
bid = input('Bid: ')
while bid != '':
bids.append(bid)
bid = input('Bid: ')
print('The auction has finished! The bids were:')
for bid in bids:
bid = int(bid)
bids.sort([::-1]) #Here is where the problem is at, I don't know
#what the correct syntax is for something like that
for bid in bids:
print(bid)
任何帮助都会非常感激,因为我对python很新,并且正在努力学习我的课程。
-Callum
答案 0 :(得分:8)
在你的
中bids.append(bid)
你得到一个字符串列表。您希望将它们转换为整数并按降序排序:
numerical_bids = [int(bid) for bid in bids]
numerical_bids.sort(reverse=True)
现在numerical_bids
是按降序排列的整数列表。
在您的代码中:
for bid in bids:
bid = int(bid)
什么都不做。它会将每个bid
转换为整数,并立即将其忘记。
和
bids.sort([::-1])
不是如何使用sort
方法。阅读list.sort的文档。
答案 1 :(得分:3)
你的问题基本上就在这个循环中:
for bid in bids:
bid = int(bid)
以上内容不会改变bids
的内容。它会创建新的整数实例,每次都名为bid
,您无法执行任何操作。因此,当您稍后进行排序bids
时,您只是对原始字符串元素进行排序,而不是所需的整数。
如果要对整数值进行排序,您可以选择几个。一种是将值转换为整数:
bids.append(int(bid))
一种是在打印循环中进行转换和排序:
for bid in sorted((int(x) for x in bids), reverse=True):
print(bid)
由于您似乎想要采用的方法是用整数元素替换bids
的字符串元素,您可能想要做一些类似于原始循环的方法,但不要丢弃结果:
intbids = []
for bid in bids:
intbids.append(int(bid))
很多人都会告诉你,上面的内容更加简明扼要地写成
intbids = [int(bid) for bid in bids]
我使用intbids
作为单独的列表来明确发生了什么。如果您想在整数出价列表中丢弃字符串出价列表,则可以使用相同的名称:
bids = [int(bid) for bid in bids]
如果真的,非常重要的是更换每个元素"到位" (意思是不要创建新的列表),那么最简单易懂的方法可能是循环索引:
for i in range(len(bids):
bids[i] = int(bids[i])
(但是在你非常有经验并处理大量数据之前,我的强烈建议是不要担心"就地更新列表。它不是那么自然写Python的方法。)
答案 2 :(得分:2)
这将以数字字符串的形式对您的出价列表进行排序,反向按数字顺序排列:
bids.sort(key=int, reverse=True)
如果你需要垂直打印:
print('\n'.join(bids))
答案 3 :(得分:1)
好的,让我解释一下: 你没有对输入进行排序!
在第二种情况下,您的列表为[16,30,24]
,并且您以相反的顺序24, 30, 16
打印,这是正确的。
我看到两个问题:
- 您没有对打印值进行排序
- 你没有检查新的出价是否高于前一个出价(那是什么样的出价?)
对于第一部分,假设列表已包含int
,您只需对其进行排序:
bids.sort()
或者,如果您想按相反的顺序进行操作:
bids.sort(reverse=True)
对于第二部分,只需检查新输入是否更大,然后再将其添加到列表中:
while bid != '':
if bids and bid < bids[-1]:
print "Error: your bid must be higher than last bid. Last bid: {}".format(bids[-1])
else:
bids.append(bid)
bid = input('Bid: ')