1

Тема: Не працює програма

Є програма:

import sys

list = ("One", "Two", "Three", "Four")
a = 1
for i in list:
    print(i, a)
    a += 1
index = input()
if index == "exit":
    sys.exit()
else:
    index -= 1
    print(list[index])
input("Enter...")

Спочатку запускається, показує:
"One
Two
Three
Four"

Далі щоб я не вводив - програма просто закривається.Допоможіть будь ласка.Гугл відповіді не дав.Перевірив на помилки, то здається все нормально, але чомусь же вона не працює... *WALL*

2

Re: Не працює програма

Потрібно зробити явне приведення індексу до цілого типу:

else:
    index=int(index)-1
    print(list[index])
py -3 -m pip install git+https://github.com/snoack/python-goto
∩⍴○⌈⍴⍺/∧\∨/⊢○ ⌿⍀⍴⌊
Подякували: Monolith1

3

Re: Не працює програма

Величезне Вам дякую! *BRAVO* 2 дні думаю вже над цією програмою...
Наскільки зрозумів функція int() переводить число до цілого типу, але навіщо це робити?Чому програма без неї не працювала?І коли її потрібно використовувати?

4

Re: Не працює програма

Наскільки зрозумів функція int() переводить число до цілого типу, але навіщо це робити?Чому програма без неї не працювала?І коли її потрібно використовувати?

У даному випадку, функція input() повертає введений рядок. Навіть якщо користувач вводить число (наприклад, 1), у змінну записується рядок '1', з яким можна працювати лише як з рядком (послідовністю символів). Якщо ми хочемо працювати з ним як із числом (робити якісь арифметичні дії, наприклад, чи використати як індекс масиву), його слід привести до відповідного типу.
Python любить явні приведення типу — це слід робити ще й тому, що одні й ті ж операції по-різному виконуються для різних типів:
'1'+'1'=='11'
1+1==2
1+'1' чи '1'+1 — помилка.

py -3 -m pip install git+https://github.com/snoack/python-goto
∩⍴○⌈⍴⍺/∧\∨/⊢○ ⌿⍀⍴⌊
Подякували: Monolith1

5 Востаннє редагувалося Monolith (25.04.2015 15:27:10)

Re: Не працює програма

Вирішив трохи скоротити код і знову помилка:

import sys

list = ("One", "Two", "Three", "Four")
a = 1
for i in list:
    print(i, a)
    a += 1
index = input()
while index != "exit":
    index = int(index) - 1
    print(list[index])
sys.exit()

Це я знов туплю? *DONT_KNOW*

6

Re: Не працює програма

Подивіться крок за кроком, що відбувається в циклі. Ви не вводите індекс повторно — лише кожного разу зменшуєте на одиничку й виводите елемент із ним. Коли індекс виходить за всі припустимі межі, стається помилка, й програма закривається.

py -3 -m pip install git+https://github.com/snoack/python-goto
∩⍴○⌈⍴⍺/∧\∨/⊢○ ⌿⍀⍴⌊
Подякували: Monolith1

7

Re: Не працює програма

Блін, зрозумів... *OK*

8 Востаннє редагувалося Monolith (25.04.2015 18:06:40)

Re: Не працює програма

