Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

Python для новичков » Помощь лабораторная работа  » Дек. 16, 2019 12:40:56

В этом задании необходимо реализовать класс Robot, в котором будут два поля x и y, что будут означать его координаты на плоскости. Этот класс должен содержать конструктор и по крайней мере два метода:

move (self, direction), где direction это символьная строка, которая может принимать одно из четырех значений: left, right, up, down; этот метод в зависимости от значения direction имеет сместить работа на одну позицию влево, вправо, вверх или вниз (то есть изменить значения полей x и y соответствующим образом)

format_position (self), что должен вернуть строку с координатами работа в формате (x, y)

Кроме этого, необходимо написать отдельную функцию distance_to_origin (robot), что вычисляет евклидову расстояние от робота до начала координат.

На входе будет даваться исходное положение работа и список движений.

Сначала необходимо считать эту информацию и создать объект класса Robot с заданными координатами

После этого необходимо сделать серию указанных движений и после каждого из них печатать положения работа (используя format_position) и расстояние до начала координат.

Важное замечание: для выполнения этой задачи необходимо использовать именно классы, методы и функции!

Input Format

Первая строка - положение работа: два целых или десятичных числа, разделенных пробелом

Вторая строка - список слов, означающих движения робота (left, right, up, down). Слова разделены пробелом.

Constraints

Количество движений может быть от 1 до 100

Output Format

После каждого движения нужно распечатать на отдельных строках положения работа (используя метод format_position) и расстояние до начала координат.

Все числа должны быть выведены с точностью “одна цифра после запятой”.

Sample Input 0

1.0 2.0 left left up up right up right down

Sample Output 0

(0.0, 2.0) 2.0 (-1.0, 2.0) 2.2 (-1.0, 3.0) 3.2 (-1.0, 4.0) 4.1 (0.0, 4.0) 4.0 (0.0, 5.0) 5.0 (1.0, 5.0) 5.1 (1.0, 4.0) 4.1

Центр помощи » Помощь с лабораторной работой » Дек. 15, 2019 23:12:47

1) Дан массив целых положительных чисел. Найти произведение только тех чисел, которые больше заданного числа М. Если таких нет, то выдать сообщение об этом.

2) Задан двумерный массив А из 8-и строк и 3-х столбцов. Составить программу, которая подсчитывает общее число неотрицательных элементов в массиве. Затем организовать формирование нового массива В, в котором значения элементов исходного массива заменить на противоположные по знаку.

Центр помощи » одномерный и двумерный массив » Дек. 11, 2019 16:18:55

1)Дана массив чисел, среди которых имеется один нуль. Вывести на печать все числа включительно до нуля.

2)Задан двумерный массив С из 6-и строк и 3-х столбцов. Составить программу, которая подсчитывает сумму всех элементов массива. Затем организовать формирование нового массива С, в котором элементы, лежащие не на главной диагонали, равны 1, а остальные элементы равны соответствующим элементам исходного массива С Вычислить произведение всех элементов нового массива.

Python для новичков » Даны действительные числа b1,…, b15 . В действительной матрице » Дек. 10, 2019 14:44:35

Помогите исправить и дорешать задачу на питоне 3.8, Windows. Что в ней не так? Даны действительные числа b1,…, b15 . В действительной матрице , i=1,…,17; j=1,…,10 первая и последняя строки заполнены нулями: a1,1 = a1,2 = … = a1,10 = a17,1 = a17,2 = … = a17,10 =0 . Элементы a2,1 , a3,1 , … a16,1 первого столбца соответственно равны b1,…, b15 . Известно, что при 2≤i≤16 , 2≤j≤10 имеет место ai,j = 0.5⁢ ( a i+1,j-1 + a i-1,j-1 ) . Требуется определить a2,10 , a3,10 , … , a16,10

matrix = list()
matrix.append()
for i in range(15):
line = list()
line.append(int(input("Введите b: ")))
matrix.append(line)
matrix.append()
for i in range(1, 16):
for j in range(1, 10):
matrix.append(0.5 * (matrix + matrix))
print(“Последний столбец:”)
for i in range(1,16):
print(matrix)

Python для новичков » Кратчайший путь в графе » Дек. 8, 2019 14:48:12

Добрый вечер, есть код, но его надо доработать. Не понимаю как и что. Задание:
строка ввода # 1: n - целое число, показывающее, сколько путей у нас будет на графике

