我做了这个测试,但是代码看起来真的很长。有人能找到使我的代码更短的方法吗?短得多是最好的,但任何事情都有帮助。我认为主要的问题是问题的重复。
choice=raw_input("What type of quiz do you want to do: maths or science? ")
topic=open("topic.txt", "a+")
topic.write(choice + '\n')
topic.close()
difficulty=raw_input("What difficulty do you want to play on: easy, medium or hard? ")
diff=open("difficulty.txt", "a+")
diff.write(difficulty + '\n')
diff.close()
score = 0
def str_answercheck(score, user_answer, str_answer):
if user_answer.upper()==str_answer:
print("Well done")
score+=1
else:
print ("Wrong, it was "+str_answer)
raw_input("Press enter to continue")
return score
def int_answercheck(score, user_answer, int_answer):
if int(user_answer.upper())==int_answer:
print("Well done")
score+=1
else:
print ("Wrong, it was "+str(int_answer))
raw_input("Press enter to continue")
return score
if choice.lower() == "maths" and difficulty.lower() == "easy":
easym=open("mathseasy.txt" , "r")
lines = easym.readlines()
print lines[0]
print lines[1]
print("A. 4"+'\n'+"B. 6")
str_answer_one="A"
int_answer_one=4
user_answer_one=raw_input("Select your answer. ")
if user_answer_one.isdigit()==True:
first_score=int_answercheck(score, user_answer_one, int_answer_one)
else:
first_score=str_answercheck(score, user_answer_one, str_answer_one)
print lines[2]
print("A. 5"+'\n'+"B. 6")
str_answer_two="A"
int_answer_two=5
user_answer_two=raw_input("Select your answer. ")
if user_answer_two.isdigit()==True:
second_score=int_answercheck(first_score, user_answer_two, int_answer_two)
else:
second_score=str_answercheck(first_score, user_answer_two, str_answer_two)
print lines[3]
print("A. 15"+'\n'+"B. 20")
str_answer_three="B"
int_answer_three=20
user_answer_three=raw_input("Select your answer. ")
if user_answer_three.isdigit()==True:
third_score=int_answercheck(second_score, user_answer_three, int_answer_three)
else:
third_score=str_answercheck(second_score, user_answer_three, str_answer_three)
print lines[4]
print("A. 13"+'\n'+"B. 15")
str_answer_four="A"
int_answer_four=13
user_answer_four=raw_input("Select your answer. ")
if user_answer_four.isdigit()==True:
fourth_score=int_answercheck(third_score, user_answer_four, int_answer_four)
else:
fourth_score=str_answercheck(third_score, user_answer_four, str_answer_four)
print lines[5]
print("A. 100"+'\n'+"B. 110")
str_answer_five="B"
int_answer_five=110
user_answer_five=raw_input("Select your answer. ")
if user_answer_five.isdigit()==True:
fifth_score=int_answercheck(fourth_score, user_answer_five, int_answer_five)
else:
fifth_score=str_answercheck(fourth_score, user_answer_five, str_answer_five)
if choice.lower() == "maths" and difficulty.lower() == "medium":
mediumm=open("mathsmedium.txt" , "r")
lines = mediumm.readlines()
print lines[0]
print lines[1]
print("A. 30"+'\n'+"B. 35")
str_answer_one="A"
int_answer_one=30
user_answer_one=raw_input("Select your answer. ")
if user_answer_one.isdigit()==True:
first_score=int_answercheck(score, user_answer_one, int_answer_one)
else:
first_score=str_answercheck(score, user_answer_one, str_answer_one)
print lines[2]
print("A. 100"+'\n'+"B. 110")
str_answer_two="B"
int_answer_two=110
user_answer_two=raw_input("Select your answer. ")
if user_answer_two.isdigit()==True:
second_score=int_answercheck(first_score, user_answer_two, int_answer_two)
else:
second_score=str_answercheck(first_score, user_answer_two, str_answer_two)
print lines[3]
print("A. 13"+'\n'+"B. 15")
str_answer_three="A"
int_answer_three=13
user_answer_three=raw_input("Select your answer. ")
if user_answer_three.isdigit()==True:
third_score=int_answercheck(second_score, user_answer_three, int_answer_three)
else:
third_score=str_answercheck(second_score, user_answer_three, str_answer_three)
print lines[4]
print("A. 30"+'\n'+"B. 32")
str_answer_four="B"
int_answer_four=32
user_answer_four=raw_input("Select your answer. ")
if user_answer_four.isdigit()==True:
fourth_score=int_answercheck(third_score, user_answer_four, int_answer_four)
else:
fourth_score=str_answercheck(third_score, user_answer_four, str_answer_four)
print lines[5]
print("A. 21"+'\n'+"B. 29")
str_answer_five="B"
int_answer_five=29
user_answer_five=raw_input("Select your answer. ")
if user_answer_five.isdigit()==True:
fifth_score=int_answercheck(fourth_score, user_answer_five, int_answer_five)
else:
fifth_score=str_answercheck(fourth_score, user_answer_five, str_answer_five)以下是mathseasy.txt中的数据:
Welcome to the easy maths quiz.
What's 2+2?
What's 11-6?
What's 5*4?
What's 26/2?
What's 11*10?以下是mathsmedium.txt中的数据:
Welcome to the medium maths quiz.
What's 5*6?
What's 79+31?
What's 26/2?
What's 4*8?
What's 50-21发布于 2017-12-15 22:03:43
下面是一些缩短代码的方法:
str_和int_answercheck基本上是相同的函数,除了一个布尔表达式。与传递和比较这些值不同,为什么不编写一个使用布尔值并执行以下工作的底层函数: def check_answer(was_correct):如果was_correct: print("Well to“) score+=1 score+=1(”错误,它是"+str_answer) raw_input(“按下回车继续”)返回分数str_answercheck(user_answer,str_answer):返回check_answer(user_answer.upper() == str_answer.upper()) def int_answercheck(user_answer,int_answer):返回check_answer(int(user_answer) == int_answer)if语句来确定要调用哪个函数。将该逻辑放入一个单一的应答检查函数中: def应答检查(user_answer,str_answer,int_answer):if user_answer.isdigit():返回int_answercheck(user_answer,int_answer),否则:返回str_answercheck(user_answer,str_answer)发布于 2017-12-15 21:16:29
做答案检查的一个较短的方法是将两者结合在一起:
def answercheck(score, user_answer, str_answer, int_answer):
if user_answer.upper() == str_answer or user_answer.upper() == int_answer:
print("Well done")
score+=1
else:
print ("Wrong, it was "+str(answer))
raw_input("Press enter to continue")
return score注意:这意味着代码的其余部分必须进行编辑,才能始终发送到answercheck。
https://codereview.stackexchange.com/questions/182891
复制相似问题