Python с нуля для криптанов (и не только) № 4 | Практика (часть 1)

preview_player
Показать описание
Прямо сейчас идёт челлендж "с нуля до профита на софте"

в конце видео решается задача 6.6 и там в решение ошибка: если попытаться удалить последний элемент, вылетим с ошибкой "index out of range".
На ошибку указал @facerx и вот правильное решение:
def foo(lst, n):
tmp_lst = []
i = 0
while i меньше len(lst):
if i == n:
i += 1
if i == n - 1:
i += 1
i += 1
print(tmp_lst)

(в коде написал "меньше" так как нельзя использовать угловые скобки)

В течение месяца мы будем изучать python с полного нуля до небольшого проекта (с парсингом)
Так же мой канал в телеграме, в котором я изучаю solidity за 10 дней:

00:34 - Написать функцию, которая будет искать и выводить...
03:30 - Написать функцию, которая будет обменивать местами...
22:50 - Написать функцию, которая будет определять, делится ли число N...
29:03 - Написать функцию, которая будет вычислять и выводить на экран значение выражения...
32:38 - С клавиатуры вводится пять чисел. Для каждого из них вывести...
39:38 - Реализовать набор функций для работы со списком...
Рекомендации по теме
Комментарии
Автор

В пятой задачке не учтен случай, если введенные с клавы числа меньше чем нужная степень
поэтому может некорректно работать
Вот вроде исправил:
def is_it_number_degree(degree):
income = (input("Enter a number:"))
a = income.split()
numbers = [int(i) for i in a]
temp = degree
for i in numbers:
if temp <= i:
while temp <= i:
if i == temp:
print(f"{i}Actually a degree of{degree}")
temp = degree
break
temp *= degree
temp = degree

apfz
Автор

в третьей задаче можно решить еще через целочисленое деление:

n = int(input("введите число: "))


def foo(n):
for i in range(2, 6):
s = n // i
if s * i == n:
print('делится на', int(i))
else:
print('не делится на', int(i))

foo(n)

maestr
Автор

вторая задачка

import random


def some (num):
string = str(num)
a = string[0]
b = string[len(string)-1]
new_string =
print (new_string)


num=random.randint(10,
some(num)

akakkakat
Автор

Решение для 5 задачи, в том числе учитывая 0, 1 и отрицательные цисла

import random


def some (n):
for i in range (5):
x= n[i]
i1 = True
if x == 1:
print ('n', i+1, 'степень тройки')
continue
elif x == 0:
print ('n', i+1, 'не степень тройки')
continue
elif x < 0:
print('n', i + 1, 'не степень тройки')
continue
else:
while i1 == True:
if x % 3 == 0:
x /=3
if x == 1:
print('n', i+1, 'степень тройки')
break
else:
i1 = False
print('n', i + 1, 'не степень тройки')



n = [random.randint (-1, 10) for i in range (5)]
print (n)

some(n)

akakkakat
Автор

Задача со свапом цифр у числа. Сам я не додумал до конца, но gpt подсказал. Можно просто преобразовать число в строку и по индексам откусить нужные части числа, потом сложить их как строку и преобразовать обратно в число.

def men(n):
str_number = str(n)

if len(str_number) == 1:
print(n)
else:
swap = str_number[-1] + str_number[1:-1] + str_number[0]
print(int(swap))

n = int(input("Введите число: "))
men(n)

nikxy_rd
Автор

чисто костыль математика:

def swap_num(num):
c = len(str(num))
b = num // (10 ** (c-1))
d = num % (10 ** (c-1))
e = num % 10
swap = (e * (10 ** (c-1))) + d - e + b
print(swap)

num = int(input('Введите число '))
swap_num(num)

cheemocore
Автор

моё решение третьего. пните если так нельзя или что-то не так:
number=int(input("введите делимое"))
d=int(input("введите делитель"))
def foo(number, d):
if number/d==number//d:
print("делится")
else:
print("не делится")
foo(number, d)

takiewotdela
Автор

моё расширенное решение 5, пните если будут правки:
def foo(a, d, c):
while a!= c and a>c:
a=a/c
d=d+1
if a == c:
print ("является степенью числа", c, "в степени:", d)
elif a<c:
print ("не является степенью числа", c)
for i in range(5):
a=int(input("введите число из которого нужно извлечь корень"))
d=1
c=int(input("введите основание"))
foo(a, d, c)

takiewotdela
Автор

задача 6, 2
def prntlst(lst):
print(lst)


prntlst([1, 2, 3, 4])

stepan_metal
Автор

У решения 2 задачи есть критический баг. Она будет сокращать значение middle до тех пор, пока не встретит число != 0. В общем, если попробовать перевернуть число то в ответ получим 901

Думаю, можно добавить проверку на количество символов в начале через цикл и в конце сверять. При недостаче, добавлять к среднему числу нули в начало

daniilyatsenko
Автор

def swap_numbers_2(n=1234):

razrad = 10 ** (len(str(n)) - 1)
first_num = int(n // razrad)
last_num = n % 10
d = 0
if first_num < last_num:
d = last_num - first_num
n += d * razrad
n -= d
elif first_num > last_num:
d = first_num - last_num
n -= d * razrad
n += d

# print(first_num, last_num)
print(n)


a = 123456
swap_numbers_2(a)

cyrniha