строка ввода № 2: первые две соединенные вершины

строка ввода № 3: еще две соединенные вершины



строка ввода # n + 1: последние подключенные вершины

строка ввода # n + 2: вершина, чтобы начать и закончить движение

Программа выводит кратчайший путь. Если существует более 1 пути одинакового размера, проргам выводится по алфавиту больше. Например, если возможными путями являются A B D и A C D, берется первый (A B D)

graph = {'A': , ‘B’: , ‘C’: , ‘D’: , ‘E’: , ‘F’: , ‘J’:, ‘G’:, ‘H’:,'I':}
def find_shortest_path(graph, start, end, path:
path = path +
if start == end:
return path
if not start in graph:
return None
shortest = None
for node in graph:
if node not in path:
newpath = find_shortest_path(graph, node, end, path)
if newpath:
if not shortest or len(newpath) < len(shortest):
shortest = newpath
return shortest

Пример:
input:

8
A B
A C
B C
B D
C D
D C
E F
F C
A D

output:

A B D

Python для новичков » Histogram - For, String operations, lists » Дек. 8, 2019 14:47:21

Добрый день, нужно написать программу, при вводе чисел вряд отделяя их пробелами, то выводил символ # столько раз чему равно число. Числа не могут быть негативные

Input
1 4 2 10

Output
#
####
##
##########

Input
5 0 7 1 2 11
#####

#######
#
##
###########

a=input()
for i in a.split(' ‘):
print(’#' * int(i))


Программа работает, но когда закидываю на проверку ставит по 0 и выдает такую ошибку:
The compilation or preparation of execution has failed

Python для новичков » Действительно ли число находится в заданном диапазоне » Дек. 8, 2019 14:45:37

Добрый день,
нужно написать программу, которая проверяет действительно ли число находится в заданном диапазоне.
Programm name: solution.py
Function name: inrange
Number of introductory arguments: 3
Introductory argument type: int, int, int
Number of output devices: 1
Output type: bool

Пример:
import solution
solution.range(5,2,10)
True


import solution
solution.range(8,2,7)
False

Проверка была такая еще:
Input: -4683,-6307,132614. Answer True was excpected, but False got
Input: -7832,-3890,44395. Answer False was excpected, but True got
Самый простой код, а как сделать с отрицательными не понимаю

def inrange(a, n, b):
assert a <= b
return a <= n <= b

Python для новичков » pyqt5 для python » Дек. 7, 2019 14:15:00

Подскажите, пожалуйста, как решить проблему:
from PyQt5 import QtCore, QtGui, QtWidgets
ImportError: DLL load failed: Не найдена указанная процедура.
>>>

Python для новичков » Поправить скрипт » Дек. 5, 2019 13:16:54

Прошу поправить скрипт.
При исполнении скрипта plugin.py — он неправильно выдаёт:
 #NAME Iptv_408.m3u
#SERVICE 1:0:1:1:0:0:0:0:0:0:http%3a//127.0.0.1%3a88/hls%3a//http%3a//109.248.236.41%3a4433/udp/238.1.1.76%3a1234
#DESCRIPTION Матч Премьер
#SERVICE 1:0:1:1:0:0:0:0:0:0:http%3a//127.0.0.1%3a88/hls%3a//http%3a//rmtvlive-lh.akamaihd.net/i/rmtv_1@154306/index_1000_av-b.m3u8?sd=10&amp;rebase=on
#DESCRIPTION Real Madrid HD
#SERVICE 1:0:1:1:0:0:0:0:0:0:http%3a//127.0.0.1%3a88/hls%3a//http%3a//cdn-01.bonus-tv.ru%3a8080/vmesterf/tracks-v1a1/index.m3u8
#DESCRIPTION Вместе РФ HD
===============================================
А нужно правильно так:
 #NAME IPTV
#SERVICE 4097:0:1:2:0:0:0:0:0:0:http%3a//109.248.236.41%3a4433/udp/238.1.1.76%3a1234:Матч Премьер
#DESCRIPTION Матч Премьер
#SERVICE 4097:0:1:4:0:0:0:0:0:0:http%3a//rmtvlive-lh.akamaihd.net/i/rmtv_1@154306/index_1000_av-b.m3u8?sd=10&amp;amp;rebase=on:Real Madrid HD
#DESCRIPTION Real Madrid HD
#SERVICE 4097:0:1:6:0:0:0:0:0:0:http%3a//cdn-01.bonus-tv.ru%3a8080/vmesterf/tracks-v1a1/index.m3u8:Вместе РФ HD
#DESCRIPTION Вместе РФ HD
===============================================
Четвёртая цифра в строке — #SERVICE 4097:0:1:2 — всё время должна увеличивается
#SERVICE 4097:0:1:4
#SERVICE 4097:0:1:6 и тд.

Python для новичков » Можете подсказать как написать рекурсию, чтобы построить фрактал? » Дек. 4, 2019 09:56:00

привет. можете подсказать как написать рекурсию, чтобы построить фрактал Аксиома: F+F+F+F
Правило: F → FF+F++F+F
Угол: 90
картинка похожа только там не пополам а на треть делится сторона



import turtle
def draw(1,n):
if n==0:
turtle.forward(1)
turtle.forward(1)
turtle.right(90)
turtle.forward(1)
turtle.right(90)
turtle.forward(1)

return

else
тут должна быть описана функция, но я не пойму как ее описать
x=n/3
for
i in range(n)

turtle.forward(x)
turtle.forward(x)
turtle.right(90)
turtle.forward(x)
turtle.right(90)

turtle.right(90)
turtle.forward(x)
turtle.right(90)
turtle.forward(x)

draw(1,5)

Python для новичков » float расставить по убыванию » Дек. 3, 2019 22:45:45

Помогите пожалуйста с заданием:

В этом задании необходимо написать программу, которая определяет три лучших результата в новом олимпийском виде спорта “Метание ноутбука”.
Программа принимает float список чисел, отделенных пробелом с одним знаком после запятой. Минимальной кол-во чисел - 3.
Программа выводит на экран 3 лучших результата в порядке убывания.


Python для новичков » открыть 2 сайта в питоне » Дек. 3, 2019 00:56:57

Добрый вечер.
Помогите пожалуйста решить задание:

Есть сайт, который разделен на несколько страниц. http://www.numbers.lv/RTU/files/
Питон должен сосчитать сумму чисел с 0 и 1 страницы.



Когда есть программа, в инпут нужно ввести 0 и 1 - открыть 0 и 1 первую страницу сайта и оутпут будет 22.39 - сумма с 0 и 1 страницы.

Program takes from keyboard numbers 0 and 1. Program reads all data from pages http://www.numbers.lv/RTU/files/page0.html and from http://www.numbers.lv/RTU/files/page1.html
Program sums up all data in all pages. The full precision result would be 22.393292731854853, but rounded number is 22.39.

Спасибо.

Python для новичков » считать данные с сайта » Дек. 3, 2019 00:48:31

Добрый вечер!
Не могли бы помочь решить задание:

1)Progam take from keyboard text filename (i.e. transport1.txt)
2)Program downloads text data from http://www.numbers.lv/RTU/transport1.txt
3)Text contains following data: n lines with an integer number in every line
4)Program sums up all numbers and prints result at the screen
Насколько я поняла со слов преподавателя, мне нужно, что бы написав программу, вводишь в input transport1.txt, а питон в output выдаёт 60 - сумму чисел с сайта.





