以下に多くのコードがありますが、実際にコードを読む必要はありません。関数が存在することと関数名を知る必要があるだけです。最初に私の問題を説明します。
以下に示すように、完全に関数といくつかのグローバル変数に基づいた手続き型プログラムを作成しました。プログラムをオブジェクト指向プログラムに変更したいのですが、このようなことをしたことがないので、うまくいきません。
従う必要がある手順は次のとおりです。 - 関数attack()
は attack.py という名前のファイルに配置する必要があります - 関数defence()
、updateVars()
、および関数はsmartDefender()
defender.py ファイルに配置する必要があります -main()
関数と残りのコード(ほとんどのコード) は manager.py という名前のファイルに配置されます。このファイルがメイン ファイルとなり、すべてがまとめられます。-クラスを使用する必要があります。
__init__
関数の名前をに変更してから、それらをインポートして manager.py で使用しようとするなど、さまざまなことを試しました。また、関数名を同じにして、関数をクラス内に配置し、attacker.py と defender.py を manager.py にインポートしようとしましたが、何も機能していないようです...すべての助けをいただければ幸いです。
プログラムが何をするかについての説明は本当に必要ないと思いますが、本当に必要な場合は、簡単な説明を作成するか、ここで見ることができます。
ありとあらゆる助けをいただければ幸いです。
import random
HIGH= 3
MED= 2
LOW= 1
def attack(attackList):
x= random.uniform(0,1)
for attackLevel,probability in attackList:
if x<probability:
break
x=x-probability
return attackLevel
def defence(attackLevel,defendList):
x= random.uniform(0,1)
for defendLevel,probability in defendList:
if x<probability:
break
x=x-probability
return defendLevel
def updateVars(attackLevel,defendLevel,block,hit,run):
if attackLevel==1:
printAttackLevel='Low'
if attackLevel==2:
printAttackLevel='Medium'
if attackLevel==3:
printAttackLevel='High'
if defendLevel==1:
printDefendLevel='Low'
if defendLevel==2:
printDefendLevel='Medium'
if defendLevel==3:
printDefendLevel='High'
if attackLevel==defendLevel:
block=block+1
hit=hit
run=run+1
else:
block=block
hit=hit+1
run=run+1
return block,hit,run,printAttackLevel,printDefendLevel
def smartDefender(defendLevel,attackLevel,smartList):
for i in smartList:
if (i==(i+1)==(i+2)):
defendLevel= attackLevel
return defendLevel
else:
return
def main():
DEFAULT_PROBABILITY= 0.33
run=0
hit=0
block=0
smartList=[]
rounds= int(input("\nPlease enter the number of rounds between 1 and 100:"))
if rounds<=0 or rounds>100:
print("\n")
print("Invalid range. The number of rounds has been set to 10 by DEFAULT_PROBABILITY.")
rounds=10
lowAttackProb= float(input("\nPercentage of attacks aimed low(0-100):"))/100
medAttackProb= float(input("Percentage of attacks aimed medium(0-100):"))/100
highAttackProb= float(input("Percentage of attacks aimed high(0-100):"))/100
if lowAttackProb+medAttackProb+highAttackProb !=1.00:
print("\n")
print("Invalid entry. The sum of the pecentages must equal 100%. The probability of each level has been set to 33.0% by DEFAULT_PROBABILITY.")
lowAttackProb=DEFAULT_PROBABILITY
medAttackProb=DEFAULT_PROBABILITY
highAttackProb=DEFAULT_PROBABILITY
print('\nLet The Fighting Begin')
print('-'*22)
while run < rounds:
lowDefProb= DEFAULT_PROBABILITY
medDefProb= DEFAULT_PROBABILITY
highDefProb= DEFAULT_PROBABILITY
attackList= [(LOW,lowAttackProb),(MED,medAttackProb),(HIGH,highAttackProb)]
attackLevel= attack(attackList)
smartList.append(attackLevel)
defendList=[(LOW,lowDefProb),(MED,medDefProb),(HIGH,highDefProb)]
defendLevel=defence(attackLevel,defendList)
block,hit,run,printAttackLevel,printDefendLevel= updateVars(attackLevel,defendLevel,block,hit,run)
if run>(rounds/2):
defendLevel=smartDefender(defendLevel,attackLevel,smartList)
#implement smart mode
print('%s%2s%s%3s%s%5s%s%3s'% ('\nRound',run,':\t','Attacker:',printAttackLevel,'\t','Defender:',printDefendLevel))
print("%2s%2d%s%s%2d"% ('\nTotal Hits:',hit,'\t','Total Blocks:',block))
print('Attacker Proportions:','','','Low:','','',lowAttackProb*100,'%','','','Medium:','','',medAttackProb*100,'%','','','High:','','',highAttackProb*100,'%')
print('Defender Proportions:','','','Low:','','',lowDefProb*100,'%','','','Medium:','','',medDefProb*100,'%','','','High:','','',highDefProb*100,'%')
print("\nThank you for using this program, Goodbye!")
main()
私の質問は、これらの手続き型プログラムを、クラスと複数のファイルを使用するオブジェクト指向プログラムに非常に簡単に (必ずしも効率的に) 変換するにはどうすればよいかということです。
問題の領域には、関数が呼び出されている場所が含まれると思いますmain()
..