导入变量未给出所需的值

时间:2014-07-13 08:19:53

标签: python variables import

在这个游戏中,得分在开始时设置为0并且如果你正确回答问题则加入,如果我在我正在播放时通过打印检查得分给出了正确的值但是当得分显示在证书无论如何都会显示0。

这是第一个文件(游戏部分)的代码

import pygame, time
pygame.init()
WHITE = ( 255, 255, 255)
BLACK = ( 0, 0, 0)
screen = pygame.display.set_mode((600, 600))
ButtonA = pygame.image.load("A.png")
ButtonB = pygame.image.load("B.png")
ButtonC = pygame.image.load("C.png")
a = screen.blit(ButtonA,(50,400))
b = screen.blit(ButtonB,(250,400))
c = screen.blit(ButtonC,(450,400))
pygame.display.flip()

score = 0
if __name__ == '__main__':
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            pos = pygame.mouse.get_pos()
            if a.collidepoint(pos):
                screen.fill(BLACK)
                Correct = font.render("You are correct!", True, WHITE)
                Correct_rect = Correct.get_rect()
                Correct_x = screen.get_width() / 2 - Correct_rect.width / 2
                Correct_y = 150 - Correct_rect.height / 2
                screen.blit(Correct, [Correct_x, Correct_y])
                pygame.display.flip()
                score = score + 1
                print score
                time.sleep(2)

以下是该部分的代码,它将值放在证书上,该证书当前只会引发数字0

import pygame, sys, eztext
from pygame.locals import *
from eztext import Input
#Importing the variable score
from Question1Easy import score
Name = self.value
#Setting the variable score (an int) to a string
Score = str(score)

如何获取第二个文件以获取更新的得分值而不是静态0?

2 个答案:

答案 0 :(得分:2)

是的,肯定会给你0.

当被其他文件导入时,if __name__ == '__main__'下的代码将不会被执行。

您可以将if __name__ == '__main__'下的逻辑放入第一个py文件中的函数中,例如函数start_game。然后在第二个py文件中调用start_game函数让游戏运行。除此之外,您需要添加一个函数来返回第一个文件中的分数,如下所示:

第一档:

score = 0
def start_game():
    global score
    score += 1

def get_score():
    return score

第二档:

from firstfile import get_score, start_game
print get_score()
start_game()
print get_score()

运行第二个文件时,您将获得:

0
1

使用from firstfile import score获取静态值,如果要获取动态值,则需要在上面的代码中添加一个函数(get_score)。

答案 1 :(得分:2)

所以我认为你应该做的就是上课。一堂课可能听起来像是一些工作,但是习惯它们绝对值得,并且以这种方式使用课程非常容易。

#players.py 
class Player():
    def __init__(self):
        self.score = 0

#games.py
def checkers(player):
    #blahblahblah dostuff
    player.score += 1
    print(player.score) #if everything goes right, this should print 1

#main.py
from players import player
from games import checkers
player = Player()
checkers(player)
player.score += 1
print(player.score) #if everything goes right, this should print 2

使用这种方法的缺点是,对于你想要去的每个函数,我认为你必须将玩家作为几乎所有函数的参数传递,这可能会有点乏味。但是,玩家可以保存您想要跟踪的多个变量或其他统计数据。你只需要一个玩家变量(现在的对象),只需在初始化器中放入更多变量。

当我遇到类似的问题时,我发现这是最简单的解决方案。