You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy文本输入转换错误:开发战锤骰子掷骰器时int与str比较报错

战锤骰子掷骰器代码修复方案

你遇到的TypeError: '>=' not supported between instances of 'int' and 'str'报错核心原因是Kivy的TextInput组件返回的文本内容默认为字符串类型,无法直接和整数类型的骰子点数做大小比较。同时你的代码还存在其他逻辑错误,以下是完整修复方案:

需修改的核心问题

  • 缺失random库导入,无法调用random.randint生成随机点数
  • 未将输入框拿到的rolls(掷骰次数)、hits(命中阈值)转为整数类型
  • 循环逻辑错误:for i in (rolls)是遍历字符串的单个字符,没有按指定次数掷骰子
  • 计数语法错误:success+1不会修改原变量值,需要写成success += 1
  • 缩进错误:判断失败的else应该和if对齐,而非和for循环对齐
  • 全局变量修改需要加global声明,否则会被识别为局部变量报错

修复后完整代码

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
import random

# 更规范的做法是把计数作为类属性,这里保留你原有的全局变量写法做最小修改
success = 0
fails = 0

class mygridlayout(GridLayout):
    def __init__(self, **kwargs):
        super(mygridlayout, self).__init__(**kwargs)
        self.cols = 2
        self.add_widget(Label(text="掷骰次数"))
        self.rolls = TextInput(multiline=False)
        self.add_widget(self.rolls)

        self.add_widget(Label(text="命中阈值(大于等于该值即命中)"))
        self.hits = TextInput(multiline=False)
        self.add_widget(self.hits)

        self.submit = Button(text="开始掷骰", font_size=32)
        self.submit.bind(on_press=self.press)
        self.add_widget(self.submit)

    def press(self, instance):
        global success, fails
        # 每次掷骰前重置计数,删除的话会累计历史结果
        success = 0
        fails = 0
        # 输入转整数,加简单容错避免输入非数字报错
        try:
            rolls_count = int(self.rolls.text)
            hit_threshold = int(self.hits.text)
        except ValueError:
            self.add_widget(Label(text="请输入有效的数字!"))
            return
        
        # 按指定次数掷骰
        for _ in range(rolls_count):
            die = random.randint(1, 6)
            if die >= hit_threshold:
                success += 1
            else:
                fails += 1

        print(f"{success} 次成功,{fails} 次失败")
        self.add_widget(Label(text=f"本次结果:{success} 成功,{fails} 失败"))

class myapp(App):
    def build(self):
        return mygridlayout()

if __name__ == '__main__':
    myapp().run()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:54:03