python - 每次调用函数时,打印语句都不会打印到控制台
问题描述
当我输入正确的整数来调用 hit() 或 miss() 时,打印语句第一次打印到控制台,但之后不打印到控制台。每次都会调用 player_turn() 函数,但不会调用 print 语句。我的控制台中也没有任何错误
import numpy as np
from random import randint
board = []
for x in range(0, 5):
board.append(["O"] * 5)
def print_board(board):
for row in board:
print (" ".join(row))
def random_row(board):
return randint(0, len(board) - 1)
def random_col(board):
return randint(0, len(board[0]) - 1)
ship_row = random_row(board)
ship_col = random_col(board)
def players_turn():
for turn in range(4):
print ("turn", turn +1)
guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))
def hit():
print ("direct hit")
board[guess_col][guess_row] = "H"
print_board(board)
players_turn()
def miss():
print ("you missed, try again")
board[guess_col][guess_row]
print_board(board)
players_turn()
def out_of_range():
print ("this is out of the range of the battle field")
players_turn()
if_yes = str(raw_input("Do you want to play Battleship? "))
if if_yes == 'yes':
print ship_row
print ship_col
guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))
if guess_col == ship_col and guess_row == ship_row:
hit()
elif guess_col not in range(5) or guess_row not in range(5) :
out_of_range()
else:
miss()
我期望每次输入正确的 hit() 凭据时,我都会得到:“直接命中”,并且该板将被打印到控制台。如果满足 miss() 凭据,我将得到:“你错过了,再试一次”,并且将打印板。
解决方案
您的代码存在多个问题。我移动了您的代码而没有进行太多修改。我使用 Python 3.7。以下是问题。
raw_input
已停产。改为使用input
。- 在
print
Python 3.x 中用作函数。所以,你需要括号。如果您使用的是 Python 2.x,则可以忽略这一点。 - 在用户回答“是”后,他们应该进入循环
players_turn
。因此,其余的输入请求和函数调用都在它之下。否则,它只要求用户输入并且什么都不做 - 既然您正在循环,
players_turn
请不要从其他函数中调用它,例如hit
,miss
和out_of_range
. - 我也没有看到 numpy 在任何地方使用。
- 命中不会打印到右行和右列。我没有提到那个。我只解决了打印问题。
这是更新的代码
import numpy as np
from random import randint
board = []
for x in range(0, 5):
board.append(["O"] * 5)
def print_board(board):
for row in board:
print (" ".join(row))
def random_row(board):
return randint(0, len(board) - 1)
def random_col(board):
return randint(0, len(board[0]) - 1)
def hit():
print ("direct hit")
board[guess_col][guess_row] = "H"
print_board(board)
def miss():
print ("you missed, try again")
board[guess_col][guess_row]
print_board(board)
def out_of_range():
print ("this is out of the range of the battle field")
def players_turn():
for turn in range(4):
print ("turn", turn +1)
guess_row = int(input("Guess Row: "))
guess_col = int(input("Guess Col: "))
if guess_col == ship_col and guess_row == ship_row:
hit()
elif guess_col not in range(5) or guess_row not in range(5) :
out_of_range()
else:
miss()
ship_row = random_row(board)
ship_col = random_col(board)
if_yes = str(input("Do you want to play Battleship? "))
if if_yes == 'yes':
print (ship_row)
print (ship_col)
players_turn()
推荐阅读
- excel - STDEV.P 如果列中的单元格包含特定文本“*cta*”
- javascript - 如何镜像使用服务器端 JavaScript 和 RequireJS 的站点?也就是说 - 强制应用程序识别已加载的网站?
- embedded - 是否可以在 QA-C 中抑制 MISRA 警告
- c++ - 设置 HWND TXT 颜色
- ios - 如何从操场初始化主故事板
- php - 得到错误不能在php中使用stdClass类型的对象作为数组
- angular - 在调用 sub.component 中的函数之前调用 app.component 构造函数
- c# - 我需要一个可以将一些数据上传到网络的 api
- facebook-graph-api - 获取 facebook 用户的语言环境 - Graph API
- php - Laravel 委托具有角色的用户返回一个空数组