Не работает код на Python

import os
import random

class game:    
    def ask():
        while True:
            global ask
            print('Камень Ножницы Бумага')
            print('[1] Камень')
            print('[2] Ножницы')
            print('[3] Бумага')
            ask = str(input('>> '))
    def ai():
        list = ['1', '2', '3']
        random.random(list)
    def logic():
        if random == '1' and ask == '1':
            def xx()
        if random == '1' and ask == '2':
            def lose()
        if random == '1' and ask == '3':
            def winner()
        if random == '2' and ask == '1':
            def winner()
        if random == '2' and ask == '2':
            def xx()
        if random == '2' and ask == '3':
            def lose()
        if random == '3' and ask == '1':
            def lose()
        if random == '3' and ask == '2':
            def winner()
        if random == '3' and ask == '3':
            def xx()
    def winner():
        print('Ты выиграл!!!!')
        print(\n)
        print('Повторим?')
        print('[1] Да')
        print('[2] Нет')
        ask = str(input('>> '))
        if ask == '1':
            def ask()
        if ask == '2':
            os.exit()
    def lose():
        print('Ты проиграл :(')
        print(\n)
        print('Повторим?')
        print('[1] Да')
        print('[2] Нет')
        ask = str(input('>> '))
        if ask == '1':
            def ask()
        if ask == '2':
            os.exit()
    def xx():
        print('Ничья -_-')
        print('Переигрываем...')
        def logic()


game.ask()

ошибка:

Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
    start(fakepyfile,mainpyfile)
  File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
    exec(open(mainpyfile).read(), main.__dict__)
  File "<string>", line 18
    def xx()
            ^
SyntaxError: invalid syntax

Ответы (2 шт):

Автор решения: Vitaliy Zlobin
import sys
import random

while True:
    print('Камень Ножницы Бумага\n', '[0] Выход\n', '[1] Камень\n', '[2] Ножницы\n', '[3] Бумага\n')

    ask = int(input('Ответ: '))
    rand = random.randint(1, 3)

    if ask == 0:
        sys.exit()
    elif rand == ask:
        print('Ничья -_-', 'Переигрываем...\n')
    elif (rand, ask) in [(1, 3), (2, 1), (3, 2)]:
        print('Ты выиграл!!!!\n')
    elif (rand, ask) in [(1, 2), (2, 3), (3, 1)]:
        print('Ты проиграл :(\n')
    else:
        print('Ответ должен быть от 1 до 3\n')
→ Ссылка
Автор решения: MarianD

Во-первых, не нужно использовать класс:

  1. Удалите из начала вашей программы строку class game:,
  2. удалите отступы связанные с этим определением в последовательных строках,
  3. в последней строке вместо game.ask() используйте только ask().

Главная ошибка, что вы путаете

  • определение функции (например def lose():)
  • с ее применением (вызовом, напр. lose(), т.е. без ключевого слова def в начале и без двоеточия в конце).

Функция определяется (обычно) только один раз и в Питоне нужно ее определить перед ее первым вызовом (применением).

Значит:

  1. все 3 определения функций в конце программы переместите в начало,

  2. дальше эти функции уже только вызывайте, т.е. в виде winner(), lose() и xx() (без def и двоеточия).

  3. тоже другие функции (определенные в начале программы) вызывайте без def и двоеточия.


Дальше:

  1. Имя ask вы используете как имя функции, так и как имя переменной для хранения пользователем введенной строки. Ожидайте последствие в виде чудесных ошибок, или примените разные имена.

  2. То же самое для имени random - import random в начале программы определяет random как имя модуля, и вы, наверно, хотели (но не сделали, см. пункт 4 ниже) использовать его для хранения случайного числа.

  3. Не надо применить функцию str() в командах ask = str(input('>> ')), т.к. функция input() всегда возвращает строку (т.е. тип str). Достаточно ask = input('>> ').

  4. Функцию ai() вы определили, но никогда не применили. Вы, наверно, хотели применить ее после того, что пользователь выбрал 1, 2 или 3.

→ Ссылка