преобразовать цикл с внутренним состоянием из Python для перехода на язык - PullRequest
0 голосов
/ 17 декабря 2018

я конвертирую некоторый код из python в go

здесь я хочу написать равный код в go lang:

python:

while g_day_no >= g_days_in_month[i] + (i == 1 and leap):
    g_day_no -= g_days_in_month[i] + (i == 1 and leap)
    i+=1

моя попытка:

leap := int32(1)
var i = int32(0)
for g_day_no >= (g_days_in_month[i] + (i == 1 && leap)){
    g_day_no -= g_days_in_month[i] + (i == 1 && leap)
    i+=1
}

, но у меня есть ошибка в ide, которая говорит:

Недопустимая операция: i == 1 && leap (несовпадающие типы bool и int32)

дляэтот раздел (i == 1 && leap)

как я могу исправить эту часть моего кода?

1 Ответ

0 голосов
/ 17 декабря 2018

Go более строг в отношении условий.Требуется логическое значение.leap является целым числом, поэтому просто проверьте значение:

g_day_no >= (g_days_in_month[i] || (i == 1 && leap!=0))

Более подробный ответ

Booleans (True и False) в Python соответствуют следующим целочисленным значениям:

True=>1 False=>0

Это можно увидеть с помощью следующего:

>>> True+0
1
>>> False+0
0

Поэтому, когдау вас есть два логических значения, которые добавляются вместе, это то же самое, что и OR:

True  + True  => 2 (True)
False + True  => 1 (True)
True  + False => 1 (True)
False + False => 0 (False)

Это та же «таблица истинности», что и OR:

True OR True =>True False ИЛИ TRUE => True True ИЛИ False => True FALSE ИЛИ FALSE => False

Поэтому измените значение + на || (|| равно OR в Go).

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