Yazılım | Programlama Python kod çalışmıyor

OmarTR2000

Katılımcı Üye
26 May 2022
355
121
Baku
Selam yeniden, oyunumun genel özelliklerini bitirmeme az kaldı ama yine bir hata ile karşılaştım. Şimdi tamda item takıb hasarı arttırmayı deniyorum ama nedense çalışmadı belkide başkası yardım eder diye bura atıyorum tüm kodu.

Kod:
import os
import sys
import random

##################################

# bütün class'lar 

weapons = {"Demir Kılıç": 40}

class Player:
 def __init__(self, name):
  self.name = name
  self.maxhealty = 100
  self.healty = self.maxhealty
  self.base_attack = 10
  self.gold = 40
  self.pots = 1
  self.weap = ["Paslanmış Kılıç"]
  self.curweap = ["Paslanmış Kılıç"]
  
 @property
 def Attack(self):
  Attack = self.base_attack
  if self.curweap == 'Paslanmış Kılıç':
   Attack += 5
  elif self.curweap == 'Demir Kılıç':
   Attack += 10
  return Attack
  

class Goblin:
 def __init__(self, name):
  self.name = name
  self.maxhealty = 50
  self.healty = self.maxhealty
  self.attack = 5
  self.goldgain = 10
GoblinIG = Goblin('Goblin')

class Zombie:
 def __init__(self, name):
  self.name = name
  self.maxhealty = 75
  self.healty = self.maxhealty
  self.attack = 8
  self.goldgain = 15
ZombieIG = Zombie('Zombi')

##################################

#ysni oyun baslangici

def main():
 print(" Oyunuma Hoşgeldiniz! \n")
 print(" 1.) Başla")
 print(" 2.) Yükle")
 print(" 3.) Çıkış \n")
 seçim = input('--> ')
 if seçim == '1':
  start()
 elif seçim == '2':
  pass
 elif seçim == '3':
  sys.exit()
 else:
  os.system('clear')
  main()
  


def start():
 os.system('clear')
 print(" Selam, ismin ne? \n")
 seçim = input("--> ")
 global PlayerIG
 PlayerIG = Player(seçim)
 start1()
################################## 

#ana menü

def start1():
 os.system('clear')
 print(' Adı: {}'.format(PlayerIG.name))
 print(' Saldırı: {}'.format(PlayerIG.Attack))
 print(' Can: {}/{}'.format(PlayerIG.healty, PlayerIG.maxhealty))
 print(' Altın: {}'.format(PlayerIG.gold))
 print(' İksir: {}\n'.format(PlayerIG.pots))
 print(' 1.) Savaş')
 print(' 2.) Dükkan')
 print(' 3.) Save')
 print(' 4.) Çıkış\n')
 seçim = input("--> ")
 if seçim == '1':
  prefight()
 elif seçim == '2':
  store()
 elif seçim == '3':
  pass
 elif seçim == '4':
  sys.exit()
 else:
  start1()

##################################

#Combat system

def prefight():
 global enemy
 enemyNum = random.randint(1, 2)
 if enemyNum == 1:
  enemy = GoblinIG
 else:
  enemy = ZombieIG
 fight()



def fight():
 os.system('clear')
 print(' {} vs {}\n'.format(PlayerIG.name, enemy.name))
 print(' {} canı: {}/{} {} canı: {}/{}\n'.format(PlayerIG.name, PlayerIG.healty, PlayerIG.maxhealty, enemy.name, enemy.healty, enemy.maxhealty))
 print(' İksir: {}\n'.format(PlayerIG.pots))
 print(' 1.) Saldır')
 print(' 2.) İksir İç')
 print(' 3.) Kaç\n')
 seçim = input('--> ')
 if seçim == '1':
  attack()
 elif seçim == '2':
  drinkpot()
 elif seçim == '3':
  run()
 else:
  fight()
  


def attack():
 os.system('clear')
 PAttack = int(random.uniform(PlayerIG.base_attack / 2, PlayerIG.Attack))
 EAttack = int(random.uniform(enemy.attack / 2, enemy.attack))
 if PAttack == PlayerIG.base_attack / 2:
  print('Kaçırdın!\n')
 else:
  enemy.healty -= PAttack
  print('{} hasar vurdun!\n'.format(PAttack))
 seçim = input('--> ')
 if enemy.healty <= 0:
  win()
  
  
 os.system('clear')
 if EAttack == enemy.attack / 2:
  print('Düşman kaçırdı!\n')
 else:
  PlayerIG.healty -= EAttack
  print('Düşman sana {} hasar verdi\n'.format(EAttack))
  
 seçim = input('--> ')
 if PlayerIG.healty <= 0:
  lose()
 else:
  fight()
##################################

def win():
 os.system('clear')
 enemy.healty = enemy.maxhealty
 PlayerIG.gold += enemy.goldgain
 print('{} Başarıyla Öldürdün!'.format(enemy.name))
 print('{} Altın Kazandın'.format(enemy.goldgain))
 seçim = input('--> ')
 start1()


def lose():
 os.system('clear')
 print('Öldün!')
 seçim = input('--> ')
 main()
