Что происходит?Python пропускает строки в функции - PullRequest
0 голосов
/ 02 сентября 2011

Когда я запускаю следующую программу на Python, функция принимает переменные, но полностью пропускает остальные и повторно показывает главное меню программы, ничего не делая. Кроме того, он пропускает квалифицирующие операторы «if» и запрашивает все переменные, даже если выбран первый или второй параметры (которым не нужна третья переменная). Кстати, это не должно быть ошибкой отступа, я просто отступил, чтобы показать, что это был код в stackoverflow.

РЕДАКТИРОВАТЬ: NEVERMIND. Я получил это на работу. Все переменные в скобках функции должны быть одинаковыми. ДУХ! чмокает лоб

option = 1
while option !=0:
    print "\n\n\n************MENU************"
    print "1. Counting"
    print "2. Fibbonacci Sequence"
    print "0. GET ME OUTTA HERE!"
    print "*" * 28
    option = input("Please make a selection: ") #counting submenu
    if option == 1:

        print "\n\n*******Counting Submenu*******"
        print "1. Count up by one"
        print "2. Count down by one"
        print "3. Count up by different number"
        print "4. Count down by different number"
        print "*" * 28
        countingSubmenu = input("Please make a selection: ")
        x=0
        y=0
        z=0
        q=0
        def counting (x, y, z, countingSubmenu, q):
            x = input("Please choose your starting number: ")
            y = input("Please choose your ending number: ")
            if countingSubmenu == 1:
                for q in range (x, y+1, 1):
                    print q
            elif countingSubmenu == 2:
                for q in range (x, y, -1):
                    print q
            elif countingSubmenu == 3:
                z = input("Please choose an increment: ")
                for q in range (x, y+1, z):
                    print q
            else:
                z = input("Please choose an increment: ")
                for q in range (x, y, -z):
                    print q
            return x, y, z, q
        if countingSubmenu == 1:
            counting(countingSubmenu, x, y, z, q)
        if countingSubmenu == 2:
            counting(countingSubmenu, x, y, z, q)
        if countingSubmenu == 3:
            counting(countingSubmenu, x, y, z, q)
        if countingSubmenu == 4:
            counting(countingSubmenu, x, y, z, q)

Ответы [ 4 ]

5 голосов
/ 02 сентября 2011

Ваша функция определена как counting (x, y, z, countingSubmenu, q), но когда вы ее вызываете, список аргументов равен counting(countingSubmenu, x, y, z, q).

3 голосов
/ 02 сентября 2011

Вы не упомянули, какую версию Python вы используете, но я подозреваю, что это из серии 3.x. Python 3 изменил поведение input () в соответствии с тем, что ранее было raw_input () в серии 2.x.

Итак, input () теперь всегда возвращает строку. Поэтому вам нужно либо вызвать int () или eval () для результата (лично я предлагаю int ()).

3 голосов
/ 02 сентября 2011

Кажется, что он работает в python 2.7 (см. Ответ Криса Филлипса)

В любом случае, вы можете сделать несколько улучшений

  • убрать функцию counting из цикла
  • вам не нужно вызывать counting четыре раза, вместо этого просто вызовите counting(countingSubmenu, x, y, z, q)
  • counting функция принимает параметр в другом порядке, и вы передаете его в неправильном порядке
  • youне нужно передавать x, y, z, как вы просите от пользователя
1 голос
/ 02 сентября 2011

Ваша проблема в том, что вы передаете аргументы counting() в неправильном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...