【问题标题】:For-loop that loops through a list of input integers gets stuck on the first conditional遍历输入整数列表的 for 循环卡在第一个条件上
【发布时间】:2021-10-25 05:36:15
【问题描述】:

一个读取整数列表并确定它是升序还是降序或乱序的简单程序,仅输出第一个打印语句的次数作为列表元素的数量,并继续执行剩下的条件。

任何帮助理解我哪里出错了,我们将不胜感激。

int_num = input("Enter how many integers you have?: ")
int1 = input("Enter 1st integer: ")
int2 = input("Enter 2nd integer: ")
int3 = input("Enter 3rd integer: ")
int4 = input("Enter 4th integer: ")
int5 = input("Enter 5th integer: ")
int6 = input("Enter 6th integer: ")
n_seq = [int1, int2, int3, int4, int5, int6]

for int in n_seq:
    if [0] < [1] < [2] < [3] < [4] < [5]:
        print("Your sequence is sorted in ascending order.")
    elif [0] > [1] > [2] > [3] > [4] > [5]:
        print("Your sequence is sorted in descending order.")
    else:
        print("Your sequence is out of order.")

上面的程序输出如下:

Your sequence is sorted in ascending order.
Your sequence is sorted in ascending order.
Your sequence is sorted in ascending order.
Your sequence is sorted in ascending order.
Your sequence is sorted in ascending order.
Your sequence is sorted in ascending order.

【问题讨论】:

  • 提供更多关于哪些输入导致这些输出的信息。并且不要使用 int 这个词作为你的迭代器变量,int 在 python 中是一个类型和一个函数。在 for int in n_seq: 行中使用 int 以外的其他内容。
  • 你明白为什么吗?因为 1 for循环并执行if n_seq[0] &lt; n_seq[1] &lt; n_seq[2]...
  • sorted(n_seq) == n_seq
  • 谢谢大家的建议。 @TimRoberts 消除了 for 循环,并且对于 if 语句,在括号中的元素之前添加列表名称使其工作。谢谢。

标签: python list sorting integer conditional-statements


【解决方案1】:

您不需要循环。你可以这样做:

if int1 < int2 < int3 < int4 < int5 < int6:
    print("Your sequence is sorted in ascending order.")
elif int1 > int2 > int3 > int4 > int5 > int6:
    print("Your sequence is sorted in descending order.")

另外,所有inputs 需要在比较之前转换为整数:

int1 = int(input("Enter 1st integer: "))
....
int5 = int(input("Enter 5th integer: "))
int6 = int(input("Enter 6th integer: "))

当您使用循环时,您将遍历元素并检查[0] 是否大于[1] .....直到[6],反之亦然。当然,那已经是升序了,然后打印出来是升序的。

【讨论】:

  • 感谢您的详细说明,这有助于我理解问题。我尝试在给定的输入上使用 int 函数,但由于某种原因,它一直给我一个回溯错误,说 str 元素不能被调用。正如您所说,我确实通过消除 for 循环最终解决了这个问题,并在条件语句的上下文中使用了带有括号中的元素的列表名称,就像上面线程中指出的 Tim Roberts 一样。像这样:如果 n_seq[0]
  • @Psibrian_Mushky 这是python2还是python3?函数 input 在 python2 和 python3 中的行为不同。
【解决方案2】:

您的代码没有使用int_num,并且似乎只适用于正好六个数字。您可以使用循环来使行为适应不同的可能数量:

n = int(input("How many integers: "))

l = []
for i in range(n):
  l.append(int(input("Enter next integer: ")))

is_sorted = True
for i in range(n-1):
  if not l[i] <= l[i+1]:
    is_sorted = False

if is_sorted:
  print("Your sequence is sorted in increasing order.")
else:
  print("Your sequence is NOT sorted in increasing order.")

或者,更pythonic,使用内置函数all

n = int(input("How many integers: "))

l = []
for i in range(n):
  l.append(int(input("Enter next integer: ")))

is_sorted = all(l[i] <= l[i+1] for i in range(n-1))

if is_sorted:
  print("Your sequence is sorted in increasing order.")
else:
  print("Your sequence is NOT sorted in increasing order.")

或者,更pythonic,使用内置函数allzip

n = int(input("How many integers: "))

l = []
for i in range(n):
  l.append(int(input("Enter next integer: ")))

is_sorted = all(a <= b for a, b in zip(l, l[1:]))

if is_sorted:
  print("Your sequence is sorted in increasing order.")
else:
  print("Your sequence is NOT sorted in increasing order.")

关于内置函数 allzip 的文档:

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多