卡在列表中

时间:2018-07-06 22:46:41

标签: python

所以一段时间以来,我一直在尝试完成本练习。想法是将数字输入存储在列表中,直到输入单词“完成”为止。然后打印整数的最小值和最大值。而且,无论我尝试了多少解决方案,我似乎都无法正常运行,并且提出了一些我想获得答案的愚蠢问题。因此,我猜这是我的最佳尝试:

 while True:
  mylist=[]
  mylist=[mylist.append(input('Please enter a number'))]
  if 'done' in mylist:
    print(min(mylist[:len(mylist)-4]))
    print(max(mylist[:len(mylist)-4]))
    break

毫不奇怪,它不起作用,我也不知道为什么,而且我已经用尽了所有的想法来使它起作用。但是我有一个愚蠢的问题。如果我像在这里一样在循环中声明列表,那么在第二次循环时,声明是否会使它再次为空?如果是这样,那么当Python不想让我使用全局变量时,如何声明列表并在循环中使用它?同样,我可能在这里错误地使用了“ break”,但这并不重要,因为代码没有走那么远,它只是在读取输入。

2 个答案:

答案 0 :(得分:2)

  

如果我像在这里一样在循环中声明列表,那么在第二次循环时,声明是否会使它再次为空?

是的。行mylist=[]创建一个新的空列表,并在每次执行时使mylist成为该新空列表的名称(忘记它以前的名称)。

  

如果有,那么我如何声明列表并在循环中使用它……

只需在循环外进行即可:

mylist=[]
while True:
  

…当Python不想让我使用全局变量时?

区别是在函数体内定义的局部变量和在任何函数体内定义的全局变量之间。由于您根本没有编写任何函数定义,因此所有变量都是全局变量。

而且,如果将所有这些都移到函数内部,则无论它们是否在循环内,所有变量都将是局部变量。


无论如何,由于许多其他问题,这仍然无法修复您的代码:

  • mylist.append(…)就地修改列表,然后返回None
  • mylist=[mylist.append(…)]丢弃现有列表,并将其替换为无用列表[None]
  • mylist是(应该是)字符串列表,而不是字符串,因此mylist[:len(mylist)-4]不会丢弃最后的4个字符的字符串,而是会丢弃最后4个字符串,无论如何他们是。
  • 字符串列表上的
  • min会将它们作为字典顺序的字符串而不是数字进行比较。如果要将它们与数字进行比较,则必须将它们转换为数字。但是您可以使用key=float即时执行此操作。 (有关更多信息,请参见Sorting HOWTO。)

我们正在努力,您可以简化一些事情:

  • x[:len(x)-4]x[:-4]的作用相同。
  • 但是,与其将新字符串添加到列表中,然后检查'done'是否在列表中的任何位置,然后遍历整个列表(除了done之外),不如只检查新字符串?

因此,这是一些可以满足您需求的代码:

mylist = []
while True:
    number = input('Please enter a number')
    if number == 'done':
        print(min(mylist, key=float))
        print(max(mylist, key=float))
        break
    else:
        mylist.append(number)

答案 1 :(得分:2)

  

将数字输入存储在列表中,直到输入单词“完成”为止。

1)在循环之前创建一个空列表。否则,您将在每次迭代时清除列表。
2)当看到“完成”时停止循环(使用break)。除非您有其他输入,否则请勿追加到列表中。在try-except周围添加int(x)

numbers = []
while True:
    x = input("Enter a number: ")
    if x == "done":
        break
    numbers.append(int(x))
  

然后显示整数的最小和最大值

外部(在break之前),您可以打印值。您不需要任何列表切片即可检查最小值和最大值

print("Min", min(numbers))
print("Max", max(numbers))