У меня вышла программа, которая открывает текстовой файл, а не сайт, но сумму считает верно:

r=input()
with open (r) as f:
data = f.readlines()
sum = 0
for line in data:
sum += int(line.strip())

print(sum)

Заранее спасибо!

Python для новичков » Вопрос про cfscrape » Ноя. 29, 2019 14:28:19

Всем привет, пытаюсь парсить, но для начала необходимо пройти защиту CloudFlare, но скрипт попросту ничего не делает.

 import cfscrape
from bs4 import BeautifulSoup
uri = "https://nvuti.one"
scraper = cfscrape.create_scraper()
html_content = scraper.get(uri).content
soup = BeautifulSoup(html_content,"html.parser")
htmlstr = soup.find("h4",{"class":"card-title"}).text
print(htmlstr)

PS Сайты без CloudFlare норм парсит

Python для новичков » В каждой задаче понимаю что делать, но не знаю как правильно это написать, чтобы читало без ошибок, буду благодарен за помощь » Ноя. 27, 2019 11:55:34

1.Вера купила себе ожерелье, состоящее из n бусин черного и золотистого цвета, нанизанных на цепочку. Цепочка запаяна в замкнутую окружность.

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

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

Формат ввода
В первой строке входных данных содержатся два натуральных числа n и k, не превышающие 106 - длина купленного ожерелья и требуемая длина браслета.

