我不明白当我想将一个计算字符串转换为浮点时,为什么会出现值错误。我想要一个问题,因为我很自大
(我的代码的目的是创建随机方程,根据问题编号增加级别。)(我还是一个初学者,如果我的代码是非理论性的(法语也是如此),我很抱歉。)
:)
这是我的代码:
(输入)
from random import *
def Numéro_Question():
global NuméroQuestion
NuméroQuestion+=1
print("\t~ Question {} ~\t\n".format(NuméroQuestion))
def Calcul2():
PremierChiffre=randint(0, NuméroQuestion*5+5)
Question=str(PremierChiffre)
for i in range(1,NuméroQuestion+1):
SigneDeCalcul=["+","*","-"]
SigneChoisi=str(choice(SigneDeCalcul))
x=str(randint(0, NuméroQuestion*5+5))
Question=Question+SigneChoisi+x
print(type(Question))
QuestionNumérique=float(QuestionNumérique)
QuestionEcrite=Question+" = "
Question=float
Réponse=input(QuestionEcrite)
NuméroQuestion=0
Raté=0
while Raté<3:
Numéro_Question()
Calcul2()
print("\n\n")
(产出)
(每次执行程序时,输出都会更改,因为它会给出随机数)
~ Question 1 ~
<class 'str'>
回溯(最近一次呼叫最后一次):
文件“main.py”,ligne 26,in<;模块>强>
Calcul2()
文件“mai.py”,ligne 17,在Calcul2中
QuestionNumérique=float(QuestionNumérique)ValueError:无法将字符串转换为浮点:“3*6”
这是因为当您使用
float(my_string)
时,只有当my_string
可以转换为实际浮点时,它才会起作用。它不能为你做乘法运算幸运的是,有一个非常有用的python函数可以接受字符串并将其作为代码运行。它被称为
eval
例如,
eval("12 + 3")
将返回15
只需使用
eval
而不是float
,如下所示:总之,您希望“计算”(
eval
)数字问题,而不是“转换”(float
)它警告:正如其他人指出的那样,
eval
是“不安全的”。通常,将任意字符串作为代码进行计算是不安全的更新:我在早些时候吃薯条的时候想到了这个,我有一个疯狂的想法
好的,在Python中,您可以在子流程中执行shell命令并通过管道传递结果。(
os.popen
-见here)。假设运行python的机器使用Bash作为外壳,我们可以使用Bash的arithmetic expression,这(我认为)可能更容易防止任意输入下面是它的样子:
此代码仍然很危险您必须确保
QuestionNumérique
字符串包含“全局关闭的”(
和)
括号,因为有人很容易提供如下有害输入:如果您确实可以确保输入字符串具有正确的闭括号,那么这应该比
eval
更安全,因为bash算术表达式只执行算术运算相关问题 更多 >
编程相关推荐