LINUX.ORG.RU

Помогите со скриптом

 ,


0

1

Решил я учить Python. Написал такой скрипт:

a=int(input())
b=int(input())
if a or b < 1:
    lambda a,b: a * b (lambda a, b: a + b (lambda a, b: a - b
else:
    lambda a, b: a * b (lambda a, b: a + b (lambda a, b: a - b (lambda a, b: a / b
Результат удивил:
File "123.py", line 5
    else:
       ^
SyntaxError: invalid syntax
Что исправить?

А это ничего, что у вас одни открывающие скобки, и ни одной закрывающей? Я не знаю Питона, но мне это кажется подозрительным.

Deleted
()
Ответ на: комментарий от Deleted

Без скобок:

File "test.py", line 4
    lambda a,b: a * b lambda a, b: a + b lambda a, b: a - b
                           ^
SyntaxError: invalid syntax
Закрываем скобки:
 File "test.py", line 4
    lambda a,b: a * b lambda a, b: a + b lambda a, b: a - b
                           ^
SyntaxError: invalid syntax
Значит со скобками всё нормально.

PanZagloba
() автор топика

) ) ) ) )

// это не смайлы, это я тебе скобочки принёс

shrub ★★★★★
()
Последнее исправление: shrub (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Извиняюсь, перепутал кое-что. Надо было так:

a=int(input())
b=int(input())
if a or b < 1:
    lambda a,b: a * b (lambda a, b: a + b) (lambda a, b: a - b)
else:
    lambda a, b: a * b (lambda a, b: a + b) (lambda a, b: a - b) (lambda a, b: a / b)

PanZagloba
() автор топика
Ответ на: комментарий от PanZagloba

Что делает это всё??? Что будет вызывать это lambda a,b: a * b и куда будет попадать результат? А то что справа - оно уже как и куда пойдет?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Никак и никуда. Они не вызываются. Просто объявляются. Их нужно присвоить какой-нибудь переменной, чтобы потом обратиться как f(…), но сей странный код бессмыслен.

evilface ★★
()
Ответ на: комментарий от PanZagloba

Python - не expression-oriented язык. Я к тому, что твой код как бы ничего не делает.

theNamelessOne ★★★★★
()
Ответ на: комментарий от PanZagloba

если кому-то интересно, что делает этот код:

if (a != 0) or (b < 1):
    # объявление лямбды без её вызова. можно было вообще ничего не писать, эффект был бы тем же
else:
    # тоже самое

причём, в первом случае вызывается b(), который на самом деле экземпляр int или просто число и совсем не callable, с аргументом типа «функция», результат этого «вызова» снова вызывается также с аргументом типа «функция». во втором случае всё печальнее ещё на один уровень вызова из ничего в никуда.

да ведь, PanZagloba?

anonymous
()
Ответ на: комментарий от theNamelessOne

Да, но Питона я всё равно не знаю))

Deleted
()
Ответ на: комментарий от gadzira

Хитрости нет, a or b < 1 оозначает (a) or (b < 1). Для первого условия будет вызван метод __nonzero__() во втором питоне, или __bool__() в третьем, в любом случае этот метод вернёт истину, если в a записан не ноль.

А ТС, скорее всего, хотел написать if a < 1 or b < 1:.

grazor ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.