I want to create a loop that generates a different equation for each loop. But when I tried to create a code, it only created the same equations several times.
import random
count=range(random.randint(1,10))
terms_range=range(1,11)
num_terms=random.radint(1,10)
#This is where the calculation will be written
calculation=''
result_from_user=''
signs=''
def sign_generator(x):
#This function will randomly generate the sign
sign=random.randint(1,4)
if sign == 1:
x = '+'
return x
elif sign == 2:
x = '-'
return x
elif sign == 3:
x= '*'
return x
else:
x='/'
return x
for x in count:
while num_terms>0:
terms=random.randint(1,9)
terms=str(terms)
signs=sign_generator(signs)
if num_terms !=1:
calculation=calculation+terms+signs
else:
calculation=calculation+terms
num_terms-=1
print(calculation)
result_from_user=input('= ')
How should I fix my code?
You're getting the same result over and over because you only build one calculation
and then exhaust num_terms
. To fix this you'd need to reset calculation
and num_terms
in each loop:
for x in count:
calculation = ""
num_terms = random.randint(1, 10)
while num_terms > 0:
terms = random.randint(1, 9)
terms = str(terms)
signs = sign_generator(signs)
if num_terms != 1:
calculation = calculation+terms+signs
else:
calculation = calculation+terms
num_terms -= 1
print(calculation)
prints:
7+5-3/5-3
7+4*4
9/4/2
3-8/7-1*4*5-3*5/1
8*9-8
1/1*3+5+3/7
6-9+7-2*7-6
4/7*3-3*9/7*6-3
8*7/8*1+7/2*9/9/6
Going further, the overall code can be simplified quite a bit by using random.choice
to generate the sign
and iterating over a range
to build the terms instead of using a while
loop. That gives you way fewer variables to keep track of and makes the whole thing only seven lines of code:
import random
for _ in range(random.randint(1, 10)):
calculation = ""
for _ in range(random.randint(0, 9)):
calculation += str(random.randint(1, 9))
calculation += random.choice("+-*/")
calculation += str(random.randint(1, 9))
print(calculation)
It appears to work when I try, just fixed misspelling in line 5:
num_terms=random.radint(1,10)
to
num_terms=random.randint(1,10)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.