M
M
Max Bogachov2017-01-14 12:21:29
Python
Max Bogachov, 2017-01-14 12:21:29

Problem with if,elif statements in a loop?

The other day I wrote a toy like Russian roulette:

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

But when I choose the second or third weapon, my operators, if they don’t work, knock everything out to the first one:
3dc56276fcff47308a6bfae7f3f70c3c.png6c9264d25d3c45de98e73e68cb2ac191.png
Sorry if I got stupid somewhere, but the debugger didn’t find anything

Answer the question

In order to leave comments, you need to log in

3 answer(s)
S
Sly_tom_cat ., 2017-01-14
@Geekinder

Never write such shitty code!
What for a heap of times to repeat these IF?
If the actions do not differ in any way for any number of cartridges, then what is the point of writing them in separate code? With pistols, the difference is only in the size of the drum - everything is also decided through a simple variable.

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('Ты проиграл!')

P
pcdesign, 2017-01-14
@pcdesign

It makes sense to abandon these endless if, else, and use a dict dictionary with all options.
Then the error itself will be corrected, and the code itself will become 10 times shorter.

A
Alexey S., 2017-01-14
@Winsik

if ans_1 == 'Наган' or 'наган':And in such a construction, do you understand what you are comparing with .. can you add brackets?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question