Python中int变量与float百分比值相乘得到重复字符串如何解决?
问题根源
- 第一处错误:
random.randint()要求传入整数参数,你传入的7.0、10.0为浮点数,会直接触发类型报错。如果需要生成整数攻击力,参数改为7、10即可;如果需要浮点攻击力,换用random.uniform(7,10)。 - 第二处核心错误:你通过
format方法将百分比数值转成了字符串类型存入trl_cls_wpn_dmg,Python 中「数字 * 字符串」的逻辑是将字符串重复对应次数,这就是你得到重复拼接字符串结果的原因。
正确实现方案
所有数值计算环节统一使用数字类型,仅在需要向用户展示结果时再做字符串格式化处理,示例代码如下:
- 生成基础攻击力
import random if act_trl_cls == trl_cls[0]: # 按需二选一: # 方案1:生成7-10的整数攻击力 trl_atk_pwr = random.randint(7, 10) # 方案2:生成7-10的浮点攻击力 # trl_atk_pwr = random.uniform(7, 10)
- 生成武器百分比加成
if act_trl_cls == trl_cls[0]: trl_cls_wpn_ran = random.uniform(0.01, 0.05) # 不要提前转字符串,保留浮点类型用于后续计算
- 计算最终伤害值
# 用lower()简化大小写判断逻辑 if fight_confirmation.lower() == "y": # 先做数值计算 dmg_bonus = trl_atk_pwr * trl_cls_wpn_ran total_dmg = trl_atk_pwr + dmg_bonus # 仅在需要展示时格式化保留两位小数 formatted_total = "{:.2f}".format(total_dmg) # 后续使用formatted_total做输出即可
内容的提问来源于stack exchange,提问作者George Drew
相关产品推荐
相关产品推荐

