【发布时间】:2020-09-30 15:00:57
【问题描述】:
好的,我已经解决了几天,无法自己解决。
Python 3 并在下面处理这个 sn-p 代码。我的问题是变量类型和用户输入。这段代码是我希望用户(主要是我)能够使用有意义的变量名称(地球质量的“m_earth”和类似数量)作为“F1”计算的输入,以及其他我想使用的......如果......我可以先让这部分工作。
我尝试过使用“float”和“int”,但它确实会产生其他我无法修复的错误。
下面包含的代码是使用此代码时发生的情况。
任何人有一些建议...拜托?
谢谢
G = float(6.674E-11)
# All masses are in Kg
m_earth = 5.972E24
m_moon = 7.345E22
m1 = input('Enter the first mass ')
print(m1, 'Kg')
m2 = input('Enter the second mass ')
print(m2, 'Kg')
r = input('Enter the center-to-center distance from mass m1 to mass m2 ')
F1 = G * m1 * m2 / r ** 2
print('The gravitational force is ', F1, "N")
Enter the first mass m_earth
m_earth Kg
Enter the second mass m_moon
m_moon Kg
Enter the center-to-center distance from mass m1 to mass m2 3E12
Traceback (most recent call last):
File "C:/Users/xyz/PycharmProjects/My Python Programs/try it.py", line 15, in <module>
F1 = G * m_earth * m_moon / r ** 2
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
进程以退出代码 1 结束
【问题讨论】:
-
快速解决方法是在 F1 计算之前添加
m1 = eval(m1)和m2=eval(m2)行。只要您是唯一的用户并且您知道您已经定义了哪些变量,它就可以工作并且没问题 -
input()返回一个字符串,您不能使用int或float进行乘法、加法等操作。 -
谢谢....我按照下面的添加了--- r = input('输入质量m1到质量m2的中心距') m1 = eval(m1) m2 = eval(m2) F1 = G * m_earth * m_moon / r ** 2 --------- 我收到以下错误:“ F1 = G * m_earth * m_moon / r ** 2 TypeError: unsupported ** 或 pow() 的操作数类型:'str' 和 'int' "
-
stackoverflow.com/a/2376520/12479639 这是众多答案之一,可以让您了解如何解决它。
-
顺便说一句,如果您希望其他人会使用您的程序,切勿在未经检查的用户输入上使用
eval。这可能非常危险。
标签: python-3.x variables type-conversion user-input