Issue
Hi I am having trouble pulling a variable out of a function and then using it in a mathematical equation. I can use the function usdExRateRand no problem but when try to use the value usdExRate from the function in a nested if statement it only uses the initial usdExRateRand not the newly defined one from the while loop how do i fix this?
import random
def whiles():
cur1 = "NZD"
cur2 = "USD"
usdExRate = round(random.random() * (0.909 - 0.101) + 0.101, 3)
print ("usdExRate Initial = $", usdExRate)
nzdExRate = round(random.random() * (1.909 - 1.101) + 1.101, 3)
print ("nzdExRate Initital = $", nzdExRate)
amt = 1000
amt2 = 0
amtPrev = 0
amt2Prev = 0
def usdExRateRand():
usdExRate = round(random.random() * (0.909 - 0.750) + 0.750, 3)
print ("USD Ex Rate = $", usdExRate,"\n")
usdExRateRand()
def nzdExRateRand():
nzdExRate = round(random.random() * (1.505 - 1.101) + 1.101, 3)
print ("NZD Ex Rate = $", nzdExRate, "\n")
nzdExRateRand()
while amt > 0:
def trade1():
# usdExRate = round(random.random() * (0.909 - 0.101) + 0.101, 3)
print ("TRADE 1")
usdExRateRand()
if usdExRate > 0:
# def trade1():
# usdExRate = round(random.random() * (0.909 - 0.101) + 0.101, 3)
# print (usdExRate)
if (usdExRate * amt > amt2Prev):
print ("My Amount to trade =", cur1," $", amt)
print ("my ",cur2,"rate = $", usdExRate)
trd1 = amt * usdExRate
print ("trade1", cur1,"$", amt," * ",cur2,"$",usdExRate," = $", trd1, "\n")
amt2 = trd1
amtPrev = amt
else:
print ("error reluts in a loss\n")
trade1()
trade1()
def trade2():
print ("TRADE 2")
nzdExRateRand()
if nzdExRate > 0:
if (nzdExRate * amt2 > amtPrev):
print ("My Amount to trade =", cur2," $",amt2,"\n")
print ("my", cur1, "rate = $", nzdExRate)
trd2 = amt2 * nzdExRate
print ("trade2", cur2,"$", amt2," * ",cur1,"$",nzdExRate," = $", trd2, "\n")
amt1 = trd2
amt2Prev = amt2
else:
print ("error results in a loss\n")
trade2()
# amtPrev = amt
# def usdExRateom2():
# usdExRate2 = round(random.random() * (1.909 - 1.101) + 1.101, 3)
# print ("my nzd rate", usdExRate2)
#
# if (trd1 * usdExRate2 < amtPrev):
#
# usdExRate2 = round(random.random() * (1.909 - 1.101) + 1.101, 3)
#
# else:
# trd2 = trd1 * usdExRate2
# print ("trade2 =", trd2)
# usdExRateom2()
whiles()
hopefully i got my indentation right this time when copying over the code the code works in spyder and i get this output as you can see after "my amount to trade" the usd ex rate is always 0.3 not the value above.
TRADE 1
USD Ex Rate = $ 0.761
My Amount to trade = NZD $ 1000
my USD rate = $ 0.3
trade1 NZD $ 1000 * USD $ 0.3 = $ 300.0
TRADE 2
NZD Ex Rate = $ 1.178
error results in a loss
TRADE 1
USD Ex Rate = $ 0.772
My Amount to trade = NZD $ 1000
my USD rate = $ 0.3
trade1 NZD $ 1000 * USD $ 0.3 = $ 300.0
TRADE 2
NZD Ex Rate = $ 1.296
what i would like to do is.
def trade():
usdExRaterand()
this should give me a new usdExRate variable I can then use in the following if statement
Solution
Here's a very vague example that should only demonstrate how you can pass values to your functions and how to return values. I'm not sure what you want to achieve, so please provide more information and I'll update this post.
import random
def usdExRateRand():
return round(random.random() * (0.909 - 0.750) + 0.750, 3)
def nzdExRateRand():
return round(random.random() * (1.505 - 1.101) + 1.101, 3)
def trade1(usdExRate, amtPrev):
if usdExRate * amt > amtPrev:
# Do your calculations.
# Then return the updated amt and previous amt. (If you need them.)
return amt, amtPrev
def trade2(nzdExRate, amtPrev):
if nzdExRate * amt > amtPrev:
# Do your calculations.
# Then return the updated amt and previous amt.
return amt, amtPrev
def main():
amt = 1000
amtPrev = amt
while amt > 0:
usdExRate = usdExRateRand()
nzdExRate = nzdExRateRand()
print("USD Ex Rate = $", usdExRate)
print("NZD Ex Rate = $", nzdExRate)
amt, amtPrev = trade(usdExRate, amtPrev)
amt, amtPrev = trade2(nzdExRate, amtPrev)
main()
Answered By - skrx
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.