从标准输入读取浮点值并在time.sleep中使用

时间:2014-01-15 02:47:38

标签: python input

我目前正在努力使用简单的代码,它可以使用几秒钟,但我希望允许用户使用分钟,这更容易。这是:

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

4 个答案:

答案 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