Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将程序从FreeBASIC转换为Python:全球化变量_Python_Oop_Global Variables_Freebasic - Fatal编程技术网

将程序从FreeBASIC转换为Python:全球化变量

将程序从FreeBASIC转换为Python:全球化变量,python,oop,global-variables,freebasic,Python,Oop,Global Variables,Freebasic,在上一篇文章中,我被告知我正在用Python编写代码,就像在BASIC中一样(我还没有用Python“思考”)。这可能是真的,这就是为什么我需要帮助。话虽如此,到目前为止,我已经读了一本关于Python的书(Python的字节),我在网上又买了两本书(其中一本是Invent with Python,我正在读),我在新波士顿大学做了很多教程。尽管如此,我的问题对你来说可能还是个新手 在FreeBasic中,变量都是全球化的。在Python中,我必须为我创建的每个新函数全球化它们。这不太实际。那我该

在上一篇文章中,我被告知我正在用Python编写代码,就像在BASIC中一样(我还没有用Python“思考”)。这可能是真的,这就是为什么我需要帮助。话虽如此,到目前为止,我已经读了一本关于Python的书(Python的字节),我在网上又买了两本书(其中一本是Invent with Python,我正在读),我在新波士顿大学做了很多教程。尽管如此,我的问题对你来说可能还是个新手

在FreeBasic中,变量都是全球化的。在Python中,我必须为我创建的每个新函数全球化它们。这不太实际。那我该怎么办呢?“母语为Python的人”如何解决这个问题?下面你会发现我创建的一个小程序,我在其中全球化了函数中的所有变量

#-*- coding: iso8859_1 -*-

import random

ca1 = 10
ca2 = 10
taco = 20
pv1 = random.randint(1,10)
pv2 = random.randint(1,10)
cnt = 0
pv1Dep = pv1
pv2Dep = pv2
ast = "*" * 7
d20_1 = random.randint(1,20)
d8_1 = random.randint(1,8)
d20_2 = random.randint(1,20)
d8_2 = random.randint(1,8)

def intro():
    global ca1
    global ca2
    global taco
    global pv1
    global pv2
    global cnt
    global pv1Dep
    global pv2Dep
    global d20_1
    global d8_1
    global d20_2
    global d8_2


    print "Imaginez deux guerriers de D&D 2e édition qui se battent."
    print
    print "Guerrier 1: " + str(pv1) + " PV, épée longue (1-8 points de dégât), TACO de 20, CA de " + str(ca1) + "."
    print "Guerrier 2: " + str(pv2) + " PV, épée longue (1-8 points de dégât), TACO de 20, CA de " + str(ca2) + "."
    print

def nouveauCombat():
    global ca1
    global ca2
    global taco
    global pv1
    global pv2
    global cnt
    global pv1Dep
    global pv2Dep
    global d20_1
    global d8_1
    global d20_2
    global d8_2

    print ast + "NOUVEAU COMBAT" + ast
    print
    while ((pv1 > 0) and (pv2 > 0)):
        cnt = cnt + 1
        print ast + "ROUND " + str(cnt) + ": INITIATIVE" + ast
        print
        calcInitiative()
        print
    print ast + "RESULTAT" + ast
    print
    resultat()

def calcInitiative():
    global ca1
    global ca2
    global taco
    global pv1
    global pv2
    global cnt
    global pv1Dep
    global pv2Dep
    global d20_1
    global d8_1
    global d20_2
    global d8_2

    initiative1 = random.randint(1,10)
    initiative2 = random.randint(1,10)
    print "Le guerrier 1 fait son jet d'initiative."
    print str(initiative1) + "!"
    print
    print "Le guerrier 2 fait son jet d'initiative."
    print str(initiative2) + "!"
    print
    if initiative1 == initiative2:
        print "Les deux guerriers attaquent au même moment."
        print
        print ast + "ROUND " + str(cnt) + ": ATTAQUE" + ast
        print
        attaque1()
        print
        attaque2()
    elif initiative1 < initiative2:
        print "Le guerrier 1 attaque en premier."
        print
        print ast + "ROUND " + str(cnt) + ": ATTAQUE" + ast
        print
        attaque1()
        print
        if pv2 > 0:
            print
            attaque2()
    else:
        print "Le guerrier 2 attaque en premier."
        print
        print ast + "ROUND " + str(cnt) + ": ATTAQUE" + ast
        print
        attaque2()
        print
        if pv1 > 0:
            print
            attaque2()