################################## 
def drinkpot():
 os.system('clear')
 if PlayerIG.pots == 0:
  print('İksirin Yok!')
 else:
  PlayerIG.healty += 30
  if PlayerIG.healty > PlayerIG.maxhealty:
   PlayerIG.healty = PlayerIG.maxhealty
  print('İksir içtin ve 30 canın yenilendi!\n')
  PlayerIG.pots -= 1
  
  EAttack = int(random.uniform(enemy.attack / 2, enemy.attack))
  if EAttack == enemy.attack / 2:
   print('Düşman kaçırdı!\n')
  else:
   PlayerIG.healty -= EAttack
   print('Düşman sana {} hasar verdi\n'.format(EAttack))
  
  
 seçim = input('--> ')
 if PlayerIG.healty <= 0:
  lose()
 else:
  fight()
  
 seçim = input('--> ')
 fight()
##################################

def run():
 os.system('clear')
 runNum = random.randint(1, 3)
 if runNum == 1:
  print('Başarıyla kaçtın!')
  seçim = input('--> ')
  start1()
 elif runNum == 2:
  run_sans = random.randint(5, 35)
  PlayerIG.healty -= run_sans
  
  if PlayerIG.healty <= 0:
   print('{} hasar alıb öldün'.format(run_sans))
   lose()
  else:
   print('{} hasar alarak kaçtın'.format(run_sans))
   start1()
   
 elif runNum == 3:
   PlayerIG.healty -= 30
   print('kaçamadın ve 30 hasar aldın')
   fight()
   

################################## 
def store():
 os.system('clear')
 print('Dükkana Hoşgeldin!\n')
 print('Ne Almak İstersin?\n')
 print('1.) Demir Kılıc [+10 Saldırı] ---> 40 Altın')
 print('\n99.) Çıkış')
 seçim = input('\n--> ')
 if seçim == '1':
  os.system('clear')
  if PlayerIG.gold >= 40:
   PlayerIG.gold -= 40
   PlayerIG.weap.append('Demir Kılıç')
   print('Demir Kılıçı Aldın!')
   
   seçim2 = input('\n--> ')
   store()
  else:
   print('Yeteri kadar Altının yok!')
   
   seçim2 = input('\n--> ')
   store()
 elif seçim == '99':
  start1()
 else:
  store()
##################################
main()
 
Çözüm
Sonucu elde edemedim:

Normalde saldırı artmaliydi ama artmadı
Class'ın içerisinde "paslanmış kılıç" değişkenini liste olarak vermişsin. Attack fonksiyonunda ise string bir ifadeye eşit olup olmadığını soruyorsun. O yüzden bulamıyor ve if'lere girmeden direkt Attack değerini döndürüyor. "Paslanmış Kılıç" ve "Demir Kılıç" değişkenlerini köşeli parantezler ile liste elemanı olarak tanımlarsan sorun çözülecektir.

Kod:
 @property
 def Attack(self):
  Attack = self.base_attack
  if self.curweap == ['Paslanmış Kılıç']:
   Attack += 5
  elif self.curweap == ['Demir Kılıç']:
   Attack += 10
  elif self.curweap == ['Mr246'nın dambılı']:
   Attack += 99999
  return Attack

Sondan 2. ve 3. satırları almasan da olur. Sayende Python...

Mr246

Üye
8 Ara 2022
103
39
Sonucu elde edemedim:

Normalde saldırı artmaliydi ama artmadı
Class'ın içerisinde "paslanmış kılıç" değişkenini liste olarak vermişsin. Attack fonksiyonunda ise string bir ifadeye eşit olup olmadığını soruyorsun. O yüzden bulamıyor ve if'lere girmeden direkt Attack değerini döndürüyor. "Paslanmış Kılıç" ve "Demir Kılıç" değişkenlerini köşeli parantezler ile liste elemanı olarak tanımlarsan sorun çözülecektir.

Kod:
 @property
 def Attack(self):
  Attack = self.base_attack
  if self.curweap == ['Paslanmış Kılıç']:
   Attack += 5
  elif self.curweap == ['Demir Kılıç']:
   Attack += 10
  elif self.curweap == ['Mr246'nın dambılı']:
   Attack += 99999
  return Attack

Sondan 2. ve 3. satırları almasan da olur. Sayende Python öğreniyorum teşekkürler :D
 
Son düzenleme:
Çözüm

OmarTR2000

Katılımcı Üye
26 May 2022
355
121
Baku
Class'ın içerisinde "paslanmış kılıç" değişkenini liste olarak vermişsin. Attack fonksiyonunda ise string bir ifadeye eşit olup olmadığını soruyorsun. O yüzden bulamıyor ve if'lere girmeden direkt Attack değerini döndürüyor. "Paslanmış Kılıç" ve "Demir Kılıç" değişkenlerini köşeli parantezler ile liste elemanı olarak tanımlarsan sorun çözülecektir.

Kod:
 @property
 def Attack(self):
  Attack = self.base_attack
  if self.curweap == ['Paslanmış Kılıç']:
   Attack += 5
  elif self.curweap == ['Demir Kılıç']:
   Attack += 10
  elif self.curweap == ['Mr246'nın dambılı']:
   Attack += 99999
  return Attack

Sondan 2. ve 3. satırları almasan da olur. Sayende Python öğreniyorum teşekkürler :D
Teşekkürler bir deniyicem


Python öğreniyorum teşekkürler
Ne demek hocam vazifemiz :D

Sorun çözülmüştür teşekkür @Mr246 hocam :)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.