Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用嵌套IF语句进行基于文本的RPG技能点分配_Python_Python 3.x_Text Based - Fatal编程技术网

在python中使用嵌套IF语句进行基于文本的RPG技能点分配

在python中使用嵌套IF语句进行基于文本的RPG技能点分配,python,python-3.x,text-based,Python,Python 3.x,Text Based,我正在创建一个基于文本的RPG,玩家从600技能点开始,在6技能之间分配 因此,我首先将值600分配给skill\u points变量 skill\u points=600 然后我为每个技能变量指定一个默认值 skill\u 1=0 skill_2=0 skill\u 3=0 现在我要求玩家输入第一个技能 skill1\u input=int(输入(“技能1:”) 我更新变量的值 skill\u 1=skill\u 1+skill1\u输入 skill\u points=skill\u poin

我正在创建一个基于文本的RPG,玩家从600技能点开始,在6技能之间分配

因此,我首先将值600分配给
skill\u points
变量

skill\u points=600

然后我为每个技能变量指定一个默认值

skill\u 1=0
skill_2=0
skill\u 3=0

现在我要求玩家输入第一个技能

skill1\u input=int(输入(“技能1:”)

我更新变量的值

skill\u 1=skill\u 1+skill1\u输入

skill\u points=skill\u points-skill1\u输入

然后我使用if语句检查提交的数字是否高于剩余的可用技能点,如果没有,它会提示您输入下一个技能

如果技能输入>技能得分:

打印(“无效”)

else:

skill\u 2input=int(输入(“skill 2:”)

嵌套的IF/ELSE语句在所有6技能中重复,直到您分配所有分数。它是在一个while循环中,所以如果你没有使用你所有的技能点,它会从第一个技能开始

然而,它非常挑剔。起初,我在每项技能上加了100分,效果很好。当我将100点放入第一个技能,然后将200放入下一个技能时,它会打印无效,即使剩下500点,200不超过500

有多个类似的场景,在这些场景中,数学运算应该正常工作,但程序仍然打印出无效


目前的做法是什么?我是否应该使用if语句来设计它?

使用for循环而不是嵌套的if语句可以更好地实现这一点,我会使用数组来实现这些技能

skill_points = 600
skills = []
skill_inputs = 0
for i in range(6):
    skill_input = int(input("Skill %i: "%(i+1)))
    if skill_inputs + skill_input > skill_points:
        print("Not Valid")
        break
    else:
        skills.append(skill_input)
        skill_inputs += skill_input

我按照您的要求重新编写了您的代码及其功能,但作为一项建议,在编写代码之前,请确保您的程序完全符合您想要构建的内容(即使您还不知道构建它的工具。这也会让您学到更多!)

如果代码本身重复,可能有更好的编写方法。如您所见,该代码基本上会重复6次

您可以将其替换为:

skill_points = 600
skill_base = []
skill = 0
for i in range(6):
    if sum(skill_base) == skill_points:
        print("Values stored successfully!")
        break
    if sum(skill_base) > skill_points:
        print("Not valid")
        break
    skill = int(input(f'skill_ {str(i+1)}: '))
    skill_base.append(skill)
if sum(skill_base) == skill_points:
    print("Values stored successfully!")

使用条件语句没有任何错误,如果它们很挑剔,那么逻辑一定是错误的。有时候,用铅笔和纸一行一行地看一遍是有帮助的——你是翻译,记录结果。。。您的一个作业中可能存在名称错误。那种重复的代码很容易出错。考虑使用6种技能列表:<代码> SkyListList= [0,0,0,0,0,0] < /Cord>。每次获得新值时,重新计算列表的和:
if sum(skill_list)>600:
,而不是将和保存在单独的变量中。这确实是一个bug的来源。编辑的代码肯定是一个很大的改进,我建议完全删除详细版本,尤其是在给初学者提供建议时。详细是什么意思?详细:包含超过必要的单词:冗长(Meriam Webster定义)通常用于指比实际长度长得多的代码。请注意,在编程过程中,冗长并不总是坏事,但在这种情况下,存在大量容易出错的重复。