Проблема с операторами if,elif в цикле?

На днях написал игрушку типу русской рулетки:
import time
import random

def tm(x):
    time.sleep(x)

rf = random.randint(1,8)
rn = random.randint(1,7)
rc = random.randint(1,6)

while True:
    ans_1 = str(input('Добро пожаловать в русскую рулетку!\nФлобер(8 патронов),Наган(7) ибо Кольт(6)?\nВыберите револьвер:'))
    if ans_1 == 'Флобер' or 'флобер':
        ans_2_1 = int(input('Введите количеством патронов в барабане(от 1 до 8):'))
        if ans_2_1 == 1:
            print('Барабан крутиться...')
            tm(rf)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 2:
            print('Барабан крутиться...')
            tm(rf)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 3:
            print('Барабан крутиться...')
            tm(rf)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 4:
            print('Барабан крутиться...')
            tm(rf)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 5:
            print('Барабан крутиться...')
            tm(rf)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 6:
            print('Барабан крутиться...')
            tm(rf)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 7:
            print('Барабан крутиться...')
            tm(rf)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 8:
            print('Ну ты же знаешь что с полным барабаном у тебя нет шансов...')
        else:
            print('Некорректное количество патронов')
        break
    elif ans_1 == 'Наган' or 'наган':
        ans_2_2 = int(input('Введите количеством патронов в барабане(от 1 до 7):'))
        if ans_2_2 == 1:
            print('Барабан крутиться...')
            tm(rn)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 2:
            print('Барабан крутиться...')
            tm(rn)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 3:
            print('Барабан крутиться...')
            tm(rn)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 4:
            print('Барабан крутиться...')
            tm(rn)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 5:
            print('Барабан крутиться...')
            tm(rn)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 6:
            print('Барабан крутиться...')
            tm(rn)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 7:
            print('Ну ты же знаешь что с полным барабаном у тебя нет шансов...')
        else:
                print('Некорректное количество патронов')
        break
    elif ans_1 == 'Кольт' or 'кольт':
        ans_2_3 = (input('Введите количеством патронов в барабане(от 1 до 6):'))
        if ans_2_3 == 1:
            print('Барабан крутиться...')
            tm(rc)
            if rc in range(ans_2_3):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_3 == 2:
            print('Барабан крутиться...')
            tm(rc)
            if rc in range(ans_2_3):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_3 == 3:
            print('Барабан крутиться...')
            tm(rc)
            if rc in range(ans_2_3):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_3 == 4:
            print('Барабан крутиться...')
            tm(rc)
            if rc in range(ans_2_3):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_3 == 5:
            print('Барабан крутиться...')
            tm(rc)
            if rc in range(ans_2_3):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_3 == 6:
            print('Ну ты же знаешь что с полным барабаном у тебя нет шансов...')
        else:
            print('Некорректное количество патронов')
        break
    else:
        print('Неверный револьвер')
        continue

Но когда я выбираю второе либо третье оружие у меня операторы если не работают выбивают всё к первому:
3dc56276fcff47308a6bfae7f3f70c3c.png6c9264d25d3c45de98e73e68cb2ac191.png
Извините если где-то тупонул но де-баггер ничего не нашёл
  • Вопрос задан
  • 366 просмотров
Решения вопроса 2
Sly_tom_cat
@Sly_tom_cat
.
Никогда не пишите такой говногкод!

Зачем кучу раз повторять эти IF-ы?
Если действия никак не отличаются для любого количества патронов - то какой смысл их писать отдельным кодом? С пистолетами разница только в размере барабана - тоже решается все через простую переменную.

import time
import random

guns = {'флобер': 8, 'наган': 7, 'кольт': 6}
while True:
  while True:
    gun = input('Добро пожаловать в русскую рулетку!\n'
                'Флобер(8 патронов),Наган(7) либо Кольт(6)?\n'
                'Выберите револьвер:')
    if gun.lower() not in guns.keys():
      print('Неверный револьвер')
    else:
      break
  bullets = guns[gun]
  while True:
    choice = int(input('Введите количеством патронов в барабане'
                       ' (от 1 до %d):'%bullets))
    if choice == bullets:
      print('Ну ты же знаешь что с полным барабаном у тебя нет шансов...')
    elif choice <= 0 or choice >= bullets:
      print('Некорректное количество патронов')
    else:
      break
  print('Барабан вращается')
  turn = random.randint(1, bullets)
  time.sleep(turn)
  if turn >= choice:
    print('Ты выиграл')
  else:
    print('Ты проиграл!')
