<blockquote>
<pre><code>my_file = open("classScores.txt", "a")
my_file.write("{}:{}".format(username,correctAnswers))
</code></pre>
<p>The program seems to work but nothing is stored onto 'classScores.txt'
file.</p>
</blockquote>
<p>您的代码将正确地写入该文件,但在完成后关闭该文件是一种良好的做法。正如安蒂·哈帕拉在评论中指出的,你应该这样做:</p>
<pre><code>with open("classScores.txt", "a") as my_file: #my_file is automatically closed after execution leaves the body of the with statement
username = 'Sajjjjid'
correct_answers = 3
my_file.write("{}:{}\n".format(username,correct_answers))
</code></pre>
<blockquote>
<p>Im quite new to coding</p>
</blockquote>
<pre><code>eval(str(num1) + operation + str(num2))
</code></pre>
<p>一般来说,初学者的规则是:</p>
<blockquote>
<p>Never, ever use eval().</p>
</blockquote>
<p>以下是一些更好的选择:</p>
<pre><code>def test():
num1 = random.randint(1, 10)
num2 = random.randint(1, num1)
def add(x, y):
return x+y
def sub(x, y):
return x-y
def mult(x, y):
return x*y
ops = {
'+': add,
'-': sub,
'*': mult,
}
keys = list(ops.keys()) #=> ['+', '*', '-']
rand_key = random.choice(keys) #e.g. '*'
operation = ops[rand_key] #e.g. mult
correct_result = operation(num1, num2)
</code></pre>
<p>如果定义一个函数,那么使用不带尾随<code>()</code>的函数名,那么该函数就是一个值,就像数字1一样,并且该函数可以分配给一个变量——就像任何其他值一样。如果要执行存储在变量中的函数,请在变量名后使用尾随的<code>()</code>:</p>
<pre><code>def func():
print('hello')
my_var = func
my_var() #=>hello
</code></pre>
<p>python还允许您创建匿名(未命名)函数,如下所示:</p>
<pre><code>my_func = lambda x, y: x+y
result = my_func(1, 2)
print(result) #=>3
</code></pre>
<p>你为什么要这么做?好吧,它可以使你的代码更紧凑:</p>
<pre><code>def test():
num1 = random.randint(1, 10)
num2 = random.randint(1, num1)
ops = {
'+': lambda x, y: x + y, #You can define the function right where you want to use it.
'-': lambda x, y: x - y,
'*': lambda x, y: x * y,
}
keys = list(ops.keys()) ##=> ['+', '*', '-']
rand_key = random.choice(keys) #e.g. '*'
operation = ops[rand_key] #e.g. lambda x, y: x*y
correct_result = operation(num1, num2)
</code></pre>
<p>但是,事实证明python为您定义了所有这些函数——在<code>operater module</code>中。因此,您可以使代码更加紧凑,如下所示:</p>
<pre><code>import random
import math
import operator as op
def test():
num1 = random.randint(1, 10)
num2 = random.randint(1, num1)
ops = {
'+': op.add, #Just like the add() functions defined above
'-': op.sub,
'*': op.mul,
}
keys = list(ops.keys()) #=> ['+', '*', '-']
rand_key = random.choice(keys) #e.g. '-'
operation = ops[rand_key] #e.g. op.sub
correct_result = operation(num1, num2)
</code></pre>
<p>下面是一个完整的示例,其中包含一些其他改进:</p>
<pre><code>import random
import math
import operator as op
def test():
num1 = random.randint(1, 10)
num2 = random.randint(1, num1)
ops = {
'+': op.add,
'-': op.sub,
'*': op.mul,
}
keys = list(ops.keys()) ##=> ['+', '*', '-']
rand_key = random.choice(keys) #e.g. '+'
operation = ops[rand_key] #e.g. op.add
correct_result = operation(num1, num2)
print ("What is {} {} {}?".format(num1, rand_key, num2))
user_answer= int(input("Your answer: "))
if user_answer != correct_result:
print ("Incorrect. The right answer is {}".format(correct_result))
return False
else:
print("Correct!")
return True
username = input("What is your name? ")
print("Hi {}! Welcome to the Arithmetic quiz...".format(username))
correct_answers = 0
num_questions = 3
for i in range(num_questions):
if test():
correct_answers +=1
print("{}: You got {}/{} questions correct.".format(
username,
correct_answers,
num_questions,
#'question' if (correct_answers==1) else 'questions'
))
</code></pre>