Во второй строке даны n чисел, разделенных одним пробелом, каждое из которых равно 0 или 1. i-ое число в этой последовательности обозначает цвет i-ой бусины в порядке обхода по часовой стрелке: 0 — черный, а 1 — золотистый, соответственно.

Формат вывода
В выходной файл выведите максимальное количество подруг, которым Вера сможет сделать браслеты

2.Вася составлял числовой пароль для компьютера и на всякий случай решил оставить себе подсказку. В качестве подсказки Вася записал число, равное произведению цифр в придуманном пароле.

Через некоторое время Вася задумался, что если он действительно забудет пароль, то не сможет гарантированно его восстановить, зная только произведение его цифр. Поэтому он для себя сформулировал дополнительное условие – сделать пароль наименьшим возможным числом, чтобы произведение цифр давало значение, записанное в подсказке. Но при этом длина пароля не может быть меньше двух цифр.

Однако из требований безопасности пароль требуется менять каждый месяц, а Васе очень нравится способ создания пароля с подсказкой, который он придумал, и он собирается его придерживаться в дальнейшем. Поэтому он стал сначала придумывать число-подсказку, а затем по нему получать новый пароль. Но оказалось, что не для любого числа-подсказки можно придумать пароль так, чтобы произведение цифр пароля было равно подсказке.

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

Формат ввода
Вводится целое число N (1 ≤ N ≤ 2 ⋅ 106).

Формат вывода
Выведите на экран одно число M ≥ 10 (которое является будущим паролем Васи) или фразу «No solution», если для введенного числа-подсказки создание пароля невозможно

3.Гермиона, освоив все существующие заклинания, решила начать придумывать собственные. После многочисленных попыток она обнаружила, что магическую силу имеют только слова, в которых не расположены более двух гласных букв подряд и нет больше двух согласных букв, стоящих рядом.

Например, слова magic, letter, feeling – имеют магическую силу, а слова aaa, filth, aggressor – нет.

Гермиона решила, что если ей встретится немагическое слово, то она просто добавит одну или несколько букв так, чтобы слово стало магическим.

Напишите программу, которая поможет Гермионе вычислить, какое минимальное количество букв ей нужно добавить в слово, чтобы оно получило магическую силу.

Формат ввода
Вводится слово, состоящее только из маленьких латинских букв. Длина слова не превышает 255 символов.

Формат вывода
Выведите минимальное число букв, которые нужно добавить в это слово, чтобы оно стало обладать магической силой.

4.Марина работает на ресепшн в большом отеле.

Всего в отеле N номеров, которые расположены вдоль длинного коридора и пронумерованы по порядку слева направо от 1 до N. Вход и ресепшн расположены между номерами m и m+1. Если стойка ресепшн и вход расположены в начале коридора до всех номеров, то m=0, если в конце, после всех номеров, то m=N. В номер i можно поселить группу из ai человек.

В отель приезжают k групп туристов, каждая хочет заселиться в один номер. В j-й группе bj человек. Марина выбирает подходящий номер по следующему алгоритму. Если есть свободный номер ровно такой вместимости, сколько человек в группе, то выдается он. Если нет, но есть больше, выдается этот номер. В каждом из случаев выдается номер, расположенный ближе ко входу и стойке ресепшн. Если есть два номера, расположенных на равном расстоянии, то Марина выбирает номер, находящийся левее. Если подходящих номеров нет, группа туристов уезжает в другой отель.

Выведите последовательность номеров, куда заселяли каждую приезжающую группу туристов. Если для группы туристов не нашлось походящего номера, то для нее следует вывести -1.

Формат ввода
В первой строке даны три целых числа n, k и m – число номеров в отеле, число приезжавших групп туристов и значение номера, после которого расположен вход и ресепшн (1 ≤ n, k ≤ 1000, 0 ≤ m ≤ n). Если m = 0, то вход находится перед первым номером.

Во второй строке через пробел даны n целых чисел ai – вместительности номеров отеля (1 ≤ ai ≤ 1000).

В третьей строке через пробел вводятся k целых чисел bj – число заехавших в j-ю очередь туристов (1 ≤ bj ≤ 1000).

Формат вывода
Выведите через пробел k чисел cj – значение номеров отеля, выбранных для туристов, заехавших j-ми по очереди. Если для туристов не нашлось подходящего номера в отеле, будем считать, что cj=-1.

