发布可以关闭。事实证明我弄乱了一些未知的东西,因为现在我重试了,int()
函数正在按我的意愿工作。
`
`
这是我写的一小段代码:
def damagecalculating(self):
self.damage = random.randrange(1,100) * self.weapondamage / 5
self.damage = int(self.damage)
(在这里使用长词来说明我在做什么)
所以我正在做的是计算玩家在攻击中造成的伤害。但是我想要一个整数而不是浮点数,所以不得不添加额外的行。
由于某种原因,这会返回一个浮点数:
self.damage = int((random.randrange(1,100) * self.weapondamage) / 5)
我不明白,因为我看到的是random.randrange(1,100)
被计算出来,然后找到self.wepdamage
,因此公式变为,例如:55 * 10 / 5
。< / p>
为什么这会首先返回一个浮点数(我发现它与/
有关)?为什么int()
不起作用?因为int(55*10/5)
确实返回一个整数。
我确实找到了http://www.stackoverflow.com/questions/17202363/int-conversion-not-working,但这并没有回答我的问题,为什么或是否可以在一行中完成。
编辑:
我真的不明白为什么会这样做,但这是一些要求的完整代码。请注意,我对编程非常陌生,可能有很多东西可以做得更好。它还远未完成。
import random
class playerstats:
def usepotion(self):
heal = random.randrange(100,500)
self.health = self.health + heal
self.pots -= 1
print('The potion healed', str(heal) +'!')
print(self.name, 'now has', str(self.health), 'health.')
def minushealth(self, amount):
self.health = self.health - amount
def damagecalc(self): ### HERE IS THE PROBLEM ###
self.damage = random.randrange(1,100) * self.wepdamage / 5
self.damage = int(self.damage)
name = ''
health = 0
weapon = ''
wepdamage = 5
damage = 0
pots = 0
def printdata():
print(player.name, 'health =', player.health)
print(player.name, 'potions =', player.pots)
print()
print(opp.name, 'health =', opp.health)
print(opp.name, 'potions =', opp.pots)
print()
def setgamedata():
player.name = input('Set player name: ')
player.health = int(input('Set player health (1000): '))
player.weapon = input('Set player weapon name: ')
player.wepdamage = int(input('Set player damage multiplier (5 = normal): '))
player.pots = int(input('Set number of potions for player: '))
print()
opp.name = input('Set opponent name: ')
opp.health = int(input('Set opponent health (1000): '))
opp.weapon = input('Set opponent weapon name: ')
opp.wepdamage = int(input('Set opponent damage multiplier (5 = normal): '))
opp.pots = int(input('Set number of potions for opponent: '))
print()
def resetgamedata():
player.name = input('Player name currently is: ' + player.name + '. Set player name: ')
player.health = int(input('Player health currently is: ' + str(player.health) + '. Set player health (1000): '))
player.weapon = input('Player weapon currently is', player.weapon, 'Set player weapon name: ')
player.wepdamage = int(input('Player damage multiplier currently is: ' + str(player.wepdamage) + '. Set player damage multiplier: '))
player.pots = int(input('Player currently has ' + str(player.pots) + ' potions. Set player potions: '))
print()
opp.name = input('Opponent name currently is: ' + opp.name + '. Set opponent name: ')
opp.health = int(input('Opponent health currently is: ' + str(opp.health) + '. Set opponent health (1000): '))
opp.weapon = input('Opponent weapon currently is', opp.weapon, 'Set opponent weapon name: ')
opp.wepdamage = int(input('Opponent damage multiplier currently is: ' + str(opp.wepdamage) + '. Set opponent damage multiplier: '))
opp.pots = int(input('Opponent currently has ' + str(opp.pots) + ' potions. Set opponent potions: '))
print()
def menuoptions():
print('1. Start new game')
print('9. Quit')
print()
def battleoptions():
print('1. Attack')
print('2. Use potion')
print('3. Change stats')
print('9. Abandon game')
print()
### ACTUAL GAME CODE STARTS HERE ###
# Set objects
player = playerstats()
opp = playerstats()
print('- - - - - - - - - - - - - - - -\n')
print('Welcome to the game!\n\n')
print('Entering main menu\n')
while True:
menuoptions()
choice=int(input('Enter number: '))
print()
while True:
if choice == 1:
setgamedata()
print('Starting game now!')
while player.health > 1 and opp.health > 1:
battleoptions()
choice = int(input('Enter number: '))
print()
# Execute player move
if choice == 1:
printdata()
elif choice == 2:
player.usepotion()
elif choice == 3:
resetgamedata()
elif choice == 9:
print('Quit game')
input('Press enter to return to main screen')
break
else:
print('No valid choice made')
# Execute opponent move
if opp.health < 200:
oppmove = 1
else:
oppmove = 0
if oppmove == 1:
opp.usepotion()
else:
print('nothing here')
##### ATTACK PLAYER
### SOMETHING HERE WHEN PERSON REACHED < 0 HEALTH
if choice == 9:
print('\nQuit?! Okay fine\n')
print('Your stuff was not saved, good luck with that.\n')
input('Press enter to close screen')
import sys
sys.exit()
input('')
答案 0 :(得分:0)
您遇到的问题是,在Python 3.x中,除法运算符/
执行真正的除法 - 即返回的值为float。如果你想要Python 2.x的行为,那就是整数除法使用//
运算符。注意,如果被除数和除数是整数,则//
除法结果将为int。
>>> 5 / 10
0.5
>>> 5 // 10
0
>>> type(5 // 10)
<class 'int'>
对于浮点数,//
运算符仍然返回浮点数:
>>> 5.0 // 10
0.0
>>> 5 // 10.0
0.0