如何确保Python中num2是num1的因数以实现整数除法测试?
除法测试程序:确保除数是被除数因数的解决方案
你的代码目前仅保证被除数num1大于等于除数num2,但未添加逻辑确保num2是num1的因数,因此会出现除法结果为小数的情况。以下是两种可行的修改方案:
方案1:循环生成符合条件的随机数
通过while循环持续生成num1和num2,直到满足num1 >= num2且num1 % num2 == 0(余数为0表示整除):
import random import replit from csinsc import * def add(num1,num2): return num1 + num2 def subtract(num1,num2): return num1 - num2 def multiply(num1,num2): return num1 * num2 def divide(num1,num2): return num1 / num2 label .startstart score = 0 amount = 0 label .start if amount != 10: # 循环生成直到num1能被num2整除且num1 >= num2 num1 = random.randint(1,10) num2 = random.randint(1,10) while num1 < num2 or num1 % num2 != 0: num1 = random.randint(1,10) num2 = random.randint(1,10) print("what is ", num1 ,'÷', num2,) p = int(input("ANSWER: ")) a = divide(num1,num2) if p == a: print("CORRECT") score += 1 amount += 1 print(f"Your score is {score}/10") input("press enter to continue") replit.clear() goto .start else: print("INCORRECT") print(f"Your score is {score}/10") amount += 1 input("press ENTER to continue") replit.clear() goto .start print("Congratulations, you finished the test") print(f"Your score was {score}/10") print("Would you like to do the test again") answer = input("Type 'yes' or 'no': ") if answer == "yes": replit.clear() goto .startstart elif answer == "no": print("BYE") else: print("Could not compute") print("ID10T Error")
方案2:直接构造整除的数(更高效)
先随机生成除数num2和商(范围限制为1到10//num2,确保被除数不超过10),再计算被除数num1 = num2 * 商,从根源避免循环:
import random import replit from csinsc import * def add(num1,num2): return num1 + num2 def subtract(num1,num2): return num1 - num2 def multiply(num1,num2): return num1 * num2 def divide(num1,num2): return num1 / num2 label .startstart score = 0 amount = 0 label .start if amount != 10: # 直接生成确保整除的数,无需循环 num2 = random.randint(1,10) # 商的范围保证num1 = num2*商 <=10 quotient = random.randint(1, 10 // num2) num1 = num2 * quotient print("what is ", num1 ,'÷', num2,) p = int(input("ANSWER: ")) a = divide(num1,num2) if p == a: print("CORRECT") score += 1 amount += 1 print(f"Your score is {score}/10") input("press enter to continue") replit.clear() goto .start else: print("INCORRECT") print(f"Your score is {score}/10") amount += 1 input("press ENTER to continue") replit.clear() goto .start print("Congratulations, you finished the test") print(f"Your score was {score}/10") print("Would you like to do the test again") answer = input("Type 'yes' or 'no': ") if answer == "yes": replit.clear() goto .startstart elif answer == "no": print("BYE") else: print("Could not compute") print("ID10T Error")
额外优化点
- 删除了原代码中重复定义的
multiply函数 - 使用
f-string简化分数输出格式,代码更简洁
内容的提问来源于stack exchange,提问作者Thom08
相关产品推荐
相关产品推荐

