Задать вопрос
  • Какую логику сделать для проверки верности вопроса в приложении тест?

    0xD34F
    @0xD34F Куратор тега React
    Начать следует не с какой-то там логики, а со структуры данных, что содержит вопросы. То, что есть сейчас, никуда не годится. Что, если завтра вместо трёх вариантов ответа надо будет сделать четыре? Будете добавлять ещё по два свойства в каждый объект в массиве вопросов, а в компоненте закопипастите ещё один input? А если в разных вопросах должно будет быть разное количество вариантов ответа? Что тогда?

    Варианты ответа складываете в массив, а корректный вариант обозначаете через его индекс:

    const questions = [
      {
        text: 'Выберите верное утверждение',
        answers: [
          'СССР распался в 1997 году',
          'Солнце вращается вокруг Земли',
          'шестью восемь - двадцать три',
        ],
        correctAnswer: 1,
      },
      {
        text: '...',
        answers: [ '...', '...', ... ],
        correctAnswer: ...,
      },
      ...
    ];

    В компоненте вопроса вместо того, чтобы копипастить input'ы, делаете цикл по вариантам ответа:

    function Question(props) {
      const onChange = e => props.onAnswerChange(+e.target.value);
    
      return (
        <div>
          <h3>{props.question.text}</h3>
          <ol>
            {props.question.answers.map((n, i) => (
              <li>
                <label>
                  <input
                    type="radio"
                    value={i}
                    checked={props.answer === i}
                    onChange={onChange}
                  />
                  {n}
                </label>
              </li>
            ))}
          </ol>
        </div>
      );
    }

    В родительском компоненте храните массив ответов:

    function App(props) {
      const [ answers, setAnswers ] = useState(Array(props.questions.length).fill(null));
    
      const updateAnswer = (questionIndex, answer) =>
        setAnswers(answers.map((n, i) => i === questionIndex ? answer : n));
    
      return (
        <div>
          {props.questions.map((n, i) => (
            <Question
              question={n}
              answer={answers[i]}
              onAnswerChange={answer => updateAnswer(i, answer)}
            />
          ))}
        </div>
      );
    }

    Ну и возвращаясь к вашему вопросу, чего там надо было?

    не получается сделать грамотную проверку правильного ответа...

    Чтобы проверить правильность ответа, надо сравнить его со значением свойства correctAnswer у соответствующего (с тем же индексом) вопроса. Например, считаем количество правильных ответов:

    const correctAnswersCount = answers.reduce((acc, n, i) => {
      return acc + (n === questions[i].correctAnswer);
    }, 0);

    ...и одновременно вывести верные ответы

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

    const correctAnswers = questions.map(n => n.answers[n.correctAnswer]);

    Ну а массив строк вывести - надеюсь, справитесь сами.

    UPD. Посмотреть живьём можно здесь (есть отличия от того, что есть или предполагается у вас - вопросы показываются по очереди, а не все сразу; в результатах отображаются только верные ответы).
    Ответ написан
    1 комментарий
  • Как исправить ошибку A second operation was started on this context instance before a previous operation completed?

    По сообщению очевидно, что ты начал вторую операцию на ef-овском DbContext до того, как закончилась предыдущая.
    Такое обычно случается, когда ты пытаешься работать с DbContext параллельно из нескольких потоков или забыл написать await у SaveChanges. (это в ошибке и написано, буквально)
    Также в сообщении об ошибке дана ссылка на статью, которую следует прочитать, чтобы не допускать таких ошибок в будущем.

    Kafka, Postgres, и "100 данных подряд" тут ни при чём.
    Ответ написан
    Комментировать
  • Как распаковать список в C#?

    Ну тут вопрос, зачем делать список из обжектов, если можно List<List<double[]>>, но если повлиять не можешь и точно знаешь что содержимое именно такое:

    var items = orders_
     .Cast<List<object>>() // В случае с List<List<double[]>> просто надо убрать эти вызовы Cast.
     .SelectMany(x=>x)
     .Cast<double[]>() // и этот тоже
     .SelectMany(x=>x);
    
    Console.WriteLine(string.Join(", ", items));
    Ответ написан
    1 комментарий
  • Как с помощью GPS и Arduino, надёжно и безопасно вывести человека из леса?

    @rPman
    С точки зрения интерфейса, наплечное устройство должно показывать направление до дома и опционально - расстояние, плюс кнопку сос и в идеале - голосовая связь, но все радиокоммуникации зарегулированы в стране (в лесу тупо может не быть привычной сотовой связи, напоминаю спутниковая тоже зарегулирована так что ее цена неподъемна для большинства), для стороннего наблюдателя это должно быть приложение, показывающее на карте выбранного пользователя.

    Создание своего устройства, с высоким уровнем защиты (особенно защита от холода создаст проблем) - проблема, которую сложно будет решить тем кто задает вопросы такого уровня. Ищите лучше готовые решения.

    p.s. представь ты создал устройства, раздал из людям, но из-за ошибке в реализации (первый релиз, баги, обычное дело) люди, понадеявшиеся на твое устройство - зашли в болото и погибли, ты готов к подобной ответственности?
    Ответ написан
    Комментировать
  • Как сделать асинхронный while цикл?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    ConsoleApp\Program.cs
    // See https://aka.ms/new-console-template for more information
    
    await DoWork();
    
    async Task DoWork()
    {
        int counter = 0;
        while (true)
        {
            Console.WriteLine($"TEST {++counter}");
            await Task.Delay(900);
        }
    }


    ConsoleApp\ConsoleApp.csproj
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
      </PropertyGroup>
    
    </Project>
    Ответ написан
    Комментировать
  • Как сделать асинхронный while цикл?

    Вместо Thread.Sleep использовать await Task.Delay.
    Или таймеры.
    Или запускать в отдельном потоке.
    Ответ написан
    Комментировать
  • Как исправить ошибку на C#?

    Начните с перевода "no suitable method found to override"
    Ответ написан
    2 комментария
  • Как логгировать в EntityFramework штатными средствами net core?

    byte916
    @byte916 Автор вопроса
    Если кратко, то логгер, судя по всему, синглтон, а БД по умолчанию не синглтон, и из-за этого возникает описанная проблема.
    В общем, вот решение задачи.
    Вместо контекста бд пробрасываем ServiceProvider
    Startup.cs

    loggerFactory.AddProvider(new DbLoggerProvider(app.ApplicationServices));


    В логгере создаем scope и получаем из сервиспровайдера экземпляр БД
    DbLogger.cs

    using (var scope = _serviceProvider.CreateScope())
    {
       var db = scope.ServiceProvider.GetRequiredService<CuDb>();
    
       db.Logs.Add(new CheckUpDb.Log() { Date = DateTime.UtcNow, LogLevel = logLevel, Message = formatter(state, exception) });
       db.SaveChanges();
    }

    Ответ написан
    Комментировать
  • Когда мы создаем list и в элементы добавляем значимые типы данных происходит ли упаковка?

    Если используешь List<T> и это T - значимый тип данных, который ты хочешь засунуть, то упаковки не будет.
    Если используешь ArrayList или T-ссылочный тип (интерфейс или object), то упаковка будет.
    Ответ написан
    1 комментарий
  • Как написать решение для формулы в c#?

    Степени - Math.Pow
    Модуль - Math.Abs
    Синус - Math.Sin
    Ответ написан
    Комментировать
  • Мне нужно получать текст из выделенного элемента listBox.Как это сделать?

    @killman Автор вопроса
    Нашёл решение сам надо просто:
    string someValue = listBox1.Text;
    Ответ написан
    Комментировать
  • Как создать модальное окно asp.net mvc?

    @valeryalastor Автор вопроса
    оказывается по-умолчанию файлы были 4.0 bs а я пыталась работать с 5.0. как только скачала в офиц сайта новые файлы и все заработало с помощью 2х строк:
    <link href="~/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
        <script src="~/lib/bootstrap/js/bootstrap.bundle.min.js"></script>
    Ответ написан
    Комментировать
  • Как классу Program задать модификатор public в c# 9.0?

    Jeer
    @Jeer Автор вопроса
    уверенный пользователь
    Подсказали, я переписал класс Program в олдовом формате:
    namespace Api
    {
        public class Program
        {
            static void Main(string[] args)
            {

    И это завелось, хотя мне было как-то неочевидно, что так можно сделать.
    Всем спасибо!

    UPD
    Ещё подсказали, что можно в новом синтаксисе можно в самом низу написать через partial и это так же будет работать:
    using...
    ... 
    app.Run();
    
    public partial class Program { /* Expose the Program class for use with WebApplicationFactory<T> */ }
    Ответ написан
    Комментировать
  • Зачем нужен метод CreateLinkedTokenSource(CancellationToken)?

    Не уверен, когда именно это может понадобится в реальной жизни (у самого не было такой потребности), но например:
    1. Тебе пришёл CancellationToken, но ты хочешь добавить новую причину, по которой может отметиться выполнение, в дополнение к той, по которой сработает первый CancellationToken
    2. Ты создаёшь свой CTS и прилинковываешь его к первому токену.
    Профит, задача решена - твой метод может отмениться как извне, так и по каким-то своим внутренним причинам.
    Ответ написан
    5 комментариев
  • Различные бэкэнд технологии .net. Что для чего нужно, что же учить новичку?

    Razor pages являются частью ASP NET Core MVC.
    И он нужен для разработки фронтенда с SSR, а не бэкенда. Так что правильнее будет делать аналогию не с flask, а django.
    Razor Pages - Jinja
    ASP NET Core MVC - Django

    Blazor же вообще целиком и полностью нужен для фронтенда - его стоит ставить в аналогию с Angular и Vue.

    Какая бэкeнд технологий .net из них самая перспективная?

    Просто ASP NET Core, без MVC

    Какую бэкeнд технологию на платформе .net выбрать новичку для более понятного входа с нуля?

    По сложности они все эквивалентны, но решают разные задачи. Определись сначала с задачей.
    Ответ написан
    7 комментариев
  • Делегаты, зачем?

    MSerhio
    @MSerhio
    Вхожу в IT
    Делегат позволяет ослабить связность кода, а рассматривать их стоит вместе с событиями.
    Я объясню на примере игростроя.
    Популярный в сети пример: во врага попала пуля. Должно случиться сразу много вещей - нужно снять здоровье врага, выяснить, не погиб ли он, проиграть анимацию, уничтожить пулю, начислить очки игроку и еще что-то.
    Если мы будем всё это вызывать напрямую, то быстро запутаемся и ошибемся. А когда будем переделывать, сломаем всё окончательно.
    Вот тут нас выручат делегаты и события. Мы определим событие, которое срабатывает (вызывает свой делегат) в момент попадания пули. И соответственно, определим делегат для этого события.
    Теперь каждый метод, которому это событие интересно, может подписаться на его делегат (внести себя в список вызываемых делегатом методов - их может быть больше одного).
    И теперь мы можем переделывать что угодно. Главное, не забывать подписываться и отписываться.
    Делегат, это как автолавка в деревне: приезжает и сигналит. Кому надо - выходит. При этом ни автолавке ни покупателям не интересно, что происходит у каждой из сторон в отдельности.
    Ответ написан
    Комментировать
  • Как автоматически получить public url от ngrok?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    достаточно было зайти на страницу тарифов https://ngrok.com/pricing
    6pWqAUPY.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2025-03-2022%2022:29:07.jpg
    Ответ написан
    3 комментария
  • Как решить задачу по математике с помощью python?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Это не задача на программирование, а задача на математику. Решение - одна формула.

    Сначала решите уравнение, при какой величине вклада X доход от бумаги и от банковского вклада будет одинаков?

    1.1X+2000 = 1.12X

    До этой суммы выгоднее брать бумагу - после - вклад.
    Далее надо 4 раза взять одно из двух, сравнивая текущую сумму с пороговым значением выше.

    От питона вам надо уметь выполнять действие 4 раза:
    for i in range(0, 4):

    Сравнивать 2 значения и делать в зависимости от этого разные действия.
    if a < b:
      foo
    else:
      bar


    Ну, вряд ли вы не знаете, еще надо уметь присваивать переменные и выполнять арифметику - умножение и сложение.
    Ответ написан
    Комментировать
  • Что лучше использовать для ведения логов?

    Ну из бесплатных систем, которые можно развернуть на своих серверах, есть два варианта:
    1. ELK
    2. Grafana + Loki

    То, как их настроить - можешь посмотреть на хабре. Лично я больше выступаю за второй вариант, ибо Grafana+Loki требуют гораздо меньше ресурсов сервера, как для хранения, так и для поиска по логам, да и UI не так страшно тормозит.

    Можно и самому что-нибудь навелосипедить, поверх какой-нибудь timeseries базы.
    Ответ написан
    Комментировать
  • Как вернуть результат при пустом значении?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Чего гадать, можно же явно вернуть нашли / не нашли
    public async Task<(bool, long)> GetId(long bookingId)
    Ответ написан
    Комментировать