找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 22141|回复: 8

[已解决] $ x = int(a) * int(b) ValueError: invalid literal for int() with base 10: '0.1'

[复制链接]
发表于 2021-5-9 22:19:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 怀念丶落樱 于 2021-5-10 18:15 编辑

$ x = int(a) * int(b)
ValueError: invalid literal for int() with base 10: '0.1'


我用a 0.1乘b 0.1
$ x = int(a) * int(b)
就这样报错无法计算
将代码改成
$ x = int(a) *b
我用333(不含小数)乘3.6(含小数)
可计算...
有什么办法能使,小数乘小数?

发表于 2021-5-9 22:31:30 | 显示全部楼层
a和b是怎么定义和赋予初始值的?
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2021-5-9 22:39:36 | 显示全部楼层
本帖最后由 怀念丶落樱 于 2021-5-9 23:03 编辑
被诅咒的章鱼 发表于 2021-5-9 22:31
a和b是怎么定义和赋予初始值的?

[RenPy] 纯文本查看 复制代码
default a = ""
default b = ""


a和b自己游戏中输入

我发现用下面这串代码计算结果是错的
$ x = int(a) *b
我输入3*3
结果显示333

我吐了
无解,请问怎么删帖?
我被我自己的想法恶心到了,搞了一晚上。
我为啥要在游戏中加一个乘法运算的解密。


回复 支持 抱歉

使用道具 举报

发表于 2021-5-9 23:32:17 | 显示全部楼层
[RenPy] 纯文本查看 复制代码
$ x = float(a) * float(b)


如果想要对x的输出进行控制,就先把x格式化为字符串。

Ren'Py每帧都会根据a和b的值计算界面上x的值,直接在界面上显示x容易出问题。比如把某个输入的变量删除变成空字符串,就会导致强制转换报错。
解决方案有两个:
一个是代码层面对x的计算做保护,先判断a和b两个字符串是否是纯数字,如果不是则设置默认值为0。
另一个是在设计层面处理,x的值不实时更新,点击某个按钮后才计算。

另外解释下出现333的原因:
python的变量根据初始值自动判断类型,你定义的a和b不是数值而是字符串(空字符串也是字符串)。
用户输入后,a和b的值都是字符“3”。然后int(a)会将字符转为整型数字3。
整型a与字符b相乘,python的计算方式是将字符b重复a次,输出字符串。
回复 支持 抱歉

使用道具 举报

发表于 2021-5-9 23:34:50 | 显示全部楼层
int(val),里面的参数val你要么传入字符串形式的整型数字(如:"1"),要么直接传入数字(如1,或0.1),不要传入字符串形式的小数数字

多去看看python的基本语法吧
回复 支持 抱歉

使用道具 举报

发表于 2021-5-9 23:42:33 | 显示全部楼层
另外我之前回答的int()只是根据你代码里的整型数字写的而已。实际上,你还要考虑小数,以及非数字字符串的输入问题。

我建议你写个函数来专门处理输入的值,并不一定要用int()或float()
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2021-5-10 07:49:46 来自手机 | 显示全部楼层
本帖最后由 怀念丶落樱 于 2021-5-10 07:54 编辑
被诅咒的章鱼 发表于 2021-5-9 23:32
[RenPy] 纯文本查看 复制代码
$ x = float(a) * float(b)


如果想要对x的输出进行控制,就先把x ...

昨天我是设置了一个按钮来计算,还是会报错,是不是我弄错了,我设置的是,按下按钮,jump转跳到计算结果显示界面。哎,上班了,下班再试试吧,谢谢!

回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2021-5-10 07:53:12 | 显示全部楼层
本帖最后由 怀念丶落樱 于 2021-5-10 08:12 编辑
小猪 发表于 2021-5-9 23:42
另外我之前回答的int()只是根据你代码里的整型数字写的而已。实际上,你还要考虑小数,以及非数字字符串的 ...

好的,谢谢,我自己在多研究研。


回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2021-5-10 18:18:33 | 显示全部楼层
$ x = float(a) * float(b)
用这个代码是可以的
谢谢大家的帮助!
回复 支持 抱歉

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2024-12-23 08:38 , Processed in 0.113507 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表