You need to enable JavaScript to run this app. Python文字游戏练手:如何通过函数按所选职业、武器动态调整角色属性
优惠活动
大模型
产品
解决方案
定价
更多

Python文字游戏练手:如何通过函数按所选职业、武器动态调整角色属性

当前代码的核心运行问题
  • 输入类型错位:input()默认返回字符串,原代码直接拿返回值和数字做大小比较、相等判断,会直接触发类型错误
  • 函数返回值丢失:ChosenPriest函数没有设置返回值,调用后给character变量赋值的结果是None,根本走不到后续的属性计算分支
  • 属性计算逻辑碎片化:原baseStats每次只返回单个属性值,没法输出完整的角色属性集合,后续扩展新职业、新武器要写大量重复的if判断
  • 输入校验逻辑冗余:原选职业的循环靠捕获NameError做判断,绕开了真正的类型校验逻辑,完全达不到输入合法性检查的作用
适配当前函数学习阶段的实现方案

不用引入复杂的面向对象语法,顺着现有函数的逻辑做调整就行,核心思路是把固定的属性配置用字典存储,写一个统一的属性计算函数,输入职业、武器参数直接输出完整属性:

  1. 先把全职业通用的基础属性、各职业的属性加成、各武器的属性加成提前存成字典,后续加新内容只要改字典条目,不用写重复判断
  2. 写专门的属性计算函数:先复制基础属性,再依次叠加职业、武器对应的属性加成,最后返回完整的属性字典
  3. 修正所有输入的类型转换逻辑,输入拿到后第一时间转成整数再做合法性判断
  4. 给原来漏返回值的函数补上返回逻辑,保证外部能拿到正确的职业、武器参数
修正后的核心代码
import time
import random
inventory = []

# 固定配置:所有游戏内的属性常量直接存字典,改起来方便
BASE_STATS = {
    "health": 100,
    "mana": 100,
    "strength": 5,
    "magic": 5,
    "exp": 0
}
CLASS_BONUS = {
    "Priest": {"mana": 20, "magic": 3},
    "Warrior": {"health": 30, "strength": 4},
    "Thief": {"strength": 2, "magic": -2},
    "Ninja": {"strength": 3, "health": 10},
    "Pirate": {"strength": 2, "mana": -10}
}
WEAPON_BONUS = {
    "Magical Book": {"mana": 50},
    "Staff": {"magic": 5},
    "Iron Sword": {"strength": 10},
    "Dagger": {"strength": 3, "magic": -2}
}

def intro():
    print("Hello for playing my game. It is a text based game that I am working on. \n")
    print("I hope you enjoy playing it \n")

def chooseClass():
    print("Please choose a class you would like to play as. Each class has a different background story to them")
    print("-----------------------------------------------------------")
    print("Please use the number given below to select them")
    print("1: Priest\n" "2: Warrior\n" "3: Thief\n" "4: Ninja\n" "5: Pirate\n")
    

def classChosen(starterClass):      
    class_map = {
        1: "Priest",
        2: "Warrior",
        3: "Thief",
        4: "Ninja",
        5: "Pirate"
    }
    selected = class_map.get(starterClass)
    if selected:
        print(f"You have chosen {selected}")
    return selected

def ChosenPriest(var):
    # 仅负责职业对应的剧情交互,不承担返回职业值的额外逻辑
    if var == "Priest":
        selectAns = input("Would you like to know the backstory? \n:Please type 1 :Yes or 2 :No\n:")
        if selectAns == "1":
            print("INC")
    else:
        print("Alright!")
    # 补返回值,保证外部能拿到正确的职业参数
    return var

def Weapons(weapon_choice):
    weapon_map = {
        1: "Magical Book",
        2: "Staff"
    }
    selected_weapon = weapon_map.get(weapon_choice)
    if selected_weapon:
        print(f"You have chosen {selected_weapon}!")
        inventory.append(selected_weapon)
    return selected_weapon

def calculate_final_stats(character, weapon):
    # 复制基础属性,避免直接修改全局的默认属性值
    final_stats = BASE_STATS.copy()
    # 叠加职业属性加成
    for stat, value in CLASS_BONUS[character].items():
        final_stats[stat] += value
    # 叠加武器属性加成
    for stat, value in WEAPON_BONUS[weapon].items():
        final_stats[stat] += value
    return final_stats

# 游戏启动主流程
chooseClass()
userClass = None
while True:
    try:
        x = int(input("What class would you like to play?\n:"))
        if 1 <= x <=5:
            userClass = classChosen(x)
            break
    except ValueError:
        print("Please enter a number between 1 and 5")

# 走职业剧情流程
character = ChosenPriest(userClass)

# 武器选择流程,加输入合法性校验
while True:
    try:
        weapon_input = int(input("What kind of holy weapon would you like to take? \n 1: Magical Book \n 2: Staff \n Use 1 or 2 to select your weapon! :"))
        weapon = Weapons(weapon_input)
        if weapon:
            break
    except ValueError:
        print("Please enter 1 or 2 to select your weapon")

# 计算并展示最终属性
final_stats = calculate_final_stats(character, weapon)
print("Your final character stats:")
for stat, value in final_stats.items():
    print(f"{stat}: {value}")
后续扩展提示
  • 想加新职业、新武器的时候,只要往CLASS_BONUS、WEAPON_BONUS字典里加对应条目,再在选择菜单里加选项就行,不用改核心的属性计算逻辑
  • 后续要加等级、经验值的逻辑,只要在calculate_final_stats函数里再加一段等级属性加成的代码就可以,不需要重写整套属性计算流程

内容的提问来源于stack exchange,提问作者Tone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 12:24:04