Как вернуть плавающие значения, используя деление на пол
В Python 3 я хочу вернуть единицы измерения целочисленного значения, затем десятки, затем сотни и так далее. Предположим, у меня есть целое число 456, сначала я хочу вернуть 6, затем 5, а затем 4. Есть ли способ? Я попробовал разделение пола и петлю, но не сработало.
2 ответа
Если вы посмотрите на список основных операторов из документации, например, здесь,
Operator Description Example
% Modulus Divides left hand operand by right hand operand and returns remainder b % a = 1
// Floor Division - The division of operands where the result is the quotient in which the digits after the decimal point are removed. But if one of the operands is negative, the result is floored, i.e., rounded away from zero (towards negative infinity): 9//2 = 4 and 9.0//2.0 = 4.0, -11//3 = -4, -11.0//3 = -4.0
Обладая этими знаниями, вы можете получить то, что вы хотите, следующим образом:
In [1]: a = 456
In [2]: a % 10
Out[2]: 6
In [3]: (a % 100) // 10
Out[3]: 5
In [4]: a // 100
Out[4]: 4
Напишите генератор, если вы хотите получать цифры в разных местах вашего кода, основываясь на следующих требованиях.
Если вы не очень хорошо знакомы с генератором Python, взгляните на https://www.programiz.com/python-programming/generator.
"Здесь get_digits() - это генератор.
def get_digits(n):
while str(n):
yield n % 10
n = n // 10
if not n:
break
digit = get_digits(1729)
print(next(digit)) # 9
print(next(digit)) # 2
print(next(digit)) # 7
print(next(digit)) # 1
"Если вы хотите перебрать цифры, вы также можете сделать это следующим образом.
for digit in get_digits(74831965):
print(digit)
# 5
# 6
# 9
# 1
# 3
# 8
# 4
# 7
" Краткий обзор его использования (на интерактивном терминале Python3).
>>> def letter(name):
... for ch in name:
... yield ch
...
>>>
>>> char = letter("RISHIKESH")
>>>
>>> next(char)
'R'
>>>
>>> "Second letter is my name is: " + next(char)
'Second letter is my name is: I'
>>>
>>> "3rd one: " + next(char)
'3rd one: S'
>>>
>>> next(char)
'H'
>>>