2015-09-22 6 views
0

Я создал программу, в которой вы можете «взломать» поддельные банковские счета на деньги, исходя из пароля для учетной записи. Я назначил money как 0 (так как игра - это тип игры, которая перезапускается каждый раз, когда вы ее открываете) и lives 100, поскольку у вас есть 100 жизней, чтобы получить как можно больше денег. Вот код:Где я могу разместить свои задания?

#PASSWORD GUESSING MONEY GAME 
# 
# 
# 
# 
import random 
import time 

print('Hello, please enter a name for your bank account.') 
bank_acc = input() 
print('Welcome to your bank account: ' + bank_acc) 
print("$$$: 0") 
print('Just press ENTER when ready.') 
print('At the press of a button, you will have access to hundreds of millions of bank accounts.') 
print('But do not be so quick, you will be required to hack the password of each bank account.') 
print('Each and every password is a 3-digit code.') 
print('You have 100 lives to do so. Each time you get the password wrong, subtracts a life') 
print('After you use up all 100 lives, your bank account will be reset.') 
print('Good luck') 

money = 0 
lives = 100 

def game(): 
    passwords = random.randint(100, 999) 

    while lives <= 100: 
     print('Take a guess') 
     guess = input() 
     guess = int(guess) 

     if guess < passwords: 
      print('Password incorrect. Number too low.') 
      lives = lives - 1 

     if guess > passwords: 
      print('Password incorrect. Number too high') 
      lives = lives -1 

     if guess == passwords: 
      break 

    if guess == passwords: 
     money = money + passwords 
     print('Hacking account...') 
     time.sleep(1) 
     print('.') 
     time.sleep(1) 
     print('.') 
     time.sleep(1) 
     print('.') 
     print('Account hacked.') 
     print('...Adding money to account...') 
     print('Your Account:') 
     print('$$$: ' + str(money)) 
     print('Lives: ' + str(lives)) 
     print('...NEXT ACCOUNT...') 
     print('') 
     print('') 
     time.sleep(2) 
     game() 
game() 

Когда он говорит lives сослались перед тем заданием. Я понимаю, что с lives не был назначен в блоке кода, который имел while lives <= 100: Но где я мог бы разместить назначения для выполнения задания до его ссылки. Я знаю, где вы могли бы разместить его, но ... Если кто-то должен был угадать пароль правильно, я не хочу, чтобы деньги возвращались обратно к 0, а жизнь возвращалась к 100, когда переходила к следующей учетной записи. Пожалуйста, помогите, и спасибо!

+0

Как первая строка после 'def game():' добавить следующее: 'global live' - вы должны объявить его глобальным, если хотите, чтобы иметь возможность обратиться к нему! Sidenote: лучше избегать использования глобальных переменных. Подумайте внимательно, если вам действительно нужно - или если вы можете передать его функции! – alfasin

+0

@alfasin не сделает ли переменную живой доступной во всех областях? –

+2

@PatrickBassut это уже (объявив его вне функции) – alfasin

ответ

0

Функции Python: function scoped. Поэтому вам нужно будет поместить жизнь внутри определения функции, но перед циклом while, прежде чем ссылаться на него. С другой стороны, вы можете явно объявить его ссылкой на глобальную версию жизни, указанную там в вашей программе. Или вы можете определить игру как имеющую параметр, который передается, а затем назначается так называемым «жизнью».

0

Вам необходимо переместить глобальные переменные в класс контейнера. Инициализируйте их в конструкторе (метод __init__) и вместо вызова game изнутри создайте внешний цикл, который создает новую игру каждый раз.

class Game(object): 
    def __init__(self): 
     self.lives = 100 
     self.money = 0 

    def run(self): 
     password = random.randint(100, 999) 
     while self.lives < 100: 
      ... 
     ... 
     time.sleep(2) 
     # game() 

while True: 
    g = Game() 
    g.run() 
+0

Я думал, что это сработает сначала, и я надеялся, что это так, но выход этого решения (или то, что я думал, было бы решением) был «Traceback (последний последний вызов): Файл« C: /Users/Antonio/Desktop/moneygame.py », строка 68, в g.run() Файл« C:/Users/Antonio/Desktop/moneygame.py ", строка 47, в запуске , если угадать == пароли: UnboundLocalError: локальная переменная 'guess', на которую ссылаются перед присваиванием' –

+0

Это похоже на проблему с вашей переменной предположения. Убедитесь, что в вашей переменной нет опечаток, и обратите внимание на разницу между 'self. '(свойство вашего игрового объекта) и простой' '(переменная в вашей локальной области). – multivac