Тоді тут же питання задам, щоб тему нову не робити.Пишу інтерпретатор для HQ9+(https://uk.wikipedia.org/wiki/HQ9+):

code = input("CODE: ")
count = 0
for k in code:
    if k == "h": print("Hello World!")
    elif k == "q": print(code)
    elif k == "9":
        for beer in range(99, 1, -1):
            print(beer, "bottles of beer on the wall,", beer, "bottles of beer.")
            print("Take one down and pass it around,", beer-1, "bottles of beer on the wall.\n")
        print("1 bottle of beer on the wall, 1 bottle of beer.")
        print("Take one down and pass it around, no more bottles of beer on the wall.\n")
        print("No more bottles of beer on the wall, no more bottles of beer.")
        print("Go to the store and buy some more, 99 bottles of beer on the wall.")
    elif k == "+": count += 1
    else: print("Syntax error")
input("Enter...")

Не працює.Брав приклад з Вікіпедії:

cnt = 0
source = input()
for c in source:
    if c == 'H':
        print('Hello world!')
    elif c == 'Q':
        print(source)
    elif c == '9':
        for beer in range(99, 1, -1):
            print(beer, 'bottles of beer on the wall,', beer, 'bottles of beer.')
            print('Take one down and pass it around,', beer-1, 'bottles of beer on the wall.')
            print()
        print('1 bottle of beer on the wall, 1 bottle of beer.')
        print('Take one down and pass it around, no more bottles of beer on the wall.')
        print()
        print('No more bottles of beer on the wall, no more bottles of beer.')
        print('Go to the store and buy some more, 99 bottles of beer on the wall.')
    elif c == '+':
        cnt += 1
    else:
        print('Syntax error')
input()

Цей працює.Я просто хочу зрозуміти як воно все працює і переписую, змінюю.
Наскільки зрозумів у моїй програмі вся проблема у коді

for beer in range(99, 1, -1):
            print(beer, "bottles of beer on the wall,", beer, "bottles of beer.")
            print("Take one down and pass it around,", beer-1, "bottles of beer on the wall.\n")
        print("1 bottle of beer on the wall, 1 bottle of beer.")
        print("Take one down and pass it around, no more bottles of beer on the wall.\n")
        print("No more bottles of beer on the wall, no more bottles of beer.")
        print("Go to the store and buy some more, 99 bottles of beer on the wall.")

Але що саме не так?

9

Re: Не працює програма

Тема вже більше загалом про Python для початквців виходить...Так що у кого є які питання можна задавати тут *DRINK*

10 Востаннє редагувалося P.Y. (25.04.2015 18:29:06)

Re: Не працює програма

Не працює.

Дивно, в мене запустилось, усе робить. Або це не той код, або Ви пропустили при копіюванні той рядок, що викликав проблеми, або самі вже виправили, або в редакторі якісь незрозумілі проблеми з автовиправленням пробілів і табуляцій. Ще проблеми могли б бути через несумісність Python 2 та 3, але тоді й приклад з вікіпедії не працював би.

А втім, бачу відмінність: Ваш інтерпритатор працює з малими літерами, вікіпедійний — з великими. Які з них Ви вводите при роботі програми?

py -3 -m pip install git+https://github.com/snoack/python-goto
∩⍴○⌈⍴⍺/∧\∨/⊢○ ⌿⍀⍴⌊

11 Востаннє редагувалося Monolith (25.04.2015 19:35:48)

Re: Не працює програма

Дивно.Перевірив - код повністю ідентичний.Пробема в тому, що програма взагалі не запускається.

12

Re: Не працює програма

А в чому Ви її запускаєте? Просто дабл-кліком на файлі з розширенням .py?

py -3 -m pip install git+https://github.com/snoack/python-goto
∩⍴○⌈⍴⍺/∧\∨/⊢○ ⌿⍀⍴⌊

13 Востаннє редагувалося Monolith (25.04.2015 19:36:21)

Re: Не працює програма

Так :o А як треба?

14

Re: Не працює програма

Можна, наприклад, у командному рядку — щоб бачити результат помилки. Запускаєте cmd.exe, в ньому вводите повний шлях програми.

py -3 -m pip install git+https://github.com/snoack/python-goto
∩⍴○⌈⍴⍺/∧\∨/⊢○ ⌿⍀⍴⌊

15

Re: Не працює програма

python cod.py

можна так

- Поганому трояну фаєрвол заважає
- Ніколи не програмуйте та не пийте пиво
Якщо ви з першого разу написали програму, в якій немає жодної помилки, повідомте про це системного програмісту: він виправить помилки в компіляторі
Подякували: Monolith1

16

Re: Не працює програма

Блін запара на зіпарі.А як командним рядком користуватись? *DONT_KNOW*
Що це таке я знаю, але як запускати в ньому програми?
От наприклад я ввів: "c:\python34 hq9+.py" або й "c:\python34\hq9+.py" - видає помилку.
Чому взагалі не можна просто запускати програми дабл-кліком?

Так і пробачте, що довблю і добвлю, просто я ще новачок... *HI*

17 Востаннє редагувалося Monolith (25.04.2015 20:10:20)

Re: Не працює програма

Щоб я скис.Вийшло! *DANCE* То я мабуть неправильно адресу писав...
Написало, ща на 12 рядку помилка.Загалом пішов шукати.

18 Востаннє редагувалося Monolith (25.04.2015 20:15:07)

Re: Не працює програма

Помилка unindent does not match any outer indentation level.І тепер зрозумій в чому проблема...Хтось в курсі? :)

19

Re: Не працює програма

P.Y. написав:

Можна, наприклад, у командному рядку — щоб бачити результат помилки. Запускаєте cmd.exe, в ньому вводите повний шлях програми.

Зазвичай так і запускають скріпти (perl, php cli і т.д.)

Або запускати дабл кліком, але в кінець коду вставляти команду вида getchar(); Тобто команду, яка очікує ввід символа з клавіатури (не знаю як в python, але в c/perl це працює).

20 Востаннє редагувалося Monolith (25.04.2015 20:27:23)

Re: Не працює програма

Ноги мені в рот!(ой, це я в голос :) )
Загалом, виправив:

print(beer, 'bottles of beer on the wall,', beer, "bottles of beer.")

а було:

print(beer, "bottles of beer on the wall,", beer, "bottles of beer.")

Тобто кавички поміняв з "" на ''.
Тепер питання: а чому так?Чим воно заважало? *PARDON*

Написано через 5 хвилин: Даремно радів.Це я тупонув(не той файл запускав).Помилка залишилась...