Python для новичков » Задача по алгоритму Greedy - помогите, pls, найти ошибку... » Ноя. 25, 2019 20:42:49

Условие:
Greedy
Little Johnny eats fruits from his grandma's basket. There are fruits with different mass in this basket. Little Johnny can pick up not more than K ounces. Each fruit weights not more than K ounces. At a time, he chooses a few of the most heavy fruits, which he can pick up simultaneously, bites a half of each of them and puts what is left back into the basket. If the fruit weights odd number of ounces, he bites off its half, rounded up to the nearest whole number. He completely eats those fruits, which weight 1 ounce.
Find the number of attempts Little Johnny needs in order to eat all fruits in the basket.

Write your heap storage class, which implements priority queue.

Input data format. Integer n – the number of fruits, and the line with integer masses of fruits separated by space. Then in the separate line - the “lifting capacity”.
Output data format. A non-negative number – the number of attempts to the basket.

Мое решение:
  
import heapq
 
 
class heap_storage(list):
    def assign(self, array):
        super().extend(-v for v in array)
        heapq.heapify(self)
 
    def heappop(self):
        heapq.heappop(self)
 
    def heappush(self, v):
        heapq.heappush(self, -v)
 
    def get_max(self):
        return -self[0]
 
 
_ = input()
b = heap_storage()
b.assign(map(int, input().split()))
k = int(input())
 
z = 0
while b:
    r = 0
    while b:
        v = b.get_max()
        r += v
        if r > k:
            break
        b.heappop()
        if v > 1:
            b.heappush(v >> 1)
    z += 1
    
print(z)

Решение соответствует Тесту #8:
Вход:
20
2 10 23 23 2 18 19 8 14 19 14 13 20 1 23 6 5 1 3 8
23
Ожидаемый ответ:
22

Решение соответствует Тесту #5:
Вход:
10
1 10 2 9 3 8 4 7 5 6
10
Ожидаемый ответ:
11

Но не проходит Тест #2, входные данные которого мне, увы, не известны.
PS. “Голову сломал”…

Уже подсказали… Всем спасибо.
Исправленное решение:
  
import heapq
  
  
class heap_storage(list):
    def assign(self, array):
        super().extend(-v for v in array)
        heapq.heapify(self)
  
    def heappop(self):
        heapq.heappop(self)
  
    def heappush(self, v):
        heapq.heappush(self, -v)
  
    def get_max(self):
        return -self[0]
  
  
_ = input()
b = heap_storage()
b.assign(map(int, input().split()))
k = int(input())
 
z = 0
while b:
    r = 0
    a = []
    while b:
        v = b.get_max()
        r += v
        if r > k:
            break
        b.heappop()
        if v > 1:
            a.append(v >> 1)
    z += 1
    for v in a:
        b.heappush(v)
    
print(z)

Центр помощи » Задача по циклической структуре » Ноя. 24, 2019 10:20:00

найти с заданной точностью сумму элементов убывающей последовательности,
т.е. вычислять сумму до тех пор, пока n-й элемент последовательности не станет
меньше заданной точности. Точность вводится с клавиатуры. Вывести на экран сумму
элементов, значение n-го элемента и количество элементов, необходимых для подсчета
суммы с заданной точностью:

Python для экспертов » Не сортирует результат запроса Pandas » Ноя. 23, 2019 18:39:06

Уважаемые форумчане, прошу подсказки по вопросу:
Изучаю запросы Pandas.
Eсть датафрейм
item_name( название продукта),order_id - id заказа, quantity - количество продукта в заказе,item_price1 - цена продукта.
Требуется вывести сколько заказано самого дорогого продукта.
Составил такой запрос:
df.groupby('item_name')['item_price1','quantity'].agg(['max','count']).sort_values(by=['max','count'], ascending=False).head(10)

Если убрать сортировку, запрос работает как надо, если добавить .sort_values(by=, ascending=False).head(10) или .sort_values(by='max', ascending=False).head(10) - пишет ошибку key-error ‘max’.
Подскажите пожалуйста как сделать сортировку, чтобы запрос работал?

Центр помощи » Шифр Цезаря  » Ноя. 21, 2019 18:52:00

Шифр - это тип секретного кода, где вы меняете буквы так, чтобы никто не мог прочитать ваше сообщение.