Ответ написан
Комментировать
Geekinder
@Geekinder Автор вопроса
Ну ребят насчёт скобок это сложно на каждой строке так проделывать я решил создать 2 списка для каждого револьвера,ой да что я вам рассказываю вот код:
import time
import random

def tm(x):
    time.sleep(x)

lrf = ['Флобер','флобер','1','8']
lrn = ['Наган','наган','2','7']
lrc = ['Кольт','кольт','3','6']

lrff = [1,2,3,4,5,6,7,8]
lrfn = [1,2,3,4,5,6,7]
lrfc = [1,2,3,4,5,6]

rf = random.choice(lrff)
rn = random.choice(lrfn)
rc = random.choice(lrfc)

while True:
    ans_1 = str(input('Добро пожаловать в русскую рулетку!\nФлобер(8 патронов),Наган(7) ибо Кольт(6)?\nВыберите револьвер:'))
    if ans_1 in lrf:
        ans_2_1 = int(input('Введите количеством патронов в барабане(от 1 до 8):'))
        if ans_2_1 == 1:
            print('Барабан крутиться...')
            tm(3)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 2:
            print('Барабан крутиться...')
            tm(3)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 3:
            print('Барабан крутиться...')
            tm(3)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 4:
            print('Барабан крутиться...')
            tm(3)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 5:
            print('Барабан крутиться...')
            tm(3)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 6:
            print('Барабан крутиться...')
            tm(3)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 7:
            print('Барабан крутиться...')
            tm(3)
            if rf in range(ans_2_1):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_1 == 8:
            print('Ну ты же знаешь что с полным барабаном у тебя нет шансов...')
        else:
            print('Некорректное количество патронов')
        break
    elif ans_1 in lrn:
        ans_2_2 = int(input('Введите количеством патронов в барабане(от 1 до 7):'))
        if ans_2_2 == 1:
            print('Барабан крутиться...')
            tm(3)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 2:
            print('Барабан крутиться...')
            tm(3)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 3:
            print('Барабан крутиться...')
            tm(3)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 4:
            print('Барабан крутиться...')
            tm(3)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 5:
            print('Барабан крутиться...')
            tm(3)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 6:
            print('Барабан крутиться...')
            tm(3)
            if rn in range(ans_2_2):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_2 == 7:
            print('Ну ты же знаешь что с полным барабаном у тебя нет шансов...')
        else:
                print('Некорректное количество патронов')
        break
    elif ans_1 in lrc:
        ans_2_3 = int(input('Введите количеством патронов в барабане(от 1 до 6):'))
        if ans_2_3 == 1:
            print('Барабан крутиться...')
            tm(3)
            if rc in range(ans_2_3):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_3 == 2:
            print('Барабан крутиться...')
            tm(3)
            if rc in range(ans_2_3):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_3 == 3:
            print('Барабан крутиться...')
            tm(3)
            if rc in range(ans_2_3):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_3 == 4:
            print('Барабан крутиться...')
            tm(3)
            if rc in range(ans_2_3):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_3 == 5:
            print('Барабан крутиться...')
            tm(3)
            if rc in range(ans_2_3):
                print('Ты проиграл!')
            else:
                print('Ты выиграл')
        elif ans_2_3 == 6:
            print('Ну ты же знаешь что с полным барабаном у тебя нет шансов...')
        else:
            print('Некорректное количество патронов')
        break
    else:
        print('Неверный револьвер')
        continue
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@pcdesign
Имеет смысл отказаться от этих бесконечных if, else, а использовать словарь dict со всеми вариантами.
Тогда и ошибка сама исправится, да и сам код станет в 10 раз короче.
Ответ написан
Комментировать
Winsik
@Winsik
сис.админ, недопрограммист :)
if ans_1 == 'Наган' or 'наган': А вы в такой конструкции понимаете что с чем сравниваете .. может скобочек добавить ?
Ответ написан
Ваш ответ на вопрос

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

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