2014-01-15 50 views
1

我目前正在用簡單的代碼掙扎,它可以在秒內工作,但我希望允許用戶使用分鐘,而這更容易。那就是:從標準輸入中讀取浮點值並在time.sleep中使用。

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 
+1

這是不相關報告的問題,但一般來說,我建議避免使用「分」作爲變量名稱,因爲它是一個最小內置函數。 – farzad

回答

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'爲float,但價值2.22222222222e+59,這是tooo大的time.sleep

2

(你回溯必須是過時的,它顯示time.sleep(min)(在這種情況下,錯誤是有道理的),但你的代碼有time.sleep(min1)。)

的問題是,raw_input的結果是一個字符串。當你寫input1 * 60時,你重複該字符串60次(即代替120,你得到'222222222222222222222222222222222222222222222222222222')。

1

您正在執行轉換太遲。 input1是一個字符串,並用一個整數

min = input1 * 60 

串乘以確實串重複:'12' * 60 == '12121212...

相反,轉換爲浮動,然後乘以:

min = float(input1) * 60 
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