2014-01-15 2 views
1

저는 현재 간단한 코드로 어려움을 겪고 있지만 초 단위로 작동하지만 사용자가 분을 대신 사용하도록 허용하기 때문에 훨씬 쉽습니다. 여기있다 :표준 입력에서 float 값을 읽고 time.sleep에서 사용

Broj minuta:2 
Traceback (most recent call last): 
    File "timer.py", line 8, in <module> 
    time.sleep(min) 
TypeError: a float is required 

나는 아래의 코드를 사용하여 떠 변환을 시도, 그것은 수면 시간이 큰, 내가 선택하는 경우가이라고 말한다 :

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") 

나는이 오류 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 문자열을 반환합니다. 이렇게하지 않으면 당신은 당신이 2을 입력하면 여전히 문자열이 될 것이다,라고,이

input1 = int(raw_input("Broj minuta:")) 

처럼 숫자로 그 변환 내버려 필요하면

input * 60 

을하고있다 '2' * 60을 의미하며 '222222222222222222222222222222222222222222222222222222222222'과 같으며 여전히 문자열입니다. time.sleep(min) 두 번째 경우

TypeError: a float is required 

, 당신은 제대로 float로 '222222222222222222222222222222222222222222222222222222222222'를 변환하는 불평, 값이 time.sleep에 대한 큰 요오 ... 인, 2.22222222222e+59 이유입니다.

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입니다. 이제 파이썬에서 문자열에 숫자 x을 곱하면 x 곱하기 문자열이 반복됩니다.

이것은 코드에서 발생했습니다. 따라서 다른 답변에서 제안한 것처럼 입력을 실수로 전달해야합니다.

또 다른

는이 일의 방법은 (파이썬 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 
관련 문제