python - 如何摆脱全局变量
问题描述
我不想使用全局变量,但是没有它们我该如何做呢?(我还有更多功能等等,所以这还不是全部)
球员转身。我使用全局变量来确保转弯正在切换,尝试了其他一些方法,但是转弯没有切换......
#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()
解决方案
在您的情况下,您根本不需要全局变量。您的程序没有使用它们来回传输信息。
在您的情况下,您只需要从您的函数中获取信息。所以在以下情况下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()
推荐阅读
- android - 来自包装视图的Android数据绑定自定义视图
- python - 为 IE 添加代码时出现 Webdriver Chrome 错误
- python - 尝试给出一个分组(按两个变量)平均值,如果不可能的话,给出 python pandas 中的列平均值
- python - 从熊猫到雪花回滚的数据加载
- java - 具有基于嵌入式文件的 H2 多租户数据库和手动迁移的 Spring 应用程序
- r - R Markdown在插入图之前引用图
- identityserver4 - 无法让 IdentityServer4 注销以进行外部(Google)身份验证
- c++ - 使用 nodemcu 和 bme280 传感器构建气象站,我遇到了一些错误。1)错误:“handle_OnConnect”未在此范围内声明
- plsql - dbms_output.put_line() 得到注释,除了“PL/SQL 过程已成功完成”之外,没有在输出中打印任何内容
- c - 当我在函数中放置一个十进制数时,它会循环到 Stack Overflow