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

Быки и коровы

03.12.2014, 09:05. Показов 42843. Ответов 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,977
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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru