我目前正在努力使用简单的代码,它可以使用几秒钟,但我希望允许用户使用分钟,这更容易。这是:
import time
import os
import math
import subprocess
input1 = raw_input("Broj minuta:")
min = input1 * 60
min1 = float(min)
print min1
time.sleep(min1)
os.system("shutdown")
我收到此错误:
Broj minuta:2
Traceback (most recent call last):
File "timer.py", line 8, in <module>
time.sleep(min)
TypeError: a float is required
当我尝试使用下面的代码将其转换为浮动时,它表示睡眠时间很长,如果我选择2分钟,我会得到:
min = input1 * 60
min1 = float(min)
Broj minuta:2
2.22222222222e+59
Traceback (most recent call last):
File "timer.py", line 10, in <module>
time.sleep(min1)
OverflowError: sleep length is too large
答案 0 :(得分:4)
input1 = raw_input("Broj minuta:")
raw_input
返回一个字符串。您需要将其转换为数字,例如
input1 = int(raw_input("Broj minuta:"))
如果你不这样做,假设你输入2
,它仍然是一个字符串而你正在做
input * 60
表示'2' * 60
,它等于'222222222222222222222222222222222222222222222222222222222222'
,它仍然是一个字符串。这就是time.sleep(min)
抱怨
TypeError: a float is required
在第二种情况下,您正在将'222222222222222222222222222222222222222222222222222222222222'
正确转换为浮点数,但值为2.22222222222e+59
,这对于time.sleep
来说太大了。
答案 1 :(得分:2)
(您的追溯必须过时;它会显示time.sleep(min)
(在这种情况下错误是合理的),但您的代码有time.sleep(min1)
。)
问题是raw_input
的结果是一个字符串。当你写input1 * 60
时,你重复60次字符串(即代替120,你得到'222222222222222222222222222222222222222222222222222222'
)。
答案 2 :(得分:1)
您执行转换的时间太晚了。 input1
是一个字符串,并将字符串乘以整数
min = input1 * 60
执行字符串重复:'12' * 60 == '12121212...
相反,转换为float,然后乘以:
min = float(input1) * 60
答案 3 :(得分:0)
raw_input
返回的变量是一个字符串。
要为代码中发生的事情添加更多信息,请参阅示例会话。
In [1]: i = raw_input("Something")
Something20
In [2]: i
Out[2]: '20'
In [3]: type(i)
Out[3]: str
In [4]: i*60
Out[4]: '202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020'
In [5]: float(i*20)
Out[5]: 2.02020202020202e+39
Out [2]
显示字符串'20'
。当我们检查i
的类型str
时,会确认这一点。
现在,在Python中,当您将一个字符串与一个数字x
相乘时,您会得到一个字符串,其中重复了原始字符串的x
次。
这是您的代码中发生的事情。因此,正如在另一个答案中所建议的那样,您需要将输入转换为浮点数。
另一种方法(在Python 2.x上)不使用raw_input()
而是使用input()
In [6]: j = input('Something else?')
Something else?20
In [7]: j
Out[7]: 20
In [8]: j*60
Out[8]: 1200