有没有办法简化这个Python代码? [已关闭]

问题描述 投票:0回答:1

方法#1 程序给用户两次尝试正确回答的机会,用户只有在第一次尝试时才能获得正确答案, 第二次尝试错误后程序将显示正确答案。

question = '1+1= '
answer = '2'
correct = 0

user_answer = input(question)
if user_answer == answer:
  print('Correct! ')
  correct += 1
else:
  user_answer = input('Try Again: ')
  if user_answer == answer:
    print('Correct! ')
  else:
    print(f'The answer is: {answer}')

print(correct)

方法#2

question = '1+1= '
answer = '2'
correct = 0

user_answer = input(question)
for try_ in range(2):
  if user_answer != answer:
    if try_ == 0:
      user_answer = input('Try Again: ')
    else:
      print(f'The answer is: {answer}')
  else:
    print('Correct! ')
    if try_ == 0:
      correct += 1
    break

print(f'number correct on the first try: {correct}')

方法#3

question = '1+1= '
answer = '2'
correct = 0

user_answer = input(question)
for try_ in range(2):
  if try_ <= 1:
    if user_answer == answer:
      print('Correct! ')
      if try_ == 0:
        correct += 1
      break
    else:
      if try_ == 0:
        user_answer = input('Try Again: ')
      else:
        print(f'The answer is: {answer}')

print(f'number correct on the first try: {correct}')

方法#4

question = '1+1= '
answer = '2'
correct = 0

user_answer = input(question)
for try_ in range(2):
  if try_ == 1 and user_answer != answer:
    print(f'The answer is: {answer}')
    break
  if user_answer == answer:
    print('Correct! ')
    if try_ == 0:
      correct += 1
      break
  else:
    user_answer = input('Try Again: ')

print(f'number correct on the first try: {correct}')

所有方法都有效。我更喜欢方法#1,但我觉得这可以进一步简化。我不喜欢看到这部分代码两次:

    if user_answer == answer:
      print('Correct! ')

但我不确定如何简化,或者是否可能。任何帮助将不胜感激。

谢谢。

python performance simplify coding-efficiency
1个回答
0
投票

使用

for
循环迭代两次是减少重复代码的正确想法,并且由于两次迭代仅在用户提示上有所不同,因此您可以使循环迭代两次提示:

for prompt in question, 'Try Again: ':
    if correct := input(prompt) == answer:
        print('Correct! ')
        break
else:
    print(f'The answer is: {answer}')
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.