在之前的文章中,我被告知我是用Python編寫的,就像在BASIC中編寫的那樣(我還沒有在Python中「思考」)。這可能是真實的,這就是我需要幫助的原因。這是說,我看過一本書有關Python至今(Python的的字節),我在網上買了兩本書(其中一個是與Python,我正在讀發明)和我做了很多的教程從該新波士頓。儘管如此,我的問題對你來說可能聽起來很新奇。將程序從FreeBASIC轉換爲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()
謝謝!這很好,讓你看起來像這樣! – erlang