首页 > 解决方案 > 每次调用函数时,打印语句都不会打印到控制台

问题描述

当我输入正确的整数来调用 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

解决方案


您的代码存在多个问题。我移动了您的代码而没有进行太多修改。我使用 Python 3.7。以下是问题。

  1. raw_input已停产。改为使用input
  2. printPython 3.x 中用作函数。所以,你需要括号。如果您使用的是 Python 2.x,则可以忽略这一点。
  3. 在用户回答“是”后,他们应该进入循环players_turn。因此,其余的输入请求和函数调用都在它之下。否则,它只要求用户输入并且什么都不做
  4. 既然您正在循环,players_turn请不要从其他函数中调用它,例如hit,missout_of_range.
  5. 我也没有看到 numpy 在任何地方使用。
  6. 命中不会打印到右行和右列。我没有提到那个。我只解决了打印问题。

这是更新的代码

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()

推荐阅读