import random
x = int(raw_input("Please enter a number up to 100. "))
z = random.randint(40,100)
""" x and z can both be used below without errors -- testing/learning"""
randomNumber = random.randint(1,z)
print "first random",randomNumber
if 35 >= randomNumber:
newRandom = randomNumber * .5
newRandom = newRandom + 9
print "second random " "%.f" % newRandom
elif 36 <= randomNumber <= 93:
newRandom = randomNumber + 7
print "second random " "%.f" % newRandom
else:
newRandom = randomNumber
print "second random",newRandom
#1 楼
代码组织最好将代码包装到一个方法中,而不是将代码存储在全局名称空间中,例如:
def gen_random_number():
randomNumber = random.randint(1, z)
print "first random", randomNumber
# ...
调用这样的方法:if __name__ == '__main__':
gen_random_number()
魔术数字
避免使用“魔术数字”:数字40、100、35、93为之所以“神奇”,是因为不清楚它们是什么以及为什么。如果将它们放在具有良好名称的文件顶部附近的大写常量中,则它们的含义和用途将变得更加清晰,例如:
LOWER_BOUND = 40
UPPER_BOUND = 100
z = random.randint(LOWER_BOUND, UPPER_BOUND)
40和100可以很容易地猜出它们是什么并给出这些名称。但是对于35、93我不确定。如果您给他们起了个名字,我就不用奇怪了。格式化
有一个官方的标准Python样式指南,称为PEP8。我建议阅读并遵循该说明,这样其他人可以更轻松地查看您的代码。有一个名为
pep8
的命令行实用程序,可以检测编码样式冲突。您可以使用pip install pep8
进行安装,然后只需使用pep8 path/to/your/code
即可在脚本(甚至整个目录)上运行它。 random_number = random.randint(1, z)
print "first random", random_number
if 35 >= random_number:
new_random = random_number * .5
new_random += 9
print "second random " "%.f" % new_random
elif 36 <= random_number <= 93:
new_random = random_number + 7
print "second random " "%.f" % new_random
else:
new_random = random_number
print "second random", new_random
尽管PEP8对此没有抱怨:
print "second random " "%.f" % new_random
无需在这两个字符串之间放置空格,因此您可以简单地编写它: >
print "second random %.f" % new_random
对此:
new_random = random_number * .5
new_random += 9
#2 楼
正如@Jamal指出的那样,输入提示不清晰,并且在任何情况下都不会使用x
。所有不平等都指向同一方向,更容易理解。与36进行比较是不必要的。在≤35的情况下,为什么第一次不正确分配
newRandom
? …
if randomNumber <= 35:
newRandom = randomNumber * .5 + 9
elif randomNumber <= 93:
newRandom = randomNumber + 7
else:
newRandom = randomNumber
print "second random %.f" % newRandom
#3 楼
变量命名是编码的重要方面之一。您必须正确命名变量;在这种情况下,x
和y
没有意义。应该是:
userInput = int(raw_input("Please enter a number up to 100. "))
selectedRandomNumber= random.randint(40,100)
作为学习。
评论
\ $ \ begingroup \ $
啊,我知道我的命名与我看到的代码相比似乎很奇怪。谢谢每一点信息的帮助!
\ $ \ endgroup \ $
– Dzzs
2014年7月27日在4:45
\ $ \ begingroup \ $
请注意,Python具有称为PEP8的编码约定。变量应命名为like_this(例如,以user_input命名)。
\ $ \ endgroup \ $
–玉石
2014年7月27日在5:21
\ $ \ begingroup \ $
没关系,只要您拥有更好的名称或对提高代码的可读性有用。
\ $ \ endgroup \ $
– Paraitosh
2014年7月27日在5:27
\ $ \ begingroup \ $
@Yuushi我想强调一个事实,即所涉及的页面是“指南”。我倾向于将指南视为建议而非绝对。
\ $ \ endgroup \ $
–法老王
2014年7月27日在10:29
\ $ \ begingroup \ $
@Pharap这是一本指南,但是那里的绝大多数Python代码都在使用它。除非有确凿的理由不这样做,否则应遵循此指南。
\ $ \ endgroup \ $
–玉石
2014年7月27日在11:14
#4 楼
此提示并不完全清楚:负数?除非另有说明,否则用户不会知道适当的最小值。无论哪种方式,您都应该具有输入验证功能,以确保仅在收到用户的正确输入后程序才能继续运行。 />
int(raw_input("Please enter a number up to 100. "))
您可以只使用
+=
运算符:newRandom = newRandom + 9
也可以与其他运算符一起使用。
#5 楼
除了其他答案外,我想指出的是,如果有人没有在raw_input
中输入数字,则您的程序可能会崩溃。这(请在此处阅读有关try
/ except
的更多说明):try:
x = int(raw_input("Please enter a number up to 100.\n"))
except:
stuff_to_do_if_exception_is_raised()
例如,您可以使用循环并执行:
while True:
try:
x = int(raw_input("Please enter a number up to 100.\n"))
if x>100:
print "Number is too large"
else:
break
except (ValueError, NameError, SyntaxError):
print "This is not a number"
评论
您实际上是否对用户输入做任何事情(x已初始化但从未使用过)?如果是这样,请包括代码的该方面,而不进行答案中已经提到的任何更改。我相信评论表明他们正在切换random.randint(1,x | z)进行测试,因此尽管我看不到上面的代码中使用了它,但仍可以在其中使用它。 >