python輸入乙個假分數 隨機生成小學算數題專案

2021-10-13 15:02:32 字數 3164 閱讀 1591

document

gitee**倉庫

題目描述:

通過python語言編寫乙個能夠自動生成小學四則運算的程式(注意是給小學生用的,要是結果出現負數的話他們會很迷茫的!),同時,除了整數外,還要支援真分數的四則運算.

1.程式設計

首先以「1+1=」為例,我們要生成簡單的四則運算題目需要兩個整數或是分數,為了將答案與算式分類,我們分別用兩個列表來儲存。

q用來儲存問題,ans用來儲存答案。我們可以通過random模組生成一定區間裡的隨機數,分數也可以通過隨機生成分子和分母的形式隨機生成。同時分數可以使用fraction模組,可以同時實現分數與整數的運算以及分子和分母的約分。

下面是各個函式的**:

2.實現**

import random

from fractions import fraction

兩個整數的四則運算

def c1(q, ans):

symbol = random.choice(['+', '-', '', '/']) # 生成隨機符號

if symbol == '+':

n1 = random.randint(0, 20)

n2 = random.randint(0, 20)

elif symbol == '-':

n1 = random.randint(0, 20)

n2 = random.randint(0, 20)

n1,n2 = max(n1,n1),min(n1,n2)#防止出現負數

elif symbol == '':

n1 = random.randint(0, 20)

n2 = random.randint(0, 20)

else:

n1 = random.randint(0, 20)

if n1 == 0:

n2 = random.randint(1, 20)

else:

n2 = random.randint(1, n1 + 1)

隨機生成兩個分數

def createf():

fz1 = random.randint(0, 20)

if fz1 == 0:

fm1 = random.randint(1, 20)

else:

fm1 = random.randint(1, 20)

f1 = fraction(fz1, fm1)

fz2 = random.randint(1, 20)

fm2 = random.randint(20, 20)

f2 = fraction(fz2, fm2)

return f1, f2

def f(f):#分數的轉換

a=f.numerator #分子

b=f.denominator #分母

if a%b==0:#為整數

return '%d'%(a/b)

elif a

return '%d%s%d' % (a,'/',b)

else:#為帶分數

c=int(a/b)

a = a - c * b

return '%d%s%d%s%d' % (c,'』',a,'/',b)

兩個分數的四則運算

def c2(q,ans):

symbol = random.choice(['+','-','','/'])

f1,f2 = createf()

if symbol =='+':

while f1+f2>1:

f1,f2 = createf()

elif symbol =='-':

f1,f2 = max(f1,f2),min(f1,f2)#防止出現負數

elif symbol == '':

while f1f2>1:

f1,f2 = createf()

else:

while f1/f2>1:

f1,f2=createf()

def main():

while 1:

print("輸入題目的數量", end=' ')

k = int(input())

p = 100 / k

s = 0

q =

ans =

ans2 =

for i in range(k):

n = random.randint(1, 4)

if n == 1:

c1(q, ans)

g = fraction(ans[i])

else:

c2(q, ans)

g = fraction(ans[i])

for i in range(k):

print("第{}題:{}".format(i + 1, q[i]))

#a = input()

a = '0'

if a == str(ans[i]):

s = s + p

#print("所得的分數為:{}".format(s))

print("正確答案:" + "\n", end="")

for i in range(k):

if str(ans[i]) == str(ans2[i]):

print(q[i] + str(ans[i]))

else:

print("{}{}或{}".format(q[i],str(ans2[i]),str(ans[i])))

if name == 'main':

main()更新公升級: 在原有程式的基礎上,我新增了乙個轉換假分數答案為帶分數答案(儲存在ans2列表中)的函式f(f),以便當學生給出帶分數答案時程式不會認為是錯誤的。def f(f): #分數的轉換

a=f.numerator #分子

b=f.denominator #分母

if a%b==0: #為整數

return '%d'%(a/b)

elif a

return '%d%s%d' % (a,'/',b)

else: #為帶分數

c=int(a/b)

a = a - c * b

return '%d%s%d%s%d' % (c,'』',a,'/',b)`

更新並修改了主函式後**執行結果如下:

效能分析:

python定義乙個分數類,分別完成分數的加減乘除

class faction object def init self,fz 0,fm 1 self.fz fz if fm 0 raise valueerror 分母不能為0 else self.fm fm property def fz self return self.fz property d...

python輸入乙個 輸出2個 問題

在python裡面,如果 後面不是乙個合法的轉移字元,那麼,python會列印兩個 換句話說,python將 也當成普通字元看待,而不是轉義符的標誌 s c py code s c py code len s 總共有10個字元,而不是12個 10反斜槓 是 轉意符 改變後面字元的含義,比如 r 回車...

使用Python製作乙個隨機點名程式

python是一門具有強大演算法的程式語言,裡面自帶了許多庫,這個 所需要的是乙個隨機數的庫。如下。coding utf 8 f int input 請輸入抽取的人數 老師輸入抽取點名的人數g 0 定義乙個變數,用於計數 while g f 乙個while迴圈,可以通過變數小於的值來控制想要抽取幾個...