2016-04-01 2 views
0

Я создал скрипт, который должен выполнять простое математическое жонглирование путем переупорядочения чисел.Пожалуйста, разрешите python «magic» в этом вычислении

Что он должен делать:

x = 777.0 
y = 5 
calc = x/y # 155.4 

... псевдокод:

Rearrange numbers (last digit + first) = 555. 
Difference from 777 and 555 = 222 
Add 222 to 555 = 777 

В основном он должен воссоздать оригинальную переменную, не делая реальный расчет, но вместо того, чтобы просто переставить номера и добавить.

Из-за конструкции сценария я ожидал, что он будет работать только с 4-значными цифрами, такими как 333.3. Оказывается, он (кажется) работает также с цифрами вроде 2543.6452, которые кажутся невозможными хотя бы из моего (не академического) взгляда. Может кто-нибудь, пожалуйста, скажите мне, что здесь происходит? Правильно ли работает код или я создал что-то, чего я просто не понимаю? Это похоже на иллюзию. : D

x = 5.0 
y = 7345.3297 
z= y/x 
print "Initial Value = " + str(y) 
print "Calculate:" 
print str(y) + "/" + str(x) 
print z # 177.6 
print 
a = int(str(z)[0]) 
print "First Number = " + str(a) 
print 
b = int(str(z)[1]) 
c = int(str(z)[2]) 
print "In between = " + str(b) + str(c) 
d = int(str(z)[-1]) # treat z as string, take first string after . from z and format it back to int 
print "Last Number = " + str(d) 
print 
print "Rearrange Numbers" 
res = str(a+d) +str(b) +str(c) 
to_int = int(res) 
dif = y - to_int 
add = to_int + dif 
print "number = " + str(add) 
+2

Итак, код делает именно то, что вы хотите, чтобы он сделал ..... и ... вы хотите знать, как он это делает? – DavidG

+0

Не совсем. Он делает слишком много и слишком хорошо. : D Если, например, я беру номер 23135.34674 и выполняю вычисления, он должен иметь совсем другой результат, чем 23135.34674. Код предназначен (по крайней мере, я ожидал, что) работает только с «симметричными» значениями, такими как 666.666 или 888.8. Мне кажется, что мой код принимает только переменную y и печатает ее как результат. : D Значение «in_between» учитывает только вторую и третью цифры. Невозможно получить правильный результат с большими числами. – Horst23

ответ

1

Давайте сделаем замену здесь. Нижние линии чтения:

dif = y - to_int 
add = to_int + dif 

Это можно записать в одну строку, как:

add = y - to_int + to_int 

или:

add = y 

Так ты все это «волшебство», а затем полностью его игнорировать для печати того, с чего вы начали. Вы можете положить что-нибудь выше этого, весь этот код в конце будет напечатан y :-)

+0

Почему это не так? Если to_int равно 555, а y - 777, я ожидаю, что это будет 222. Если вы запустите код с более длинным (несимметричным) поплавком, он должен вывести что-то совершенно другое, потому что осталось только части z. Все дальнейшие расчетные базы на z. С «dif = y - to_int» я хочу только вычесть перестановку z из y. – Horst23

+1

Я не совсем уверен, что понимаю комментарий. Действительно, dif - y - to_int. Но я не уверен, почему это имеет значение. В конце вы печатаете количество, называемое «добавить», это количество * точно * равно y. Чтобы продемонстрировать это, перед линией 'dif = y - to_int' сделайте что-то вроде' to_int = to_int * 129736912876348723564', и код по-прежнему будет просто печатать 'y' в конце. (Если это не вызывает переполнение int/float) – Xirtaminu

+0

Я тестировал значение diff сейчас, и это не то же самое, что и y! Мне кажется, что моя теория верна, и каждый расчет, основанный на числе/5, можно отменить, не вычисляя результат * 5, а вместо этого переставляя числа. Является ли это сумасшедшим или это моя иллюзия иллюзии монстра-спагетти ?! o_0 – Horst23

Смежные вопросы