Python中如何将数字转为文本形式且保留数值运算功能?
问题解答
你代码里的核心问题是错误地把两个数字的文本形式直接拼接,比如num2words(num1) + num2words(num2)会把"one"和"one"拼成"oneone",而不是先计算两个数字的和再转成文本。
正确的逻辑应该是:用原始数字做运算求和,再把求和结果转换成文本形式作为正确答案。同时你打印题目时,"plus"和第二个数字的文本连在一起了,需要加个空格分开。
修改后的完整代码:
from random import randint from num2words import num2words score = 0 while score <= 10: num1 = randint(1,10) num2 = randint(1,10) # 先计算两个数字的和,再转成文本 correct_sum = num1 + num2 qAns = num2words(correct_sum) # 修正打印格式,给plus和第二个数字加空格 print("What is", num2words(num1), "plus", num2words(num2)) ans = input("type your answer: ") # 判断用户输入的文本是否等于和的文本形式,兼容大小写 if ans.lower() == qAns.lower(): print("Correct!") score += 1 else: print(f"Incorrect! The right answer is {qAns}") score -= 1 print(f"Current score: {score}")
额外说明:
- 不需要让文本形式的数字具备运算能力,而是用原始的
num1和num2做运算,运算结果再转成文本,这样既满足题目显示为文本的需求,又能正确计算。 - 加入
lower()是为了兼容用户输入大小写的情况,比如用户输入"Two"也能被识别为正确。
内容的提问来源于stack exchange,提问作者Kafuros CZ
相关产品推荐
相关产品推荐