def attaque1():
    global ca1
    global ca2
    global taco
    global pv1
    global pv2
    global cnt
    global pv1Dep
    global pv2Dep
    global d20_1
    global d8_1
    global d20_2
    global d8_2

    print "Le guerrier 1 fait son jet de toucher."
    print str(d20_1) + "!"
    if d20_1 >= ca2:
        print "Touché!"
        pv2 = pv2 - d8_1
        print str(d8_1) + " points de dégât!"
        print "Le guerrier 2 est à " + str(pv2) + "/" + str(pv2Dep) + " PV!"
    else:
        print "Raté!"

def attaque2():
    global ca1
    global ca2
    global taco
    global pv1
    global pv2
    global cnt
    global pv1Dep
    global pv2Dep
    global d20_1
    global d8_1
    global d20_2
    global d8_2

    print "Le guerrier 2 fait son jet de toucher."
    print str(d20_2) + "!"
    if d20_2 >= ca1:
        print "Touché!"
        pv1 = pv1 - d8_2
        print str(d8_2) + " points de dégât!"
        print "Le guerrier 1 est à " + str(pv1) + "/" + str(pv1Dep) + " PV!"
    else:
        print "Raté!"

def resultat():
    global ca1
    global ca2
    global taco
    global pv1
    global pv2
    global cnt
    global pv1Dep
    global pv2Dep
    global d20_1
    global d8_1
    global d20_2
    global d8_2

    print "Le combat prend fin au round " + str(cnt) + "."
    print

    if pv1 == pv1Dep:
        print "Le guerrier 1 n'a pas la moindre égratignure."
    elif pv1 > 0:
        print "Le guerrier 1 est blessé."
    else:
        print "Le guerrier 1 est mort."

    print "Il finit le combat avec " + str(pv1) + "/" +str (pv1Dep) + " PV."
    print

    if pv2 == pv2Dep:
        print "Le guerrier 2 n'a pas la moindre égratignure."
    elif pv2 > 0:
        print "Le guerrier 2 est blessé."
    else:
        print "Le guerrier 2 est mort."

    print "Il finit le combat avec " + str(pv2) + "/" +str (pv2Dep) + " PV."
    print

