почему main () и если __name __ == '__ main__': main () вызывает проблемы? - PullRequest
0 голосов
/ 24 сентября 2018
def removal(DataList, n):
    if len(DataList) < 2*n:
        print "Not enough elements!"
    for i in range(n):
        DataList.remove(min(DataList))
        DataList.remove(max(DataList))
    return sorted(DataList)

def main():
    inputs = []
    while True:
        inp = raw_input("Please enter a new integer, press ENTER if you want to stop: ")
        if inp == "":
            break
        else:
            inputs.append(inp)
    removal(inputs,2)
if __name__=='__main__':
    main()
main()

Я получил ValueError: min() arg is an empty sequence В то же время, если я не пишу свой код в main () и если name == ' main ', явсе будет в порядке со следующим кодом.

def removal(DataList, n):
    #return to a sorted list with n smallest and n largest numbers removed. 
    for i in range(n):
        DataList.remove(min(DataList))
        DataList.remove(max(DataList))
    return sorted(DataList)
inputs = []
while True:
    inp = raw_input("Please enter a new integer, press ENTER if you want to stop: ")
    if inp == "":
        break
    else:
        inputs.append(inp)
removal(inputs,2)

Может кто-нибудь объяснить, почему он не работает в прежнем и как я должен заставить его работать?

1 Ответ

0 голосов
/ 24 сентября 2018

С:

if __name__=='__main__':
    main()
main()

Вы вызываете функцию main дважды (когда ваша программа запускается в качестве основной программы), поэтому после ввода серии чисел и нажатия другого Enter для завершениявход main вызывает removal для выполнения намеченных операций, которые не производят никакого вывода, и возвращается в основную программу, чтобы начать другой вызов main, который запрашивает другую серию ввода чисел.Если в этот момент вы просто нажмете другую клавишу Enter, вы получите пустой список для списка inputs, который ваша функция removal не обрабатывает должным образом и вызовет min с пустым списком, вызывая указанное исключениеValueError: min() arg is an empty sequence.

...