python代码没有返回else语句?

时间:2014-06-19 01:31:17

标签: python python-3.x

我的作业要求我制作一个程序来确定列表中的第一个数字(用户输入,用于演示[4,3,2,5,4] [4,3,2,5,1] )也存在于列表的其余部分。到目前为止,我得到了我的代码打印"是"如果存在重复的数字,但是当没有重复的数字时,它会打印一个空白行。 以下是我到目前为止的情况:

def main():
    numbers = eval(input("enter a list of numbers enclosed in brackets: "))
    item = numbers
    head = item[0]
    list = item[1:]
    yes = False
    count = 0
    for i in range(0,len(list),1):
        if list[i] == head:
            if (item[i] == head):
                count +=1
            yes = True
            if yes == True:
                print("yes")
        else:
            print("no")

main()

3 个答案:

答案 0 :(得分:0)

是的很容易。如果您正在查看索引i并找到该项目,则可以立即打印"是"。

不难。您无法简单地添加else来打印" no"。要声明搜索失败,您需要知道每个索引都不匹配。你不能只查看一个索引,然后打印" no"。这太快了。

要解决这个问题,在循环内部,您需要跟踪您是否找到了该项目。当循环完成后,您可以检查是否在任何地方找到了该项目。如果你这样做,打印"是"。如果没有,请打印"否"。检查必须在循环之后而不是在循环之内。

答案 1 :(得分:0)

你可以采取一些措施使你的程序变得更冷/ pythonic /可读。

for element in list:

为每个调用for循环,它可以解释为:对于列表中的每个元素,执行(您的程序)。第一次迭代它将是第一个元素,第二个迭代,它将是第二个项目,等等。当前迭代的元素可以被称为变量'element'。

然后您可以将if语句更改为:

if element == head:

我不确定为什么你要将'head'与两个不同的数字列表进行比较,因为你可能只想比较你的变量'list'。

因此,如果一个元素确实等于head,那么该列表确实包含第一个元素/ head,所以yes将等于True。如果在遍历整个列表后没有一个元素等于head,那么,yes将保持初始化值False。那么在循环之外你可以检查变量'yes'的值,它可以打印'yes'或'no'取决于。

另外,为了更清楚,我会将'yes'变量名称更改为更有意义的名称,例如'is_head_in_list'

答案 2 :(得分:0)

以下代码怎么样:

def main():
    head = eval(input("enter a first list of numbers enclosed in brackets: "))
    tail = eval(input("enter a second list of numbers enclosed in brackets: "))

    intersect = set(head) & set(tail)

    print('Yes' if intersect else 'No')

和demo的结果:

>>> 
>>> main()
enter a first list of numbers enclosed in brackets: [4, 3, 2, 5, 4]
enter a second list of numbers enclosed in brackets: [4, 3, 2, 5, 1]
Yes
>>> main()
enter a first list of numbers enclosed in brackets: [1, 2, 3, 4, 5]
enter a second list of numbers enclosed in brackets: [6, 7, 8]
No
>>>

这里是一个新代码,如果只能是一行输入:

def main():
    numbers = input("enter a list of numbers enclosed in brackets: ")
    posi = numbers.find(']')
    head = eval(numbers[:posi + 1])
    tail = eval(numbers[posi + 1:])

    #head = eval(input("enter a first list of numbers enclosed in brackets: "))
    #tail = eval(input("enter a second list of numbers enclosed in brackets: "))

    intersect = set(head) & set(tail)

    print('Yes' if intersect else 'No')

和演示:

>>> 
>>> main()
enter a list of numbers enclosed in brackets: [4,3,2,5,4][4,3,2,5,1]
Yes
>>> main()
enter a list of numbers enclosed in brackets: [1,2,3][4,5,6,7]
No
>>> 

希望,新代码可以帮助你。