自定义函数导致之前Python文件中定义类对象出错

问题描述 投票:0回答:1

我试图通过从另一个文件导入类和方法来运行自定义函数。无论我在上一个文件中进行什么更改,我都会继续从 pycharm 收到相同的错误消息。

第一个文件中的代码片段:

import random
class Coin:
    def __init__(self):
        pass
    def flip(self):
        return random.choice(['heads', 'tails'])

class Dice:
    def __init__(self):
        pass
    def roll(self):
        return random.randint(1, 6)

class Player:
    def __init__(self):
        self.position = 0
    def update_position(self, delta):
        self.position += delta
    def make_turn(self, coin, dice):
        coin_toss = coin.flip()
        dice_roll = dice.roll()
        if coin_toss == 'heads':
            movement = 1
        else:
            movement = -1
        self.update_position(movement * dice_roll)

class Game:
    def __init__(self, player, coin, dice):
        self.player = player
        self.coin = coin
        self.dice = dice
        pass
    def play(self):
        for i in range(20):
            self.player.make_turn(self.coin, self.dice)
            return self.player.position

第二个文件的片段:

from randomwalk import Game


def startSimulation():
    num_games = 100
    position = 0
    for i in range(num_games):
        games = Game('Alex', 'heads', 3)
        end_position = games.play()
        position += end_position

    average_position = position/num_games
    print('Average position after'+ str(num_games)+ 'games(20 moves per game) is' + str(average_position))

startSimulation()

错误信息:

D:\Python\pythonProject\venv\Scripts\python.exe D:\Python\pythonProject\simulation.py 
Traceback (most recent call last):
  File "D:\Python\pythonProject\simulation.py", line 15, in <module>
    startSimulation()
  File "D:\Python\pythonProject\simulation.py", line 9, in startSimulation
    end_position = games.play()
                   ^^^^^^^^^^^^
  File "D:\Python\pythonProject\randomwalk.py", line 36, in play
    self.player.make_turn(self.coin, self.dice)
    ^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'make_turn'

Process finished with exit code 1
python class object methods
1个回答
1
投票

使用

Game
创建
games = Game('Alex', 'heads', 3)
对象时,参数应该是
Player, Coin, and Dice
的实例,而不是字符串。

此外,

play
类中的
Game
方法运行20圈循环,但return语句在第一圈后立即退出。返回应移至循环外,以在 20 圈后返回最终位置。

© www.soinside.com 2019 - 2024. All rights reserved.