Задать вопрос
@ffff567

Что можно улучшить или оптимизировать в коде, чтобы он не был таким длинным?

Игра в русскую рулетку. В пистолет вставлено 5 патронов: 4 холостых и 1 боевой. Если вы будете стрелять в себя, то на следующем ходе можете снова сделать выбор, в кого стрелять, но если стреляете в соперника, и не убиваете его, то ход переходит к нему. Для соперника действуют такие же правила.
Так вот, какая вероятность выиграть, в кого стрелять?
Результат:
В себя — 47 % выиграть
В соперника — 52 % выиграть

import itertools

x = list(map(list, set(itertools.permutations([0, 1, 0, 1, 1]))))

for gg in range(2):
    победа=0
    поражение=0
    z=set()
    for _ in x:
        for num, i in enumerate(_):
            if num==0:          
                if i==1:
                    if gg==0:
                        поражение+=1
                    elif gg==1:
                        победа+=1
                else:
                    if gg==0: z.add((x.index(_),"всебя"))
                    elif gg==1: z.add((x.index(_),"внего"))
            else:
                for k in z.copy():
                    z.remove(k)
                    if k[-1]=='всебя':
                        if i==1:
                            if num==_.count(0):
                                победа+=1
                            else:       
                                победа+=1
                                поражение+=1
                        else:
                            xc=list(k)
                            z.add(tuple(xc+["внего"]))
                            z.add(tuple(xc+["всебя"]))
                    elif k[-1]=='внего':
                        if i==1:
                            if num==_.count(0):
                                поражение+=1
                            else: 
                                победа+=1
                                поражение+=1
                        else:
                            xc=list(k)
                            z.add(tuple(xc+["внего"]))
                            z.add(tuple(xc+["всебя"]))
    if gg==0:
        print("В себя -", str(int(победа/(победа+поражение)*100))+"% выиграть")
    else:
        print("В соперника -", str(int(победа/(победа+поражение)*100))+"% выиграть")
  • Вопрос задан
  • 437 просмотров
Подписаться 2 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 4
@Everything_is_bad
Надоел каждый раз прибегать с такими вопросами (проблема что наша помощь не помогает, ты не учишься, каждый раз подобный треш выдаешь, либо опять тут проблема не в питоне, а в алгоритмах), сходи уже к LLM, они нормально могут предложить вариант, даже на такой кривой код как у тебя.
Ответ написан
Комментировать
Elezthem
@Elezthem
17 лет, плохое зрение...
Через DeepSeek
Ответ написан
Комментировать
@The_mazo
Сделай все через библиотеку random
Просто рандомишь число 100 и если от 1 до 50
Не холостой а если от 51 до 100 то холостой так получится строк 15 всего данная механика (если что то написал не так исправьте)
Ответ написан
@RexcodingAI
А зачем такой короткий код оптимизировать? С какой целью? А вероятность событий вы сами видите. Судя по статистике (результат: В себя - 47%, в соперника - 52% выиграть.), частота вероятности "гуляет" около значения 0.5. Значит, вероятность точно равна 0.5! Вообще, все парные события (попал - не попал, промах - не промах, осечка - не осечка, орёл - решка и т.д., и т.п.) имеют вероятность 0.5.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы