Форум сайта python.su
0
Доброго дня всем!
Ранее уже обращался за помощью. Помогли добрыми советами. За что огромное спасибо.
Python изучаю самостоятельно для возможной смены специальности по итогам успешной сдачи финального задания. Пока в самом начале пути. Курс, который прохожу, дан в сжатом виде, без особых пояснений и примеров. Поэтому без живого общения сложно выходит. Да, я могу найти ответы на промежуточные задания, но тогда теряется сам смысл моего обучения. Т.к. цель именно научиться, понять и смочь, а не для галочки.
Дана задача: По данному натуральному n ≤ 9 выведите лесенку из n ступенек, i-я ступенька состоит из чисел от 1 до i без пробелов.
Ответ подсмотрел:
n=int(input("Введите целое число до 9 включительно: ")) for i in range(n): for i in range(1,i+2): print(i, end=' ') print()
Введите целое число до 9 включительно: 3 1 1 2 1 2 3
Офлайн
857
SabachДело не в живом общении. Ты неправильно составил себе программу обучения и из-за этого неправильно себе подбираешь курсы. Ты знаешь, что бывают курсы, составленные людьми, ничего не смыслящими в преподавании? Оттуда ты и получаешь вот это “найдите то, найдите это, а это вам домашнее задание”. Они не способны научить чему-то, даже если умеют это сами.
Курс, который прохожу, дан в сжатом виде, без особых пояснений и примеров. Поэтому без живого общения сложно выходит.
>>> def f(): ... n = int(input("Введите число от 1 до 9 включительно: ")) ... for i in range(n): ... for j in range(i + 1): ... print(j + 1, end='') ... print() ... >>> f() Введите число от 1 до 9 включительно: 9 1 12 123 1234 12345 123456 1234567 12345678 123456789 >>>
SabachВ прошлом топе я тебе говорил, что сливание всего воедино в программировании не приветствуется. Только если ты для машины код делаешь и оптимизируешь его по максимуму, там можно слить всё воедино автоматически, так как человек это читать не будет потом никогда.
Возможно коряво написал и вопросы кажутся глупыми, но из-за отсутствия понимания я не могу (вернее, не хочу) продвигаться дальше
SabachТебе нужно разработать программу обучения для себя. Потом под эту программу подобрать методики обучения себя. А потом уже искать ресурсы для удовлетворения этим методикам - курсы, книги, видео, коды, преподаватели, дидактические материалы. Бери по максимуму. Добудь курс вуза, который учит по данной специальности. Вузы, как правило, подотчётны министерству образования, поэтому свои курсы они не лепят на коленке, а выстраивают в соответствии с требованиями закона.
За свои сорок лет бОльшим дураком не выглядел, но обратиться больше не к кому
Отредактировано py.user.next (Июль 14, 2020 23:56:16)
Офлайн
0
Спасибо за рекомендации…
Скачал 2 тома Лутца. Может путем наименьшего сопротивления мозги встанут на место..
Введение многообещающе (на то оно и введение
)
Офлайн
44
py.user.next+
Бери по максимуму
и вставьте ссылку на его url Офлайн
0
Всем доброго дня!
Задание: Напишите программу (файл arithmetic.py), которая предлагала бы пользователю решить пример 4 * 100 - 54. Потом выводила бы на экран правильный ответ и ответ пользователя. Подумайте, нужно ли здесь преобразовывать строку в число.
Мой вариант:
a=4*100-54 print ("Решите задачу:\n 4*100-54=?") while True: try: b=float(input ("Введите Ваш ответ:\n")) if a==b: print("Поздравляю! Ответ правильный.") else: print ("К сожалению, Вы ошиблись.\nПравильный ответ:",a) except(ValueError): print("Введите числовое значение!") else: break
print('Ex:1. Solve the equation 4*100-54', end='\n\n') user_answer = int(input("input your answer here: ")) right_answer = 4 * 100 - 54 if user_answer == right_answer: print ("Your answer: {0}. Computer calculate: {1}".format(user_answer, right_answer)) else: print("Your answer is wrong")
Отредактировано Sabach (Авг. 13, 2020 19:12:45)
Офлайн
857
SabachНадо вычисление формулы перенести ближе к циклу.
Вопрос, по большей части к py.user.next: насколько мой алгоритм близок к рекомендованной ранее модульности и что не так?
SabachОн не столько компактный, сколько правильный по последовательности шагов. Где-то шаги склеены в один, но на начальных этапах их надо разделять, потому что в голове ты всегда раздельно думаешь, а склеивание шагов появляется только в коде и оно не всегда является правильным действием.
Среди ответов других пользователей понравился своей компактностью такой
user_answer = int(input("input your answer here: "))
user_answer = input("input your answer here: ") user_answer_number = int(user_answer)
user_answer = input("input your answer here: ") if not user_answer.isdigit(): print("Error: not a number") sys.exit(1) user_answer_number = int(user_answer)
>>> def f(): ... print('Решите задачу:\n4 * 100 - 54 = ?') ... a = 4 * 100 - 54 ... b = None ... while True: ... s = input('Введите Ваш ответ:\n') ... try: ... b = float(s) ... break ... except ValueError: ... print('Введите числовое значение!') ... if a == b: ... print('Поздравляю! Ответ правильный.') ... else: ... print('К сожалению, Вы ошиблись.') ... print('Правильный ответ:', a) ... >>> f() Решите задачу: 4 * 100 - 54 = ? Введите Ваш ответ: abc Введите числовое значение! Введите Ваш ответ: def Введите числовое значение! Введите Ваш ответ: 12 К сожалению, Вы ошиблись. Правильный ответ: 346 >>> >>> >>> f() Решите задачу: 4 * 100 - 54 = ? Введите Ваш ответ: 346 Поздравляю! Ответ правильный. >>>
Отредактировано py.user.next (Авг. 14, 2020 02:05:37)
Офлайн
0
Спасибо за советы!
у тебя в try занесено и сравнение, и вывод результата на экран, которые никакого отношения к этому try не имеют. Это нарушение модульностиСогласен. Навертел, будь здоров. Впервые пробовал исключения.
Так ещё и try есть не во всех языках программирования. И в питоне тоже try работает медленнее, чем if, поэтому его избегают довольно частоНасколько скорость обработки try критична? Мне показался этот вариант обработки более универсальным. Да и везде пишут (про забор, на котором много чего написано, я помню) отработку исключений связкой try…except.
Офлайн
857
SabachНу, вот на примере деления двух чисел с проверкой деления на ноль можно увидеть, как растёт стек из-за оператора try. Ему нужно больше запоминать в стеке.
Насколько скорость обработки try критична?
>>> def f1(): ... a, b = 1, 0 ... c = None ... try: ... c = a / b ... except ZeroDivisionError: ... print('error') ... print(c) ... >>> def f2(): ... a, b = 1, 0 ... c = None ... if b != 0: ... c = a / b ... else: ... print ('error') ... print(c) ... >>> import dis >>> >>> dis.dis(f1) 2 0 LOAD_CONST 4 ((1, 0)) 2 UNPACK_SEQUENCE 2 4 STORE_FAST 0 (a) 6 STORE_FAST 1 (b) 3 8 LOAD_CONST 0 (None) 10 STORE_FAST 2 (c) 4 12 SETUP_EXCEPT 12 (to 26) 5 14 LOAD_FAST 0 (a) 16 LOAD_FAST 1 (b) 18 BINARY_TRUE_DIVIDE 20 STORE_FAST 2 (c) 22 POP_BLOCK 24 JUMP_FORWARD 28 (to 54) 6 >> 26 DUP_TOP 28 LOAD_GLOBAL 0 (ZeroDivisionError) 30 COMPARE_OP 10 (exception match) 32 POP_JUMP_IF_FALSE 52 34 POP_TOP 36 POP_TOP 38 POP_TOP 7 40 LOAD_GLOBAL 1 (print) 42 LOAD_CONST 3 ('error') 44 CALL_FUNCTION 1 46 POP_TOP 48 POP_EXCEPT 50 JUMP_FORWARD 2 (to 54) >> 52 END_FINALLY 8 >> 54 LOAD_GLOBAL 1 (print) 56 LOAD_FAST 2 (c) 58 CALL_FUNCTION 1 60 POP_TOP 62 LOAD_CONST 0 (None) 64 RETURN_VALUE >>> >>> dis.dis(f2) 2 0 LOAD_CONST 4 ((1, 0)) 2 UNPACK_SEQUENCE 2 4 STORE_FAST 0 (a) 6 STORE_FAST 1 (b) 3 8 LOAD_CONST 0 (None) 10 STORE_FAST 2 (c) 4 12 LOAD_FAST 1 (b) 14 LOAD_CONST 2 (0) 16 COMPARE_OP 3 (!=) 18 POP_JUMP_IF_FALSE 30 5 20 LOAD_FAST 0 (a) 22 LOAD_FAST 1 (b) 24 BINARY_TRUE_DIVIDE 26 STORE_FAST 2 (c) 28 JUMP_FORWARD 8 (to 38) 7 >> 30 LOAD_GLOBAL 0 (print) 32 LOAD_CONST 3 ('error') 34 CALL_FUNCTION 1 36 POP_TOP 8 >> 38 LOAD_GLOBAL 0 (print) 40 LOAD_FAST 2 (c) 42 CALL_FUNCTION 1 44 POP_TOP 46 LOAD_CONST 0 (None) 48 RETURN_VALUE >>> >>> print(dis.code_info(f1)) Name: f1 Filename: <stdin> Argument count: 0 Kw-only arguments: 0 Number of locals: 3 Stack size: 11 Flags: OPTIMIZED, NEWLOCALS, NOFREE Constants: 0: None 1: 1 2: 0 3: 'error' 4: (1, 0) Names: 0: ZeroDivisionError 1: print Variable names: 0: a 1: b 2: c >>> >>> print(dis.code_info(f2)) Name: f2 Filename: <stdin> Argument count: 0 Kw-only arguments: 0 Number of locals: 3 Stack size: 2 Flags: OPTIMIZED, NEWLOCALS, NOFREE Constants: 0: None 1: 1 2: 0 3: 'error' 4: (1, 0) Names: 0: print Variable names: 0: a 1: b 2: c >>>
SabachВообще ввод проверяется регулярными выражениями. Это модуль re.
Про строковые методы (isalnum, isalpha, isdecimal, isdigit, isidentifier, isnumeric) ранее не слышал.
>>> import re >>> >>> while True: ... s = input('Введите число:\n') ... if re.search(r'^(0|[1-9]\d*)$', s) is None: ... print('Это не число "{}"'.format(s)) ... continue ... n = int(s) ... print('Число {}'.format(n)) ... Введите число: abc Это не число "abc" Введите число: 1a Это не число "1a" Введите число: 000 Это не число "000" Введите число: 00 Это не число "00" Введите число: 123 Число 123 Введите число: 0 Число 0 Введите число: 00 Это не число "00" Введите число: 00 1 Это не число "00 1" Введите число: 001 Это не число "001" Введите число: 01 Это не число "01" Введите число: 111 Число 111 Введите число: Traceback (most recent call last): File "<stdin>", line 2, in <module> EOFError >>>
Отредактировано py.user.next (Авг. 15, 2020 03:20:37)
Офлайн