使用空列表
Working with empty lists
好的,所以我正在尝试创建一个空列表,然后将整数添加到列表中,然后挑选出最高、最低和中间的 5 个数字(使用切片按降序排列)并将它们显示出来...看起来很简单....
def main():
nums = []
for i in range(20,80,9):
nums.append(i)
print(*nums,sep=' ')
print('The highest number is',max(nums))
print('The lowest number is',min(nums))
print('The middle 5 sorted high to low:')
nums.sort()
nums.reverse()
print (*nums[1:6])
main()
好的,所以我根据您的建议对其进行了编辑,并且该程序运行良好......我只是无法绕过该死的 while 循环......任何人都可以看到我如何整合它吗?
while nums.append(i):
。 list.append returns None,并且 None 不计算为真。所以你的打印语句将永远不会被执行。
nums.reverse[2:6]
reverse 是一种方法,可以原地反转列表。它没有 return 任何东西。所以这部分会抛出一个TypeError
。你想改为调用 nums.reverse()
- 反向方法不排序。你需要
nums.sort()
nums[2:6]
将为您提供从索引 2 到 6(不包括)的元素。所以这只会给你 4 个元素。此外,您的列表有 9 个元素(如果排除最小值和最大值则为 7 个)。中间 5 个元素不会在索引 2 和 6 之间。
Python 有一个 help()
函数,如果你需要知道什么 functions/methods return.
就用它
这是一种方法:
nums = []
for i in range(20,80,7):
nums.append(i)
mx = max(nums)
mn = min(nums)
nums.remove(mx)
nums.remove(mn)
mx2 = max(nums)
mn2 = min(nums)
nums.remove(mx2)
nums.remove(mn2)
nums.sort()
nums.reverse()
print nums
输出的是中间5个数字降序排列:
[62, 55, 48, 41, 34]
更好、更短的方法是:
def main():
nums = []
for i in range(20,80,7):
nums.append(i)
mx = max(nums)
mn = min(nums)
print "The highest number is %s " % mx
print "The lowest number is %s " % mn
while len(nums) != 5:
nums.remove(max(nums))
nums.remove(min(nums))
nums.sort()
nums.reverse()
print "The middle 5 sorted high to low is %s:" % nums
main()
输出为:
The highest number is 76
The lowest number is 20
The middle 5 sorted high to low is [62, 55, 48, 41, 34]
您可以重构代码以像这样使用 while 循环。
def main():
nums = []
i = 20
while i < 80:
nums.append(i)
print(*nums,sep=' ')
i += 9
print('The highest number is',max(nums))
print('The lowest number is',min(nums))
print('The middle 5 sorted high to low:')
# removed on the basis that they are already sorted
#nums.sort()
nums.reverse()
print (*nums[1:6])
main()
使用 range
会更好,因为您不需要在循环范围之外使用 i
变量。
好的,所以我正在尝试创建一个空列表,然后将整数添加到列表中,然后挑选出最高、最低和中间的 5 个数字(使用切片按降序排列)并将它们显示出来...看起来很简单....
def main():
nums = []
for i in range(20,80,9):
nums.append(i)
print(*nums,sep=' ')
print('The highest number is',max(nums))
print('The lowest number is',min(nums))
print('The middle 5 sorted high to low:')
nums.sort()
nums.reverse()
print (*nums[1:6])
main()
好的,所以我根据您的建议对其进行了编辑,并且该程序运行良好......我只是无法绕过该死的 while 循环......任何人都可以看到我如何整合它吗?
while nums.append(i):
。 list.append returns None,并且 None 不计算为真。所以你的打印语句将永远不会被执行。nums.reverse[2:6]
reverse 是一种方法,可以原地反转列表。它没有 return 任何东西。所以这部分会抛出一个TypeError
。你想改为调用nums.reverse()
- 反向方法不排序。你需要
nums.sort()
nums[2:6]
将为您提供从索引 2 到 6(不包括)的元素。所以这只会给你 4 个元素。此外,您的列表有 9 个元素(如果排除最小值和最大值则为 7 个)。中间 5 个元素不会在索引 2 和 6 之间。
Python 有一个 help()
函数,如果你需要知道什么 functions/methods return.
这是一种方法:
nums = []
for i in range(20,80,7):
nums.append(i)
mx = max(nums)
mn = min(nums)
nums.remove(mx)
nums.remove(mn)
mx2 = max(nums)
mn2 = min(nums)
nums.remove(mx2)
nums.remove(mn2)
nums.sort()
nums.reverse()
print nums
输出的是中间5个数字降序排列:
[62, 55, 48, 41, 34]
更好、更短的方法是:
def main():
nums = []
for i in range(20,80,7):
nums.append(i)
mx = max(nums)
mn = min(nums)
print "The highest number is %s " % mx
print "The lowest number is %s " % mn
while len(nums) != 5:
nums.remove(max(nums))
nums.remove(min(nums))
nums.sort()
nums.reverse()
print "The middle 5 sorted high to low is %s:" % nums
main()
输出为:
The highest number is 76
The lowest number is 20
The middle 5 sorted high to low is [62, 55, 48, 41, 34]
您可以重构代码以像这样使用 while 循环。
def main():
nums = []
i = 20
while i < 80:
nums.append(i)
print(*nums,sep=' ')
i += 9
print('The highest number is',max(nums))
print('The lowest number is',min(nums))
print('The middle 5 sorted high to low:')
# removed on the basis that they are already sorted
#nums.sort()
nums.reverse()
print (*nums[1:6])
main()
使用 range
会更好,因为您不需要在循环范围之外使用 i
变量。