@@ -16,7 +16,15 @@ def num_digits(n: int) -> int:
16
16
1
17
17
>>> num_digits(-123456)
18
18
6
19
+ >>> num_digits('123') # Raises a TypeError for non-integer input
20
+ Traceback (most recent call last):
21
+ ...
22
+ TypeError: Input must be an integer
19
23
"""
24
+
25
+ if not isinstance (n , int ):
26
+ raise TypeError ("Input must be an integer" )
27
+
20
28
digits = 0
21
29
n = abs (n )
22
30
while True :
@@ -42,7 +50,15 @@ def num_digits_fast(n: int) -> int:
42
50
1
43
51
>>> num_digits_fast(-123456)
44
52
6
53
+ >>> num_digits('123') # Raises a TypeError for non-integer input
54
+ Traceback (most recent call last):
55
+ ...
56
+ TypeError: Input must be an integer
45
57
"""
58
+
59
+ if not isinstance (n , int ):
60
+ raise TypeError ("Input must be an integer" )
61
+
46
62
return 1 if n == 0 else math .floor (math .log (abs (n ), 10 ) + 1 )
47
63
48
64
@@ -61,7 +77,15 @@ def num_digits_faster(n: int) -> int:
61
77
1
62
78
>>> num_digits_faster(-123456)
63
79
6
80
+ >>> num_digits('123') # Raises a TypeError for non-integer input
81
+ Traceback (most recent call last):
82
+ ...
83
+ TypeError: Input must be an integer
64
84
"""
85
+
86
+ if not isinstance (n , int ):
87
+ raise TypeError ("Input must be an integer" )
88
+
65
89
return len (str (abs (n )))
66
90
67
91
@@ -76,7 +100,7 @@ def benchmark_a_function(func: Callable, value: int) -> None:
76
100
timing = timeit (f"__main__.{ call } " , setup = "import __main__" )
77
101
print (f"{ call } : { func (value )} -- { timing } seconds" )
78
102
79
- for value in (262144 , 1125899906842624 , 1267650600228229401496703205376 ):
103
+ for value in (' 262144' , 1125899906842624 , 1267650600228229401496703205376 ):
80
104
for func in (num_digits , num_digits_fast , num_digits_faster ):
81
105
benchmark_a_function (func , value )
82
106
print ()
0 commit comments