python - 我该如何改进呢?
问题描述
我目前正在自学 Python,这是我的第一个程序。我正在做一些简单的项目,所以我可以改进。想听听对此的反馈。
import random
print("There is a number between 1 and 100 guess it and you will win a price : ")
def guess():
# A simple guess game.
random_number = random.randint(1, 5)
flag = True
user_guess = []
while flag:
user_number = input("Enter the number : ")
user_guess.append(user_number)
if int(user_number) < random_number:
print("You have to go higher")
elif int(user_number) > random_number:
print("You have to go lower ")
else:
flag = False
print("Congrats you win !!! \nThe numbers of guesses before you won : ")
print(len(user_guess))
guess()
while True:
play_again = input("Do you like to play again ? : (y/n): ")
if play_again == 'y':
guess()
else:
print("Thank you for playing have a nice day!!! ")
break
解决方案
- 如果用户输入无效(非数字)字符,您的程序将抛出异常。使用isdigit来避免这种情况。
user_number
每次您想将其与其他整数进行比较时转换为整数是昂贵且轻率的。将其转换一次并重新分配给user_number
.flag
没有必要。使用while True
, 并在需要时中断。- 保留整个
list
对象只是为了计算用户输入有点矫枉过正。有一个整数(count
在我的例子中)并使用它。 - 您打印“介于 1 和 100 之间”,但您的程序会创建一个介于 1 和 5 之间的随机整数。我不确定您这样做的意图(可能是调试帮助),但我认为这是一个小错误。
- 一个小建议,将 移至
print("There is a number between 1 and 100 guess it and you will win a price : ")
函数guess
,因为函数声明自己的目的更有意义。
以下是我对guess
函数进行这些更改的方法:
def guess():
print("There is a number between 1 and 100 guess it and you will win a price : ")
# A simple guess game.
random_number = random.randint(1, 100)
# flag = True obsolete
count = 0
while True:
user_number = input("Enter the number : ")
if (user_number.isdigit()):
user_number = int(user_number)
else:
print("Invalid:")
continue
count += 1
if user_number < random_number:
print("You have to go higher")
elif user_number > random_number:
print("You have to go lower ")
else:
print("Congrats you win !!! \nThe numbers of guesses before you won : ")
print(count)
break
推荐阅读
- java - 如何创建 5x5 二维数组的 2x2 子数组,旋转它,然后将其添加回原始数组?
- sql - SQL如何选择条件后的条目
- javascript - highcharts漏斗问题
- javascript - 为什么当未选中接受条款复选框或未选择性别时,我的电子邮件也显示为不正确?
- python - 我应该在事件发射器中选择处理程序的“集合”还是“列表”?
- react-native - 模态关闭后无法正常工作
- amazon-cloudformation - AWS Cloudformation how from S3 bucket names CommaDelimitedList make list of ARN - semi for loop cycle
- amazon-redshift - 如果在连接条件中的列上应用函数,Redshift 可以利用 distkey 吗?
- html - div内的CSS垂直对齐跨度
- javascript - 从 JavaScript 获取 JSON 文件并在 2021 年正确处理错误