Базовый календарь,ошибка
|
|
#1
Есть довольно таки простой код: label days: if day_of_weak == 1 and day_of_weak <=5: "working" $day_of_weak +=1 jump days if day_of_weak ==6 and day_of_weak <=7: "Yeeah" $day_of_weak +=1 jump days НО,при запуске он тупо пропускает Jump и идет дальше,вопрос почему? Ну ок,подумал я,тупой ты ренпай.Буду тебя насильно перепрыгивать в нужное место Дописал еще один лейбл для распрыжки: label start: $day_of_weak = 1 "ok" jump days
label nextd: "ok made it" jump days
label days: if day_of_weak == 1 and day_of_weak <=5: "working" $day_of_weak +=1 jump nextd if day_of_weak ==6 and day_of_weak <=7: "Yeeah" $day_of_weak +=1 jump nextd Непомоголо втупую пропускает лейбл days,как будто его нет.
Прописал для каждого дня отдельную проверку : label start: $day_of_weak = 1 "ok" jump days
label days:
if day_of_weak == 1: "Monday" $day_of_weak +=1 jump nextd if day_of_weak == 2: "Tuesday" $day_of_weak +=1 jump nextd if day_of_weak == 3: "Wednesday" $day_of_weak +=1 jump nextd if day_of_weak == 4: "Thursday" $day_of_weak +=1 jump nextd if day_of_weak == 5: "Friday" $day_of_weak +=1 jump nextd if day_of_weak == 6: "Saturday" $day_of_weak +=1 jump nextd if day_of_weak ==7: "Sunday" $day_of_weak -=6 jump nextd
label nextd: "ok made it" jump days Только так заработало ,но сильно дохера текста и работы,хотелось бы код покомпактней,кто че может посоветовать?
Сообщение отредактировал partizein - Вторник, 26/Июн/2018, 11:58
Пользуйтесь ребята
|
#2
И первый вариант, и второй, с распрыжкой, технически рабочие, проблема не в конструкции, а в условии в if:
Код if day_of_weak == 1 and day_of_weak <=5: читается как "если Х равен 1 и одновременно с этим Х меньше либо равен 5", т.е. единственное значение переменной, которое удовлетворяет такому условию - это 1. В первом куске кода оно не выполняется никогда, т.к. переменную вы до вхождения в него не объявили, и значения у нее нет, во втором, с распрыжкой, выполняется только раз, потому что переменная была объявлена ($day_of_weak = 1). Если исправить на:
Код if day_of_weak >= 1 and day_of_weak <=5: - все заработает. Аналогично со вторым условием:
Код if day_of_weak >=6 and day_of_weak <=7: Можно свернуть их в if/else, но нужно ли это, зависит от конкретной задачи, пока что такой код будет просто циклить нас в метке days, пока дней не станет 8 а потом выпадать на следующую по тексту в файле метку:
Код label days: if day_of_weak >= 1 and day_of_weak <=5: "working"
$day_of_weak +=1 jump days
elif day_of_weak >=6 and day_of_weak <=7: "Yeeah"
$day_of_weak +=1 jump days
|
#3
Ну вообще мне кажется, что изначальный код стоило бы доработать так (- вместо пробела). Согласен с ответом выше, что в одном из условий ошибка. Но почему бы не доработать?.. (Встраивание в код: в N++ замена 4-х дефисов ("----") на 4 пробела (" ")). ===1:
label days: ----if ((day_of_weak >= 1) and (day_of_weak <=5)): --------"working" ----elif ((day_of_weak == 6) or (day_of_weak ==7)): --------"Yeeah" ----$ day_of_weak +=1 ----if (day_of_weak > 7): --------$ day_of_weak = 1 ----jump days
=== Ежели нужно под каждый день с сохранением day_of_weak (1 == Пон). ===2:
init: ----$ dayer = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"] label days: ----if ((day_of_weak >= 1) and (day_of_weak <=7)): --------"[dayer[day_of_weak - 1]]" ----else: --------$ day_of_weak = 0 ----$ day_of_weak +=1 ----if (day_of_weak > 7): --------$ day_of_weak = 1 ----jump days
=== Полные дни с наличием проверки на выходные: ===3.1: init: ----$ dayer = [["Понедельник", "Рабочий"], "[Вторник", "Рабочий"], ["Среда", "Рабочий"], ["Четверг", "Рабочий"], ["Пятница", "Рабочий"], ["Суббота", "Выходной"], ["Воскресенье", "Выходной"]] label days: ----if ((day_of_weak >= 1) and (day_of_weak <=7)): --------"[dayer[day_of_weak - 1][1]]" # Отображение дня. --------"[dayer[day_of_weak - 1][0]]" # Рабочий ли. ----else: --------$ day_of_weak = 0 ----$ day_of_weak +=1 ----if (day_of_weak > 7): --------$ day_of_weak = 1 ----jump days ===3.2:
init: ----$ dayer = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"] label days: ----if ((day_of_weak >= 1) and (day_of_weak <=7)): --------"[dayer[day_of_weak - 1]]" --------if ((day_of_weak == 6) or (day_of_weak == 7)): ------------"Выходной :(" --------else: ------------"Рабочий!" ----else: --------$ day_of_weak = 0 ----$ day_of_weak +=1 ----if (day_of_weak > 7): --------$ day_of_weak = 1 ----jump days
=== Если не заработало, можно попробовать так:
label start: ----call days ----jump start
label days: ----if ((day_of_weak >= 1) and (day_of_weak <=5)): --------"working" ----elif ((day_of_weak == 6) or (day_of_weak ==7)): --------"Yeeah" ----else: --------$ day_of_weak = 0 ----$ day_of_weak +=1 ----if (day_of_weak > 7): --------$ day_of_weak = 1 ----return
Сообщение отредактировал Tester - Вторник, 26/Июн/2018, 13:07
Тестировать, тестировать и ещё раз тестировать.
|
#4
Спасибо всем 
Пользуйтесь ребята
|
#5
Tester, запустил твой код 3.2: init: ----$ dayer = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"] label days: ----if ((day_of_weak >= 1) and (day_of_weak <=7)): --------"[dayer[day_of_weak - 1]]" --------if ((day_of_weak == 6) or (day_of_weak == 7)): ------------"Выходной :(" --------else: ------------"Рабочий!" ----else: --------$ day_of_weak = 0 ----$ day_of_weak +=1 ----if (day_of_weak > 7): --------$ day_of_weak = 1 ----jump days Ошибка:
While running game code: File "game/script.rpy", line 38, in script "[dayer[day_of_weak -= 1]]" TypeError: list indices must be integers, not unicode
вообще нихера не понял,к чему здесь юникод?
Сообщение отредактировал partizein - Вторник, 26/Июн/2018, 17:58
Пользуйтесь ребята
|
#6
Во-первый, мат. операция внутри списка может не пройти, тогда придётся фиксить через $ renpy.say(). Аргумент там зависит от того, кто говорит и проч., так что настраивать то отдельно.
В-вторых. проблема вот в чём: day_of_weak -= 1. -= 1!!! В варианте 3.2 сего нет, но в трейсе есть. Значит, неверно переписан код. Таким образом, day_of_weak -= 1, где -= не является мат. операцией (= -- присваивание, -= возможно лишь при изменении значения переменной и его присваивании), благодаря динамической типизации строкой "day_of_weak -= 1" в Юникоде. Вот, откуда взялся юникод.
===
Можете попробовать исправить на "[dayer[day_of_weak - 1]]" в строке 38 (уже вне приведённого вами кода). Ежели не будет работать, попробуйте другой вариант: $ renpy.say(char, "[dayer[day_of_weak - 1]]". char -- Имя того, кто говорит. Можно вовсе не вводить. Ежели и это не сработает, тогда попробуйте ещё варианты, допустим: === $ renpy.say(char, "[dayer[%d - 1]]" % day_of_weak) === $ renpy.say(char, "[dayer[%d]]" % (day_of_weak - 1)) === $ AllahAkbar = day_of_weak - 1 #И дописать в ините как число. $ renpy.say(char, [dayer[%d]] % AllahAkbar) === $ AllahBabah = dayer[day_of_weak - 1] # И прописать в ините как строку. "[AllahBabah]" === Можете даже такое (но зачем?!) $ AllahBabah = dayer[day_of_weak - 1] # И прописать в ините как строку. $ renpy.say(char, "%s" % AllahBabah)
Сообщение отредактировал Tester - Вторник, 26/Июн/2018, 19:54
Тестировать, тестировать и ещё раз тестировать.
|
#7
Вообщем,насчет [dayer[day_of_weak - 1]] Тут вся проблема была в day_of_weak - 1 питон тупо не разрешает вставлять сюда что либо,кроме цифр,а зря было бы намного удобнее. Долго мучился как бы сделать код покомпактнее д еще и со списком($ dayer = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]) Долго думал. Забил,помиксовал с официальным уроком
Получился такой код:
Пользуйтесь ребята 
Сообщение отредактировал partizein - Вторник, 26/Июн/2018, 22:19
Пользуйтесь ребята
|