我一直想学习编程一段时间,因此决定今天尝试一下。我已经编辑并阅读了许多Java内容,以解决小问题,但从未从头开始编写。我已经尝试过使用C和Java,但两者似乎都太多了,无法教自己作为第一语言,所以我首先使用Python。我提出并指出了我应该做的不同或正确的事情吗?对我来说,它执行起来没有问题,但是我敢肯定,我在这里还有很多废话。我只需要查看所有步骤的结果就可以了,我知道这不是真正的随机数生成器。我只是围绕语言的不同方面进行测试和学习。

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


评论

您实际上是否对用户输入做任何事情(x已初始化但从未使用过)?如果是这样,请包括代码的该方面,而不进行答案中已经提到的任何更改。

我相信评论表明他们正在切换random.randint(1,x | z)进行测试,因此尽管我看不到上面的代码中使用了它,但仍可以在其中使用它。 >

#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 楼

变量命名是编码的重要方面之一。您必须正确命名变量;在这种情况下,xy没有意义。

应该是:

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"