在上一篇文章中,有人告诉我我正在使用 Python 进行编码,就像在 BASIC 中一样(我还没有在 Python 中“思考”)。这可能是真的,这就是我需要帮助的原因。话虽这么说,到目前为止我已经阅读了一本关于 Python 的书(Bytes of Python),我在网上又买了两本书(其中一本是Invent with Python,我正在阅读)并且我在 The New Boston 做了很多教程。不过,我的问题对你来说可能听起来很新手。
在 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()