Как найти каждое третье число

Алексей Комаров



Мастер

(1436),
закрыт



7 лет назад

Дополнен 7 лет назад

недописал: while otshet < itog

0_ooo

Просветленный

(20107)


7 лет назад

print(list(range(-1,-21,-3)))

Источник: это лаконичный язык, зачем тут while?

Алексей КомаровМастер (1436)

7 лет назад

Задача такая у меня в учебнике, именно ее и надо решить, до лаконичного и правильного кода мне еще далеко.

0_ooo
Просветленный
(20107)
i = -1
while i>-21:
__print(i)
__i = i – 3

XapD

Мудрец

(18021)


7 лет назад

otshet = -1
while otsh < itog:

Ржу – не могу…

Алексей КомаровМастер (1436)

7 лет назад

Подскажи как правильно лучше

XapD
Мудрец
(18021)
Лучше проспаться и не курить траву. Чтобы внимание появилось. Витаминчики попить, там… Чаи всякие травяные. Чтобы сосредоточить внимание. На всякий случай – чернички пожрать и морковочки, чтобы зрение, если вдруг подвело, поправить. А потом ВНИМАТЕЛЬНО прочитать то, над чем я ржу уже минут пять…

blabla blabla

Мастер

(1623)


7 лет назад

res = -1
two = -3
itog = -21
while res > itog:
res = res – two
print (res)

Алексей КомаровМастер (1436)

7 лет назад

“Traceback (most recent call last):
File “C:/Python34/test.py”, line 4, in
while res > itog:
NameError: name ‘res’ is not defined”

blabla blabla
Мастер
(1623)
res = -1
two = -3
itog = -21
while res > itog:
res = res – two
print (res)

лексей дронин

Мыслитель

(5666)


7 лет назад

как то так
b=-1
c=0
while b!=-22:
….if c%2==0:
….print(b)
b=b-1
c=c+1
если каждым третьим считать число начиная от выведенного результата. если включая его то изменить с%3==0. точки обозначают отступ

IngaI

2 / 2 / 1

Регистрация: 27.06.2018

Сообщений: 78

1

28.09.2018, 23:12. Показов 5288. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте! Прошу помощи со считыванием массива из dataGridView. Нужно считать 0-вой, 3-ий, 6-ой и т.д. элемент в массив, то есть тот, который в остатке при прохождении цикла равен 0. При вводе двоичного массива с двумя одинаковыми строками 1,2,3,4,5,6 почему-то выводится 4444 вместо 1414.
Код программы:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
            for (int i = 0; i < dim; i++)
            {
                for (int j = 0; j < dim1; j++)
                {
                    if (j % 3 == 0)
                    {
                        for (int k = 0; k < dim; k++)
                        {
                            A[i, k] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);
                        }
                    }
                }
            }
           //вывод массива       
           for (int i = 0; i < dim; i++)
            {
                for (int j = 0; j < dim; j++)
                {
                    textBox2.Text += A[i, j].ToString();
                }
            }



0



814 / 561 / 240

Регистрация: 01.07.2018

Сообщений: 1,818

28.09.2018, 23:20

2

IngaI, Не пойму. А почему просто не увеличивать счетчик на 3. Может покажите что там за грид у вас такой ?



0



Элд Хасп

Модератор

Эксперт .NET

13766 / 9982 / 2657

Регистрация: 21.04.2018

Сообщений: 29,729

Записей в блоге: 2

29.09.2018, 00:53

3

IngaI, вот это

C#
1
2
3
4
5
6
7
8
9
10
                for (int j = 0; j < dim1; j++)
                {
                    if (j % 3 == 0)
                    {
                        for (int k = 0; k < dim; k++)
                        {
                            A[i, k] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);
                        }
                    }
                }

равносильно этому

C#
1
2
3
4
5
6
7
                for (int j = 0; j < dim1; j+=3)
                {
                        for (int k = 0; k < dim; k++)
                        {
                            A[i, k] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);
                        }
                }

Добавлено через 1 минуту
А вот здесь

C#
1
2
3
4
                        for (int k = 0; k < dim; k++)
                        {
                            A[i, k] = Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value);
                        }

Вы присваиваете всем A[i, k] одно и тоже значение. Это так надо?



0



2 / 2 / 1

Регистрация: 27.06.2018

Сообщений: 78

29.09.2018, 20:39

 [ТС]

4

Что-то не пойму, почему присваиваю одно и тоже значение? У меня же в цикле идёт прохождение по элементам.

Добавлено через 49 минут
Не помогло. Выводятся значения только третьего столбца, и каждое из них дублируется.



0



Модератор

Эксперт .NET

13766 / 9982 / 2657

Регистрация: 21.04.2018

Сообщений: 29,729

Записей в блоге: 2

29.09.2018, 20:55

5

Цитата
Сообщение от IngaI
Посмотреть сообщение

Что-то не пойму, почему присваиваю одно и тоже значение? У меня же в цикле идёт прохождение по элементам.

В этом цикле Вы изменяете только k и, соответственно, будет меняться только элемент присваивания A[i, k]. Выражение же, которое присваиваете, Convert.ToInt32(dataGridView1.Rows[i].Cells[j].Value) не зависит от k и поэтому будет одним и тем же.



0



Старый

31.03.2013, 05:04

Новичок на форуме

Отправить личное сообщение для madonzy

Посмотреть профиль

Найти все сообщения от madonzy

 

Регистрация: 31.03.2013

Сообщений: 5

Каждое третье число

нк



Последний раз редактировалось madonzy, 31.03.2013 в 12:41.

Ответить с цитированием

Старый

31.03.2013, 06:02

Аватар для Demath

Профессор

Отправить личное сообщение для Demath

Посмотреть профиль

Найти все сообщения от Demath

 

Регистрация: 22.06.2012

Сообщений: 168

Пример: есть число: 323532525631558 каждое третье число это: 3,2,5,1,4,8 их сумма равна 23 – число нечетное, а значит цикл должен закончиться и выведется: “Результат: 23”.

Напишите корректный пример.

Число 323532525631558 кратно 3 ?!

Где Вы узрели 4 в цифрах этого числа ?!

Зачем Вы суммировали все 3,2,5,1,4,8 если

Сообщение от madonzy

Каждая третья цифра этого числа сумируется и этот цикл продолжается до тех пор,
пока сумма этих чисел станет НЕчётной.

??

Ответить с цитированием

Старый

31.03.2013, 11:29

Новичок на форуме

Отправить личное сообщение для madonzy

Посмотреть профиль

Найти все сообщения от madonzy

 

Регистрация: 31.03.2013

Сообщений: 5

гпш



Последний раз редактировалось madonzy, 31.03.2013 в 12:42.

Ответить с цитированием

Старый

31.03.2013, 11:57

Аватар для Hekumok

Отправить личное сообщение для Hekumok

Посмотреть профиль

Найти все сообщения от Hekumok

 

Регистрация: 03.06.2012

Сообщений: 513

Так?

var str = prompt("Введите число", "") ;
var l = str.length ;
if(l%3) {
 alert("Длина числа должна быть кратной 3") ;
} else {
 var sum = 0 ;
 for(var i=2; i<l; i+=3)
  sum += str[i]-0 ;
 alert(sum%2?"Результат: "+sum : "Простите, но результат ваших чисел четный!") ;
} ;

__________________
★ ²º¹³ ☆

Ответить с цитированием

Старый

31.03.2013, 12:39

Новичок на форуме

Отправить личное сообщение для madonzy

Посмотреть профиль

Найти все сообщения от madonzy

 

Регистрация: 31.03.2013

Сообщений: 5

Сообщение от Hekumok
Посмотреть сообщение

Так?

var str = prompt("Введите число", "") ;
var l = str.length ;
if(l%3) {
 alert("Длина числа должна быть кратной 3") ;
} else {
 var sum = 0 ;
 for(var i=2; i<l; i+=3)
  sum += str[i]-0 ;
 alert(sum%2?"Результат: "+sum : "Простите, но результат ваших чисел четный!") ;
} ;

спасибо огромное!!! именно оно!!

Ответить с цитированием

If you’re interested in learning LINQ you could do:

IEnumerable<string> thirdWeeks = Enumerable.Range(0, 52)
    .Where((week, index) => index % 3 == 0)
    .Select(week => string.Format("Week {0}", week + 1));
string allWeeksInOneLine = String.Join(Environment.NewLine, thirdWeeks);
Console.Write(allWeeksInOneLine);

If you want three-weeks-in-line groups like Week 1 Week 4 Week 7:

var weeksGrouped = thirdWeeks
    .Select((week, index) => new { week, index })
    .GroupBy(x => x.index / 3)
    .Select(g => String.Join("t", g.Select(x => x.week)));
string allWeeksGrouped = String.Join(Environment.NewLine, weeksGrouped);
Console.Write(allWeeksGrouped);

Result:

Week 1  Week 4  Week 7
Week 10 Week 13 Week 16
Week 19 Week 22 Week 25
Week 28 Week 31 Week 34
Week 37 Week 40 Week 43
Week 46 Week 49 Week 52

Дан диапазон целых чисел от n1 до n2. Найти факториал каждого третьего простого
числа в заданном диапазоне.
Можно было ли сделать код проще или пойдет ?

def find_simple(n):
    s = True
    for i in range(2, n):
        if n%i == 0:
            s = False
            break
    return s

def factorial(n):
    s = 1
    for i in range(1, n+1):
        s *= i
    return s

l = range(30, 70)
k = 0
for i in l:
    if find_simple(i) == True:
        k += 1
        if k == 3:
            k = 0
            print('Число: ', i ,'nФакториал числа',factorial(i))

Kromster's user avatar

Kromster

13.5k12 золотых знаков43 серебряных знака72 бронзовых знака

задан 2 авг 2021 в 16:37

darkdarklord's user avatar

1

Можно написать несколько короче и немного оптимальнее. Хотя короче не всегда значит быстрее, не всегда значит понятнее, любое решение это компромисс:

from functools import reduce

def is_simple(n):
    return all(n % i for i in range(2, int(n**0.5)+1))

def factorial(n):
    return reduce(lambda x,y: x*y, range(1, n))

for i in list(filter(is_simple, range(30, 70)))[2::3]:
    print(f'Число: {i}nФакториал числа: {factorial(i)}')

Пояснения:

  • функция проверки на простоту должна называться is_simple (вернее даже is_prime, но не суть), потому что функция проверяет число, а не ищет
  • проверять на простоту достаточно перебирая делители до корня из числа
  • можно записать всю проверку коротко в одну строку и во вполне в “человеческом” виде: “все остатки от деления не нулевые, вплоть до корня из числа”
  • факториал можно записать через reduce, понятнее ли это – вопрос на самом деле спорный, но это опять же однострочник
  • перебор “каждого третьего простого числа в диапазоне” также можно записать однострочником
  • печатать значения лучше современным способом, через f-строки

ответ дан 2 авг 2021 в 17:12

CrazyElf's user avatar

CrazyElfCrazyElf

65.4k5 золотых знаков19 серебряных знаков50 бронзовых знаков

Добавить комментарий