С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/225: Рейтинг темы: голосов - 225, средняя оценка - 4.94
2 / 2 / 2
Регистрация: 03.11.2013
Сообщений: 41

Быки и коровы

03.12.2014, 09:05. Показов 42709. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят нужна помощь в написании програмы-игры Быки и коровы. Смысл в том что програма создает 4 значное число (цифры не должны повторяться), а пользователь должен его отгадать. Каждый раз когда пользователь вводит число, програма должна сравнить число загаданое програмой и введенное пользователем. Если в числе присутствует цифра но не в той же позиции тогда это защитывается как корова( например 1234 и 5671), если же цифра совпала и находится в той же позиции ( например 1234 и 1567) тогда это бык. Задача угадать все цифры и узнать число то есть 4 быка.
Я пока написал такой вот код, первая функция загадывает число, вроде все правильно.
Вторая функция просит пользователя ввести 4 значное число. Обе функции сохраняют числа в виде списка. Думал может сбрасывать значения функций в текстовый файл чтобы потом легче было с ними работать? Теперь нужно их сравнить и сообщить пользователю о результате (сколько быков и сколько коров). Если 4 быка игра заканчивается.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import random
def random_number():
    number = [0,0,0,0]
    digit1 = random.randint(1,9)
    digit2 = random.randint(0,9)
    digit3 = random.randint(0,9)
    digit4 = random.randint(1,9)
    if digit1 != digit2 and digit1 != digit3 and digit1 != digit4 and digit2 != digit3 and digit2 != digit4 and digit3 != digit4:
        
        number[0] = digit1
        number[1] = digit2
        number[2] = digit3
        number[3] = digit4
        print(number)
        return number
    else:
        random_number()
 
def user_number():
    user_input = input("Please enter 4 digits number to play ")
    usernumber = [0,0,0,0]
    if len(user_input) == 4 and user_input.isdigit():
       
        usernumber[0] = user_input[0]
        usernumber[1] = user_input[1]
        usernumber[2] = user_input[2]
        usernumber[3] = user_input[3]
        print(usernumber)
        return usernumber
        
    else:
        print("****Please enter valid 4 digits number*****")
        user_number()
 
 
random_number()
user_number()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2014, 09:05
Ответы с готовыми решениями:

Коровы и быки. Секретный уровень
Правила игры «коровы и быки» следующие: компьютер загадывает четырёхзначное число с неповторяющимися цифрами, а игрок пытается его угадать...

Коровы и быки. Секретный уровень
Правила игры «коровы и быки» следующие: компьютер загадывает четырёхзначное число с неповторяющимися цифрами, а игрок пытается его угадать...

Коровы и быки. Секретный уровень
Правила игры «коровы и быки» следующие: компьютер загадывает четырёхзначное число с неповторяющимися цифрами, а игрок пытается его угадать...

3
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.12.2014, 09:52
Цитата Сообщение от galexik81 Посмотреть сообщение
Я пока написал такой вот код, первая функция загадывает число, вроде все правильно.
Реализация неоптимальна, т.к. невозможно заранее сказать сколько раз потребуется генерация четырех случайных чисел. Еще и рекурсивная, что тут явно не нужно.
Берем список цифр от 0 до 9, перемешиваем (random.shuffle), используем первые 4 цифры. Гарантировано один проход.
Цитата Сообщение от galexik81 Посмотреть сообщение
умал может сбрасывать значения функций в текстовый файл чтобы потом легче было с ними работать?
В чем упрощение? Файл нужно открывать, записывать значение, затем опять читать... К чему столко действий? Числа уже есть в памяти - можно работать.
Опять же, функция user_input рекурсивна без надобности.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
05.12.2014, 02:19
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env perl3
 
#
# Bulls and Cows
#
 
import random
 
digits = [ x for x in range(10) ]
random.shuffle(digits)
conceived = digits[:4]
if conceived[0] == 0 :
    conceived[0] = conceived[1]
    conceived[1] = 0
 
while True:
    guessed = int(input("Number: "))
    if not 999 < guessed < 10000 :
        print("Need number from 1000 to 9999")
        continue
    testing = [ int(x) for x in str(guessed) ]
    if testing == conceived :
        print("Oh yeah! You win!")
        print("It was", conceived)
        break
    for n, d in enumerate(testing) :
        if conceived[n] == d :
            print("B", end="")
        elif d in conceived :
            print("C", end="")
        else :
            print(d, end="")
    print()
0
1 / 0 / 0
Регистрация: 13.04.2019
Сообщений: 8
01.05.2019, 12:53
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import random
 
 
def generate_answer():
    n = [i for i in range(10)]
    number = []
    for _ in range(4):
        a = n.pop(random.choice(range(len(n))))
        number.append(str(a))
    return ''.join(number)
 
 
def cows_bulls(num, answer):
    cows = 0
    bulls = 0
    for i in range(4):
        if str(num)[i] == str(answer)[i]:
            bulls += 1
        elif num[i] in str(answer):
            cows += 1
    return [bulls, cows]
 
 
def play():
    global answer
    bulls = 0
    print(answer)
    while bulls < 4:
        attempt = input('Введите четырёхзначное число c неповторяющимися цифрами: ')
        bulls, cows = cows_bulls(attempt, answer)
        if bulls >= 2 or cows >= 3 or bulls + cows == 4:
            answer = cheat()
            print(answer)
        bulls, cows = cows_bulls(attempt, answer)
        history.append([attempt, bulls, cows])
        print(cows, 'коровы, ', bulls, 'быка.')
    print('Вы выиграли!')
оптимизирована, есть еще вариант, когда программа меняет число чтобы дольше держаться - ну как и играю на самом деле люди. но в запрос не входило) ладно, вот он.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def cheat():
    error = True
    new_answer = None
    while error:
        new_answer = generate_answer()
        if new_answer == answer:
            error = True
            break
        else:
            if history:
                for i in history:
                    if cows_bulls(i[0], new_answer) != [i[1], i[2]]:
                        error = True
                        break
                    else:
                        error = False
            else:
                error = False
    return new_answer
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.05.2019, 12:53
Помогаю со студенческими работами здесь

Коровы и быки. Секретный уровень
Правила игры «коровы и быки» следующие: компьютер загадывает четырёхзначное число с неповторяющимися цифрами, а игрок пытается его угадать...

Напишите программу, обрабатывающую один раунд игры «Быки и коровы»
Напишите программу, обрабатывающую один раунд игры «Быки и коровы». Пользователь вводит две строки. Гарантируется, что это две строки...

Напишите программу, обрабатывающую один раунд игры «Быки и коровы»
Напишите программу, обрабатывающую один раунд игры «Быки и коровы». Пользователь вводит две строки. Гарантируется, что это две строки...

Как написать оценку хода к "Быки и коровы"?
Я написал почти весь код. Не могу написать только оценку хода. Помогите пожалуйста import random bull=0 cow=0 #Отдел генерации ...

Быки и коровы
Напишите программу, обрабатывающую один раунд игры «Быки и коровы». Пользователь вводит две строки. Гарантируется, что это две строки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru