Переменная не принимает новое значение
До последнего не хотел сюда писать, но, видимо, придется. Буквально день назад начал изучать питон, решил написать простую игру аля "Орел-Решка", но с системой начисления (или снятия) очков. Сделал так, чтобы при введении большего значения для ставки, нежели имеется на балансе, код просил повторно ввести уже корректное значение для ставки. Однако даже если ввести нормальное значение, старое никуда не пропадает, и в случае победы или поражения начисляется (либо соответственно снимается) количество очков, равное "некорректной" ставке. Не знаю как исправить:
import random2
balance = 100
running = True
while running:
print('Ваш баланс:', balance, 'очков. \nВведите вашу ставку:')
stavka = int(input()) #ставка
def no_funds(): #функция, срабатывающая, если значение ставки выше значения баланса
stavka = int(input()) #повторный ввод "нормальной" ставки
if stavka <= balance:
print('Ваша ставка: ', str(stavka), 'очков(а)') #здесь выводится уже новое значение ставки, однако на стадии начисления или снятия очков переменная снова принимает старое (первое) значение
else:
print('Недостаточно средств')
print('Введите корректное число:')
no_funds() #если ставка опять выше, функция еще раз повторяется
if stavka <= balance:
print('Ваша ставка:', str(stavka), 'очков(а)')
else:
print('Недостаточно средств')
print('Введите корректное число:')
no_funds()
a = random2.randint(1, 3) % 2
choice = input('Что выпадет: Орёл (введите "1") или Решка (введите"2")?\n')
if choice == 1: #если выпал орёл
if a == 1:
print('Выпал Орёл, Вы выиграли!')
balance = balance + stavka
else:
print('Выпала Решка, Вы проиграли!')
balance = balance - stavka
else: #если выпала решка
if a == 0:
print('Выпала Решка, Вы выиграли!')
balance = balance + stavka
else:
print('Выпал Орёл, Вы проиграли!')
balance = balance - stavka
print('Ваш новый баланс:', balance, 'очков')
if balance == 1000:
print('Ты абсолютный победитель, нет смысла играть дальше!')
yes_no = input('Сыграть снова?\n')
if yes_no == 'да' or yes_no == 'Да':
running = True
else:
print('Хорошо поиграли. Увидимся!')
running = False
Возможны некоторые ошибки оформления кода, приму критику с удовольствием.
Ответы (1 шт):
Вам просто необходимо объявить переменную stavka глобальной, чтобы ее спокойно можно было изменять вне функции, так же у вас нет условия окончания, то есть если ваш баланс будет 0 ваша программа продолжает работать, так же вместо строки if yes_no == 'да' or yes_no == 'Да': лучше использовать if yes_no.lower() =='Да':, так вы будете переводить строку в нижний регистр, а в вашем случае ваша программа не сработает на 'ДА' или 'Да', это не критично но вы сами сказали что примите критику).
import random
import sys
balance = 100
running = True
while running:
print('Ваш баланс:', balance, 'очков. \nВведите вашу ставку:')
stavka = int(input())
def no_funds(balance):
global stavka
stavka = int(input())
if stavka <= balance:
print('Ваша ставка: ', str(stavka), 'очков(а)')
else:
print('Недостаточно средств')
print('Введите корректное число:')
no_funds(balance)
if stavka <= balance:
print('Ваша ставка:', str(stavka), 'очков(а)')
else:
print('Недостаточно средств')
print('Введите корректное число:')
no_funds(balance)
a = random.randint(1, 3) % 2
choice = input('Что выпадет: Орёл (введите "1") или Решка (введите"2")?\n')
if choice == 1: #если выпал орёл
if a == 1:
print('Выпал Орёл, Вы выиграли!')
balance = balance + stavka
else:
print('Выпала Решка, Вы проиграли!')
balance = balance - stavka
else:
if a == 0:
print('Выпала Решка, Вы выиграли!')
balance = balance + stavka
else:
print('Выпал Орёл, Вы проиграли!')
balance = balance - stavka
print('Ваш новый баланс:', balance, 'очков')
if balance == 1000:
print('Ты абсолютный победитель, нет смысла играть дальше!')
sys.exit()
if balance<=0:
print('Вы проиграли, но не расстраивайтесь в следующий раз повезет')
running=False
yes_no = input('Сыграть снова?\n')
if yes_no.lower() == 'да':
running = True
else:
print('Хорошо поиграли. Увидимся!')
running = False
Но насколько я знаю использовать global и nonlocal плохая практика, подробнее:https://tirinox.ru/global-nonlocal/ Вот как можно реализовать без глобализации переменной:
import random
import sys
balance = 100
running = True
while running:
print('Ваш баланс:', balance, 'очков. \nВведите вашу ставку:')
stavka = int(input())
if stavka <= balance:
print('Ваша ставка: ', str(stavka), 'очков(а)')
else:
print('Недостаточно средств')
print('Введите корректное число:')
continue
def choice(stavka,balance):
a = random.randint(1, 3) % 2
choice = input('Что выпадет: Орёл (введите "1") или Решка (введите"2")?\n')
if choice == 1:
if a == 0:
print('Выпала Решка, Вы выиграли!')
balance = balance + stavka
return balance
else:
print('Выпал Орёл, Вы проиграли!')
balance = balance - stavka
return balance
else: #если выпал орёл
if a == 1:
print('Выпал Орёл, Вы выиграли!')
balance = balance + stavka
return balance
else:
print('Выпала Решка, Вы проиграли!')
balance = balance - stavka
return balance
balance =choice(stavka,balance)
if balance == 1000:
print('Ты абсолютный победитель, нет смысла играть дальше!')
sys.exit()
if balance<=0:
print('Вы проиграли, но не расстраивайтесь в следующий раз повезет')
sys.exit()
yes_no = input('Сыграть снова?\n')
if yes_no.lower() == 'да':
continue
else:
print('Хорошо поиграли. Увидимся!')
sys.exit()
Также корректнее будет использовать не running==True, а continue(начинает следующий проход цикла, минуя оставшееся тело цикла (for или while)), ну и так же зачем вы используете библиотеку random2, если в python есть просто random,правильно еще будет в функцию no_funds передавать используемое значение.
PS.надеюсь объяснил все четко и ясно(это мой первый ответ на вопрос :D)