Тело цикла выполняется только один раз ошибка

…тело выполняется только один раз…

Оно выполняется многократно, но каждый раз innerHTML принимает одинаковое значение <div class="block">child</div>

Можно было внутри цикла написать

parent.innerHTML += '<div class="block">child</div>';

** x += 5 ← то же самое → x = x + 5

Но в таком случае оно на каждом круге будет полностью обновлять HTML. Поэтому лучше создать отдельную переменную, на каждом круге в неё добавлять строку, и в конце один раз обновить HTML:

let str = "";
for (let i = 0; i < form.num.value; i++) {
  str += '<div class="block">child</div>';
}
parent.innerHTML = str;

Вроде нормально работал вариант с createElement(‘div’) и appendChild … но как прописать класс…

for (let i = 0; i < form.num.value; i++) {
  let div = document.createElement('div');
  div.className = "block";
  div.textContent = "child";
  parent.appendChild(div);
}

И, эльфийский вариант:

parent.innerHTML = new Array(+form.num.value).fill('<div class="block">child</div>').join('');

P.s. обращаю внимание, в циклах for: i — число, а form.num.value — строка. При сравнении i < form.num.value она автоматически превращается в число и всё работает, а здесь была бы ошибка) Поэтому поставлен +, он превращает строку в число.

Я нуб в Питоне, поэтому не судите строго. Вот код моего скрипта

import re
fKeys = open('keys.txt','r')
fCity = open('city.txt','r')
fResult = open('result.txt','w')
for lineKeys in fKeys:
    lineKeys = re.sub('n', '', lineKeys)
    for lineCity in fCity:
        lineCity = re.sub('n', '', lineCity)
        result = lineKeys+' '+lineCity
        fResult.write(result + 'n')
fKeys.close()
fCity.close()
fResult.close()

содержимое файла keys.txt

футболки для беременных
одежда для беременных
вещи для беременных

содержимое файла city.txt

В результате в файле result.txt получаеться

футболки для беременных Москва
футболки для беременных Рязань
футболки для беременных Питер

То есть первый цикл берет только первую строку ‘футболки для беременных’ и все, второй вложеный цикл отрабатывает нормально.

Но мне нужно чтоб результат работы был следующий

футболки для беременных Москва
футболки для беременных Рязань
футболки для беременных Питер
одежда для беременных Москва
одежда для беременных Рязань
одежда для беременных Питер
вещи для беременных Москва
вещи для беременных Рязань
вещи для беременных Питер

Помогите решить проблему. Почему первый цикл for берет только первую строку из файла?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <locale.h>
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Rus");
    FILE *text;
    text = fopen("result.txt", "w");
    
 
    float a, x, y, z, n, p;
 
    printf_s("Введите an");
    scanf_s("%f", &a);
    x = -5;
    n = 0;
    p = 1;
 
    if (x >= -5 && x <= 5)
    {
        if (x < a)
        {
            z = sqrt(x * x + exp(x));
        }
        if (x == a)
        {
            z = tan(a * x + 2.5);
        }
        if (x > a)
        {
            z = a * sin(3 * x);
        }
        y = x * log10(fabs(z * z * z + a));
        if (y >= -3 && y <= 3)
        {
            n = n + 1;
        }
        if (y > 0)
        {
            p = p * y;
        }
        
        
        printf("x=%f   z=%f  y=%f  n=%f  p=%fn", x, z, y, n, p);
        fprintf(text, "x=%f   z=%f  y=%f  n=%f  p=%fn", x, z, y, n, p);
        x = x + 0.5;
 
        goto M;
 
    }
 
    
   
    printf("x=%f   z=%f  y=%f  n=%f  p=%fn", x, y, z, n, p);
    fprintf(text, "x=%f   z=%f  y=%f  n=%f  p=%fn", x, z, y, n, p);
 
 
    
  
    fclose(text);
    return 0;
}

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

Предположим, у вас есть список фруктов: яблоко, банан, банан, вишня, финик. Предположим, вы хотите удалить банан. Итак, вы пишете код для этого:

for each fruit in Fruits
    if fruit is Banana
        remove fruit

Вот один из возможных сценариев, в зависимости от того, как итерация реализована языком программирования или библиотекой: во-первых, код указывает на элемент 0 (при условии индексации на основе нуля), где он находит Apple. Apple не соответствует банану. Таким образом, код переходит к следующему элементу в списке, в позиции 1: Банан. Банан соответствует Банану, так что Банан удаляется.

Теперь список фруктов состоит из яблок, бананов, вишни, фиников. Второй банан сидит в положении 1, где был первый банан. Вишня сейчас сидит там, где был второй Банан, в положении 2; и Дата сидит там, где была Черри, в положении 3.

Поскольку код уже выполнил сравнение и удаление в позиции 1, он не собирается делать еще один! Пришло время увеличить его, чтобы перейти к позиции 2, где он находит Черри. Это означает, что он пропустил второй банан. Когда цикл завершится, у вас все еще будет второй банан. В списке будут Apple, Banana, Cherry, Date.

Подход, который может работать в зависимости от того, как реализованы массивы (в том числе, являются ли они динамическими и можно ли удалять из них элементы, не вызывая повторного упорядочения оставшихся элементов), заключается в создании массива из элементов в списке, а затем итерации. через них по индексу, в свою очередь, от n-1 до 0 (при условии, что массивы начинаются с нуля). Вы должны сделать это в обратном порядке, иначе вы столкнетесь с той же проблемой, что и раньше. Когда вы выполняете итерацию в обратном порядке, удаление приводит к смещению уже посещенных элементов, но не элементов, которые вы еще не посетили.

According to my teacher, a for-loop always executes at least once, even if the condition is not met.

Example (like I know it from C++):

for (int i=6; i <=5; i++) {
    //irrelevant for this question
}

According to her, this loop would execute at least once, yet it does not, or am I missing something?
Is there any case, no matter what language, where this would execute once?
To eliminate the thought in advance: yes, it was about for loops, not do-while-loops.

Edit:

Thanks for all those quick answers, I guess this case is already closed. Have a nice day/night.

Возможно, вам также будет интересно:

  • Тендер не могу удалить аккаунт выдает ошибку
  • Телефон указан некорректно код ошибки 1000
  • Темы для сочинения на тему опыт и ошибки
  • Телефон сяоми выдает ошибку рабочего стола что делать
  • Темы для направления опыт и ошибки

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии