Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 14, 2019 06:34:02

EugeneK
Зарегистрирован: 2018-12-28
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по задачке с 2-и циклами

uf4JaiD5

1 print(f'Number {remainder_of_1_div} located on {f_num} position')
Это работает. Так как это F строки в python они появились вроде с 3.6 или 3.7 версии. Если меня память не подводит, но можно и через метод format()

2 Вот вывод с консоли. Так я считываю числа справа налево.

 "C:\Program Files (x86)\Python37-32\python.exe" 
input first number:456
input second number:654
Number 4 located on 3 position
Number 5 located on 3 position
Number 6 located on 2 position

3 За использование метода len() согласен. Но хотел использовать только свои знания.) Народу еще спасибо за разные варианты решения.

4 А вот, что нет проверки если, что если 2-го числа нет в 1-ом, да этого нет. Спасибо что подметили.

Отредактировано EugeneK (Янв. 14, 2019 06:35:46)

Офлайн

#2 Янв. 14, 2019 07:28:02

uf4JaiD5
Зарегистрирован: 2018-12-28
Сообщения: 76
Репутация: +  4  -
Профиль   Отправить e-mail  

Вопрос по задачке с 2-и циклами

EugeneK
это F строки в python они появились вроде с 3.6 или 3.7 версии.
Не знал про такое, благодарю.
Появились в 3.6.

EugeneK
Вот вывод с консоли. Так я считываю числа справа налево.
Там ошибка же, см. позиции.

Ошибка тут:
                         if remainder_of_2_div == remainder_of_1_div:
                            print(f'Number {remainder_of_1_div} located on {f_num} position')
                        elif div_zero_1 == 0:
                            first_num = temp_num
Если цифра находится на последней позиции, то “print(f'Number ..” выполнится, а “first_num = temp_num” – нет. А нужно и то, и другое.

Будет работать, если написать “if div_zero_1 == 0:”, а не “elif”.

Но это условие вообще не нужно. Там и так цикл, перебирающий цифры – он и есть условие. Просто поставить “first_num = temp_num” перед циклом. Или после.

Отредактировано uf4JaiD5 (Янв. 14, 2019 07:29:24)

Офлайн

#3 Янв. 14, 2019 07:43:18

uf4JaiD5
Зарегистрирован: 2018-12-28
Сообщения: 76
Репутация: +  4  -
Профиль   Отправить e-mail  

Вопрос по задачке с 2-и циклами

Зачем тут возиться с длиной строк?

 if length_f_of_num >= 1 and length_f_of_num <= 6:
	...
else:
    print('You can input digital from  1 to 999 999')

Очевидно, надо само число сравнивать с 1 и 999999. Хотя зачем стоит ограничение на 999999 совершенно непонятно.

Кстати, можно 0 ввести. Пропустит (а по условию, вроде, не должно).
Хорошо, что
 '-8'.isnumeric()==False
А то бы и отрицательные числа пролезали.

Отредактировано uf4JaiD5 (Янв. 14, 2019 07:45:32)

Офлайн

#4 Янв. 14, 2019 13:41:12

EugeneK
Зарегистрирован: 2018-12-28
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по задачке с 2-и циклами

uf4JaiD5
“Просто поставить “first_num = temp_num” перед циклом. Или после.”
За это спасибо. поправил.
С 0 буду переделывать. а то что-то провтыкал. И если нет равных числе тоже. Так как когда несколько задач делаешь, что-то теряешь.

За “с 1 и 999999 таково условие задачи. ”

Отредактировано EugeneK (Янв. 14, 2019 13:56:22)

Офлайн

#5 Янв. 15, 2019 15:12:28

EugeneK
Зарегистрирован: 2018-12-28
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по задачке с 2-и циклами

uf4JaiD5
Вроде переделал НО застрял на одном моменте.
Есть 1 число 567
2 число 25
input first number:567
input second number:25
Number 5 located on 3 position
Numbers don't have equal digitals
То я получаю что 2 не входит в диапазон. Но так и есть как сделать так чтоб не выпадала.
Но если я меню числа
Есть 1 число 567
2 число 52
То все нормально.
вроде учел свои недочеты.

 first_num = input('input first number:')
if first_num.isnumeric():
    length_f_of_num = len(first_num)
    if length_f_of_num >= 1 and length_f_of_num <= 6:
        first_num = int(first_num)
        temp_num = first_num
        #
        second_num = input('input second number:')
        if second_num.isnumeric():
            length_s_of_num = len(second_num)
            if length_s_of_num >=1 and length_s_of_num <=6:
                second_num = int(second_num)
                #
                if first_num > 0 and second_num > 0 and first_num < 999999 and second_num < 999999:
                    for s_num in range(1, length_s_of_num+1):
                        #
                        flag = True
                        remainder_of_2_div = second_num % 10
                        div_zero_2 = second_num // 10
                        second_num = div_zero_2
                        #
                        for f_num in range(1, length_f_of_num+1):
                            #
                            remainder_of_1_div = first_num % 10
                            div_zero_1 = first_num // 10
                            first_num = div_zero_1
                            #
                            if remainder_of_2_div == remainder_of_1_div:
                                print(f'Number {remainder_of_1_div} located on {f_num} position')
                                flag = False
                        first_num = temp_num
                    if flag is True:
                        print(f"Numbers don't have equal digitals")
                else:
                    print('Both of number must be bigger than 0')
            else:
                print('You can input digital from  1 to 999 999')
        else:
            print('Second field accept only positive digital')
    else:
        print('You can input digital from 1 to 999 999')
else:
    print('First field accept only positive digital')
#"""

Офлайн

#6 Янв. 15, 2019 16:49:49

uf4JaiD5
Зарегистрирован: 2018-12-28
Сообщения: 76
Репутация: +  4  -
Профиль   Отправить e-mail  

Вопрос по задачке с 2-и циклами

EugeneK
Есть 1 число 567
2 число 25
input first number:567
input second number:25
Number 5 located on 3 position
Numbers don't have equal digitals
А идея-то какая?
1. Про каждую цифру писать “цифра А находится в числе Б на позиции В” либо “цифры А в числе Б нет”.
или
2. Писать “цифра А находится в числе Б на позиции В”, если она есть, и ничего не писать, если её нет. В случае, если нет ни одной цифры, написать “в числе Б нет вообще ни одной цифры из числа Г”.
Просто откуда взялась фраза “Numbers don't have equal digitals”?
Первый вариант больше похож на то, что написано в условии задачи.

EugeneK
Но если я меню числа
Есть 1 число 567
2 число 52
То все нормально.
Можно было написать, что именно выводится в этом случае, и что там нормально. А то надо запускать самому, смотреть.

Офлайн

#7 Янв. 15, 2019 17:45:51

EugeneK
Зарегистрирован: 2018-12-28
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по задачке с 2-и циклами

“”Просто откуда взялась фраза “Numbers don't have equal digitals”?“”
Это фраза взялась с вот этого куста кода. Ниже я сделал через флаг.

 if first_num > 0 and second_num > 0 and first_num < 999999 and second_num < 999999:
                    for s_num in range(1, length_s_of_num+1):
                        #
                        flag = True
                        remainder_of_2_div = second_num % 10
                        div_zero_2 = second_num // 10
                        second_num = div_zero_2
                        #
                        for f_num in range(1, length_f_of_num+1):
                            #
                            remainder_of_1_div = first_num % 10
                            div_zero_1 = first_num // 10
                            first_num = div_zero_1
                            #
                            if remainder_of_2_div == remainder_of_1_div:
                                print(f'Number {remainder_of_1_div} located on {f_num} position')
                                flag = False
                        first_num = temp_num
                    if flag is True:
                        print(f"Numbers don't have equal digitals")
Вот для чего этот флаг:
input first number:123
input second number:654
Numbers don't have equal digitals

Что я сейчас реализовал:
нельзя вводить буквы, спец символ, - минусовые значения, 0 как в 1числе так и в 2 числах, одинаковый числа только в разные стороны(1-123 2-321)
А вот когда в 2-ом числе есть только 1 цифра с 1-ого числа
пример
1 - 567
2 - 25
то получаю что 5 есть а 2 нет в первом числе.
input first number:567
input second number:25
Number 5 located on 3 position
Numbers don't have equal digitals

Вот думаю, как так сделать, что если числа разные то писало Numbers don't have equal digitals(123 456) и когда есть хоть одно число то писало что нет в 1 числе.

Отредактировано EugeneK (Янв. 15, 2019 17:58:29)

Офлайн

#8 Янв. 15, 2019 18:25:31

uf4JaiD5
Зарегистрирован: 2018-12-28
Сообщения: 76
Репутация: +  4  -
Профиль   Отправить e-mail  

Вопрос по задачке с 2-и циклами

EugeneK
Это фраза взялась с вот этого куста кода. Ниже я сделал через флаг.
Это понятно. Я о трактовке условий задачи. По-моему, там не просят специально отмечать ситуацию, когда общих цифр нет. Там просят писать о том, что отсутствует конкретная цифра. И если делать так, то эта надпись вообще не нужна.

Поэтому и уточнял, какая идея.

Ещё раз: если цифры 2 в числе 567 нет, то об этом надо написать (“цифра 2 в числе 567 отсутствует”) или не надо?

EugeneK
нельзя вводить .. одинаковый числа только в разные стороны
Почему? Условия не запрещают.

EugeneK
получаю что 5 есть а 2 нет в первом числе.
input first number:567
input second number:25
Number 5 located on 3 position
Numbers don't have equal digitals
Если и отставлять вывод надписи “Numbers don't have equal digitals”, то тут-то её точно не должно быть. Надо исправлять. Подсказка: что показывает flag? (и лучше дать более “говорящее” название этой переменной)

Офлайн

#9 Янв. 17, 2019 09:09:01

EugeneK
Зарегистрирован: 2018-12-28
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по задачке с 2-и циклами

uf4JaiD5

Ещё раз: если цифры 2 в числе 567 нет, то об этом надо написать (“цифра 2 в числе 567 отсутствует”) или не надо?
Уточнил задание ее писать не нужно. На этом задача принята. Задание уточнили НО ее уже нужно будет решать через строку.
Что изменилось это только вот этот флаг стал стоять за пределами цикла.
 if first_num > 0 and second_num > 0 and first_num < 999999 and second_num < 999999:
                    flag = True
                    for s_num in range(1, length_s_of_num+1):
                        #
                        remainder_of_2_div = second_num % 10
                        div_zero_2 = second_num // 10
                        second_num = div_zero_2
                        #
                        for f_num in range(1, length_f_of_num+1):
                            #
                            remainder_of_1_div = first_num % 10
                            div_zero_1 = first_num // 10
                            first_num = div_zero_1
                            #
                            if remainder_of_2_div == remainder_of_1_div:
                                print(f'Number {remainder_of_1_div} located on {f_num} position')
                                flag = False
                        first_num = temp_num
                    if flag is True:
                        print(f"Numbers don't have equal digitals")

Отредактировано EugeneK (Янв. 17, 2019 09:09:37)

Офлайн

#10 Янв. 17, 2019 14:50:35

uf4JaiD5
Зарегистрирован: 2018-12-28
Сообщения: 76
Репутация: +  4  -
Профиль   Отправить e-mail  

Вопрос по задачке с 2-и циклами

EugeneK
флаг стал стоять за пределами цикла.
EugeneK
На этом задача принята.
Ну поздравляю.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version