首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3卫生系统

Python3卫生系统
EN

Code Review用户
提问于 2018-05-10 13:29:15
回答 2查看 3K关注 0票数 4

我为我正在创建的游戏做了一个医疗系统的代码。我自己做的,我想要一些关于如何使它变得更好的批评。谢谢你的收看。

代码语言:javascript
复制
## Health system
import time
SH = 100
PA = True
while PA == (True):
  DMG = input("How much damage would you like to take?" )
  Output = int(SH) - int(DMG) 
  if Output == (80):
    print("You took 20 damage!")
    print(" --------------")
    print("|■■|■■|■■|■■|  |")
    print(" --------------")
  elif Output == (60):
    print("You took 40 damage!")
    print(" --------------")
    print("|■■|■■|■■|  |  |")
    print(" --------------")
  elif Output == (40):
    print("You took 60 damage!")
    print(" --------------")
    print("|■■|■■|  |  |  |")
    print(" --------------")  
  elif Output == (20):
    print("You took 80 damage!")
    print(" --------------")
    print("|■■|  |  |  |  |")
    print(" --------------")
  elif Output == (0):
    print("You took 100 damage!")
    print(" --------------")
    print("|  |  |  |  |  |")
    print(" --------------")
    print("You died!")
  else:
    print("That isn't a command")

  PA = input("Would you like to play again? |Y/N| ")
  if PA == ("Y"):
    PA = True
  elif PA == ("N"):
    PA = False
    print("The program will now close")
    time.sleep(5)
  else:
    print("That is not a command...")
EN

回答 2

Code Review用户

发布于 2018-05-10 15:20:04

我得先说,问你想要承受多少损失是很奇怪的,我的答案永远是零,你知道!

您的变量名可能更具有描述性。

我知道DMG意味着损害,SH会..。健康的东西?

我想你明白我的意思了,如果我们不知道变量名是什么意思,就很难搞清楚它的作用。

考虑到PEP8的指导方针,您的变量不应该包含大写。

所以我会改变:

代码语言:javascript
复制
DMG -> damage
SH -> total_health
Output -> remaining_health
PA -> play_again

在你的输入中,你会问应该造成多大的伤害。有更多的选项是无效的比有效的。我的意思是,我可以输入0,20,40,60,80,100,但我不能输入任何其他数字,所以我面临"That isn't a command"错误信息的可能性比其他任何数字都大。

如果唯一的选项是从0到100的值,它们是20的倍数,那么您应该在您的消息中指定它:

代码语言:javascript
复制
"How much damage would you like to take? [0,20,40,60,80,100]"

目前,Output变量没有真正的优势。你想要打印出造成了多少伤害,以及一个与剩余生命相对应的健康条。

如果损坏== 20:打印(“您受了20点伤害!”)

或者,更好的是,使用.format方法。

代码语言:javascript
复制
print("You took {0} damage!".format(str(damage))

然后你就可以打印健康条了。我不想详述细节,但是您可以编写一个像print_remaining_health_bar(total_health,remaining_health)这样的函数,它可以根据参数进行打印,而不是每次重复这段代码。

总之,您可以删除整个if/ and业务(除了输入验证(这是很重要的),并拥有:

代码语言:javascript
复制
print("You took {0} damage!".format(str(damage))
remaining_health = total_health - damage
print_remaining_health_bar(total_health,remaining_health)

您的代码也有一个小问题。当被问到我是否想再玩一次,如果我输入一个无效的命令,我会重新开始游戏。

票数 12
EN

Code Review用户

发布于 2018-05-11 12:43:35

代码的主要问题是无法重用它或重用它的任何部分(除了通过导入您设计的模块来导入PASH之外,它们显然不能很好地使用)。

我建议您根据函数重新设计代码(这是最低限度的,否则我更喜欢面向对象的方法,即使有些人可能会反对)。

你宣称是PA = True。这意味着它是一个常量,但在后面的代码中,您将编写PA = input("Would you like to play again? |Y/N| ") .这没有道理。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/194106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档