2012-06-26 3 views
0

Я работаю над проектом fun-project, с которым я буду выполнять некоторые вычисления, и мне нужна помощь.Выбор части строки для вычислений (python)

один модуль из моей программы:

def ARK(rawArk): 
    refArk = rawArk/200 
    arkTrit = refArk*300 
    arkMeg = refArk*333 
    arkZyd = refArk*166 
    print "Totals from your Arkonor:" 
    print "Tritanium=", arkTrit 
    print "Megacyte=", arkMeg 
    print "Zydrine=", arkZyd 
    return arkTrit, arkMeg, arkZyd 

Прямо сейчас это просто делает простое деление и умножение. Я хочу сделать это с помощью остатков.

Так что если refArk = rawArk/200 'дает в общей сложности 16.3, я хочу иметь возможность разделить 16.0 и 0.3 и использовать их в качестве отдельных переменных для отдельных вычислений.

До сих пор:

def ARK(rawArk): 
    refArk = float(rawArk/200) 
    arkTrit = refArk*300 
    arkMeg = refArk*333 
    arkZyd = refArk*166 
    print "Totals from your Arkonor:" 
    print "Tritanium=", arkTrit 
    print "Megacyte=", arkMeg 
    print "Zydrine=", arkZyd 
    strval = str(refArk) 
    head,tail = strval.split(".") 
    whole = float(head) 
    frac = float("."+tail) 
    print whole 
    print frac 
    return arkTrit, arkMeg, arkZyd 

def main(): 
    rawArk=input("How much Arkonor?") 
    ARK(rawArk) 
    return 

main() 

ИСПОЛЬЗОВАНИЕ '450', как мой входного значения

возвращает

How much Arkonor?450 
Totals from your Arkonor: 
Tritanium= 600.0 
Megacyte= 666.0 
Zydrine= 332.0 
2.0 
0.0 

2.0 является правильным, но 0.0 должно быть 0,25

Удаление float() из «rawArk/200» выплевывает ошибку:

How much Arkonor?450 
Totals from your Arkonor: 
Tritanium= 600 
Megacyte= 666 
Zydrine= 332 

Traceback (most recent call last): 
    File "E:\eve stuff\Calculator\test.py", line 23, in <module> 
    main() 
    File "E:\eve stuff\Calculator\test.py", line 20, in main 
    ARK(rawArk) 
    File "E:\eve stuff\Calculator\test.py", line 11, in ARK 
    head,tail = strval.split(".") 
ValueError: need more than 1 value to unpack 
+3

http://docs.python.org/library/functions.html#divmod – tMC

ответ

1

Численно

val1 = 22.0 
val2 = 7.0 
whole,frac = divmod(val1,val2) 
frac = frac/val1 

Вид хака, но со строками

val = 22.0/7.0 
strval = str(val) 
head,tail = strval.split(".") 
whole = float(head) 
frac = float("."+tail) 

либо способом

>>> frac 
0.14285714286000001 
>>> whole 
3.0 
+0

Спасибо, ребята! Всегда быстрая реакция! – user1483602

+0

Не нужно бросать «кортеж» в ваше хакерское решение (Python распакует список так же легко, как кортеж). – mgilson

+0

ура не понял –

0

Следующая сессия в IDLE должна показать, как решить вашу проблему.

>>> lis=str(refArk).split('.') 
>>> lis[-1]='.'+lis[-1] 
>>> map(float,lis) 
[16.0, 0.3] 
1

Может быть первое использование раунд функция затем использовать сплит

refArk = refArk.split(".") 
1

Почему бы не просто сделать:

intpart=int(variable) 
decimalpart=variable-intpart 

Я думаю, это, чтобы быть более эффективным, чем литье в строку, а затем расщепление.

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