intro()
nouveauCombat()
#-*-编码:iso8859_1-*-
随机输入
ca1=10
ca2=10
塔可=20
pv1=随机随机随机数(1,10)
pv2=随机随机随机数(1,10)
cnt=0
pv1Dep=pv1
pv2Dep=pv2
ast=“*”*7
d20_1=随机随机随机数(1,20)
d8_1=随机随机随机数(1,8)
d20_2=随机随机随机数(1,20)
d8_2=随机随机随机数(1,8)
def intro():
全球ca1
全球ca2
全球玉米卷
全球pv1
全球pv2
全球碳纳米管
全局pv1Dep
全局pv2Dep
全球d20_1
全球d8_1
全球d20_2
全球d8_2
打印“D&D第二版的幻想”
打印
打印“Guerrier 1:”+str(pv1)+“PV,pée longue(1-8分),塔可20,CA”+str(ca1)+“。”
打印“Guerrier 2:”+str(pv2)+“PV,pée longue(1-8点),塔可20,CA”+str(ca2)+“
打印
def nouveauCombat():
全球ca1
全球ca2
全球玉米卷
全球pv1
全球pv2
全球碳纳米管
全局pv1Dep
全局pv2Dep
全球d20_1
全球d8_1
全球d20_2
全球d8_2
打印ast+“新战斗”+ast
打印
而((pv1>0)和(pv2>0)):
cnt=cnt+1
打印ast+“圆形”+str(cnt)+“:倡议”+ast
打印
煅烧的
打印
打印ast+“结果表”+ast
打印
结果()
def CalcinInitiative():
全球ca1
全球ca2
全球玉米卷
全球pv1
全球pv2
全球碳纳米管
全局pv1Dep
全局pv2Dep
全球d20_1
全球d8_1
全球d20_2
全球d8_2
initiative1=random.randint(1,10)
initiative2=random.randint(1,10)
打印“Le guerrier 1 fait son jet d’initiative”
打印str(initiative1)+“!”
打印
打印“Le guerrier 2 fait son jet d'initiative”
打印str(initiative2)+“!”
打印
如果initiative1==initiative2:
打印“Les deux guerriers Attachent au même moment.”
打印
打印ast+“圆形”+str(cnt)+“:ATTAQUE”+ast
打印
附件1()
打印
附件2()
elif initiative10:
打印
附件2()
其他:
打印“Le guerrier 2 attaque en premier”
打印
打印ast+“圆形”+str(cnt)+“:ATTAQUE”+ast
打印
附件2()
打印
如果pv1>0:
打印
附件2()
def附件1():
全球ca1
全球ca2
全球玉米卷
全球pv1
全球pv2
全球碳纳米管
全局pv1Dep
全局pv2Dep
全球d20_1
全球d8_1
全球d20_2
全球d8_2
打印“Le guerrier 1 fait son jet de toucher。”
打印str(d20_1)+“!”
如果d20_1>=ca2:
打印“Touché!”
pv2=pv2-d8_1
打印str(d8_1)+“deg–t点!”
打印“Le guerrier 2 está”+str(pv2)+“/”+str(pv2Dep)+“PV!”
其他:
打印“老鼠!”
def附件2():
全球ca1
全球ca2
全球玉米卷
全球pv1
全球pv2
全球碳纳米管
全局pv1Dep
全局pv2Dep
全球d20_1
全球d8_1
全球d20_2
全球d8_2
打印“Le guerrier 2 fait son jet de toucher。”
打印str(d20_2)+“!”
如果d20_2>=ca1:
打印“Touché!”
pv1=pv1-d8_2
打印str(d8_2)+“deg–t点!”
打印“Le guerrier 1 está”+str(pv1)+“/”+str(pv1Dep)+“PV!”
其他:
打印“老鼠!”
def resultat():
全球ca1
全球ca2
全球玉米卷
全球pv1
全球pv2
全球碳纳米管
全局pv1Dep
全局pv2Dep
全球d20_1
全球d8_1
全球d20_2
全球d8_2
打印“Le combat prend fin au round”+str(cnt)+”
打印
如果pv1==pv1Dep:
印刷“Le guerrier 1 n'a pas la moindreégratignure”
elif pv1>0:
打印“Le guerrier 1 est blessé”
其他:
打印“Le guerrier 1 est mort.”
打印“最后一个战斗场景”+str(pv1)+“/”+str(pv1Dep)+“PV”
打印
如果pv2==pv2Dep:
印刷“Le guerrier 2 n'a pas la moindreégratignure”
elif pv2>0:
打印“Le guerrier 2 est blessé”
其他:
打印“Le guerrier 2 est mort.”
打印“最后一次战斗”字母+str(pv2)+“/”+str(pv2Dep)+“PV”
打印
简介()
暴发户()

您不需要将名称声明为全局名称,除非您要分配给它

a = 1
b = 2
def foo():
    global b
    print a # prints 1
    b = 3
foo()
print b # prints 3

您不需要将名称声明为全局名称,除非您要为其分配

a = 1
b = 2
def foo():
    global b
    print a # prints 1
    b = 3
foo()
print b # prints 3

默认情况下,全局变量被广泛(普遍?)视为设计缺陷。如果你想写“Pythonic”代码,你应该努力使全局状态尽可能少。

默认情况下,全局变量被广泛(普遍)认为是设计缺陷。如果你想写“Pythonic”代码,你应该努力使全局状态尽可能少。

我已经重新组织了你的程序,向你展示了它的基本功能。您需要了解类和对象。你也应该
def foo():
    bar = 10
    baz(bar)

def baz(bar):
    print bar
class quux(object):
    def __init__(self):
        self.a = 1
        self.b = "two"

def foo():
    bar = quux()
    baz(bar)
    print bar.a, bar.b

def baz(bar):
    bar.a = len(bar.b)