Вы будете использовать один из самых старых и самых известных шифров, шифр Цезаря, который назван в честь Юлия Цезаря.

Как это работает?

Давайте начнем с шифрования буквы “а”. Для этого мы можем нарисовать алфавит по кругу, вот так:



Чтобы сделать секретное зашифрованное письмо из обычного, вам нужно иметь секретный ключ. Давайте использовать число 3 в качестве ключа (но вы можете использовать любое число, которое вам нравится).

 key = 3
 
def wub():
    def choice():
        choice = input("Do you wish to Encrypt of Decrypt?")
        choice = choice.lower()
        if choice == "e" or "encrypt":
            return choice
        elif choice == "d" or "decrypt":
            return choice
        else:
            print("Invalid response, please try again.")
            choice()
 
    def message():
        user = input("Enter your message: ")
        return user
 
    def waffle(choice, message, key):
        translated = ""
        if choice == "e" or "encrypt":
            for character in message:
                num = ord(character)
                num += key
                translated += chr(num)
 
                derek = open('Encrypted.txt', 'w')
                derek.write(translated)
            derek.close()
            return translated
        else:
            for character in message:
                num = ord(character)
                num -= key
                translated += chr(num)
            return translated
 
    choice = choice() #Runs function for encrypt/decrypt selection. Saves choice made.
    message = message() #Run function for user to enter message. Saves message.
    final = waffle(choice, message, key) #Runs function to translate message, using the choice, message and key variables)
    print("\n Operation complete~    print(final)
 
wub()
Примерно так но мне кажется есть ошибки можете исправить плиз

Заранее спасибо

Центр помощи » Игра "Лев и гиена"  » Ноя. 21, 2019 18:47:25

Всем привет !
Задача была такая у нас )
Создайте программу, которая будет играть в игру “Лев и гиена” с пользователем.

Игра работает следующим образом:

Компьютер случайным образом генерирует 4-значное число. Попросите пользователя угадать 4-значное число. Для каждой цифры, которую пользователь угадал правильно в правильном месте, у них есть “лев”. За каждую цифру, которую пользователь угадал правильно, в неправильном месте стоит “гиена”.“Каждый раз, когда пользователь делает предположение, скажите ему, сколько” коров” и “быков” у них есть. Как только пользователь угадает правильный номер, игра окончена.

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

Допустим, число, сгенерированное компьютером, равно 1038. Пример взаимодействия может выглядеть так:


Примеер : Welcome to the Cows and Bulls Game!
Enter a number:
>>> 1234
2 cows, 0 bulls
>>> 1256
1 cow, 1 bull

>>> 1038
Congratulations! You guessed the number in 5 attempts.
 import random
  
def num_checker(guess_num,answer):
    guess_num=list(str(guess_num))
    ans=list(str(answer))
    cow=0
    bull=0
    for a in range(0,4):
        if guess_num[a]==ans[a]:
            bull+=1
            ans[a]=10
            guess_num[a]=20
  
    for a in range(0,4):
        for b in range (0,4):
            if guess_num[a]==ans[b]:
                cow+=1
                ans[b]=30
                break
  
    final=[bull,cow]
    return final
  
#..................................................
ans=random.randrange(1000,10000)
print("this is the program to gues a four digit number")
  
while True:
    print("just for reference answer is:",ans)
    num_typed=int(input("please guess a four digit the number?\n "))
    reply=num_checker(num_typed,ans)
    if reply==[4,0]:
        print("correct")
        print(reply[0],"bull",reply[1],"cows and the ans is",ans)
        break
    else:
        print(reply[0],"bulls",reply[1],"cows")
Мой первый вариант

 import random
   
def num_checker(guess, answer):
    bulls = sum(guess[i] == answer[i] for i in range(len(answer)))
    cows = sum(guess[i] in answer and guess[i] != answer[i] for i in range(len(answer)))
    return bulls, cows
 
def get_valid_random(size):
    digits = ""
    while len(digits) < size:
        digit = random.choice("0123456789")
        if not digit in digits:
            digits += digit
    return digits
         
answer = get_valid_random(4)
 
while True:
    guess = input("Enter number with four different digits: ")
    bulls, cows = num_checker(guess, answer)
    if bulls == 4:
        print("Correct")
        break
    else:
        print(f"You got {bulls} bulls and {cows} cows")
Второй вариант плиз пацаны который из них правильнее ? Если есть ошибки то можете исправить ))

Заранее спасибо