'How to increment a number with the form x.y.z
I'm having an issue with trying to increment the farthest right number in the form of x.y.z without the use of indexing. I've never worked with a float before that had more than 1 decimal point and don't know how to get this started. I think I would need to convert each individual value into an integer and then use a string to output them.
The final product needs to look something like this:
1.7.9 => 1.7.10
Solution 1:[1]
You'll have a hard time doing this with floats (you can't have 2 decimal places in a float)... I'd suggest you track the x.y.z separately as integers and then you can increment them individually:
x = 1
y = 7
z = 9
print(f"{x}.{y}.{z}")
# "1.7.9"
z += 1
print(f"{x}.{y}.{z}")
# "1.7.10"
Solution 2:[2]
There is no such thing as a "float with more than 1 decimal point". Floats are real numbers. What you are looking for can be accomplished with something like that:
>>> version = "1.7.9"
>>> parts = version.split(".")
>>> parts
['1', '7', '9']
>>> parts[2] = str(int(parts[2]) + 1)
>>> parts
['1', '7', '10']
>>> ".".join(parts)
'1.7.10'
Solution 3:[3]
You can also use an object to store x, y and z :
class xyz:
def __init__(self, x, y, z):
self.x, self.y, self.z = x, y, z
def __str__(self):
return f"{self.x}.{self.y}.{self.z}"
def increment(self):
self.z += 1
obj = xyz(1, 7, 9)
print(obj) # 1.7.9
obj.increment()
print(obj) # 1.7.10
Solution 4:[4]
First thing, you can not have two decimal places in a float, and the easiest way to solve your problem is just using indexing of str.
s = "1.7.9"
print(''.join(s[:-1]+str(int(s[-1])+1)))
But since you don't want to use indexing you can use the following code instead. But using this code is like you are using a hammer to squash a fly. So it is not recommended and this is only because you asked for a way to do it. And remember even inside those functions they use indexing to give the output.
s = "1.7.9"
t = '.'.join([str(int(x)+1 if x in s.rpartition(".") else int(x)) for x in s.split(".")])
print(t)
Solution 5:[5]
You can try this out;
a = '1.7.9'
output = a[:-1]+ str(int(a.split('.')[-1])+1)
print(output) # 1.7.10
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | tdpu |
| Solution 2 | Selcuk |
| Solution 3 | Theo64 |
| Solution 4 | |
| Solution 5 |
