首页 > 解决方案 > 如何摆脱全局变量

问题描述

我不想使用全局变量,但是没有它们我该如何做呢?(我还有更多功能等等,所以这还不是全部)

球员转身。我使用全局变量来确保转弯正在切换,尝试了其他一些方法,但是转弯没有切换......

#Check if the shot hit any computerships
def player_hit_check():
    global players_turn
    shot = player_shot()
    check_if_hit = set(computer_ships) & set(player_turn_shot) 

    if(check_if_hit == set()):
        print("You missed! Switching turns...")
        time.sleep(3)
        players_turn = 1
    else:
        print(f"YOU MADE A BIG BANG ON ",player_turn_shot,"!") 
        computer_ships.remove(shot)
        all_player_hits.append(shot)

电脑转

#Check if the computers shot hit any player ships
def computer_hit_check():
    global computers_turn
    computer_random_shot = computer_shot()
    check_if_hit = set(player_ships) & set(computer_turn_shot) 

    if(check_if_hit == set()):
        print("Computer missed! It's now your turn.")
        time.sleep(3)
        computers_turn = 1
    else:
        print(f"COMPUTER MADE A BIG BANG ON ",computer_turn_shot,"!") 
        player_ships.remove(computer_random_shot)
        all_computer_hits.append(computer_random_shot)

游戏本身

#Runs the game
while True:
    #Players turn
    players_turn = 0
    while players_turn < 1:
        print('\n'.join('\t'.join(row) for row in board.values()))
        print("Playerships:",player_ships)
        print("Computerships:",computer_ships)
        print("You have shot on",all_player_shots,"and has knocked out these ships:",all_player_hits)
        print("The computer has shot at these coordinates",all_computer_shots,"and has knocked out these ships:",all_computer_hits)
        player_hit_check()

    #Computers turn
    computers_turn = 0
    while computers_turn < 1:
        computer_hit_check()

标签: python

解决方案


在您的情况下,您根本不需要全局变量。您的程序没有使用它们来回传输信息。

在您的情况下,您只需要从您的函数中获取信息。所以在以下情况下player_hit_check()

def player_hit_check():
    shot = player_shot()
    check_if_hit = set(computer_ships) & set(player_turn_shot) 

    if(check_if_hit == set()):
        print("You missed! Switching turns...")
        time.sleep(3)
        return 1
    else:
        print(f"YOU MADE A BIG BANG ON ",player_turn_shot,"!") 
        computer_ships.remove(shot)
        all_player_hits.append(shot)
    return 0

呼叫站点将是这样的:

while True:
    #Players turn
    players_turn = 0
    while players_turn < 1:
        # prints elided ...
        players_turn = player_hit_check()

推荐阅读