Crossin的编程教室

标题: 【Python 第9课】random [打印本页]

作者: iamocean    时间: 2013-7-30 21:49
标题: 【Python 第9课】random
之前我们用了很多次的print和input方法,它们的作用是实现控制台的输入和输出。除此之外,python还提供了很多模块,用来实现各种常见的功能,比如时间处理、科学计算、网络请求、随机数等等等等。今天我就来说说,如何用python自带的随机数模块,给我们的小游戏增加不确定性。


引入模块的方法:


from 模块名 import 方法名


看不懂没关系,这东西以后我们会反复用到。今天你只要记住,你想要产生一个随机的整数,就在程序的最开头写上:


from random import randint


之后你就可以用randint来产生随机数了。


还记得input后面的()吗,我们使用randint的时候后面也要有()。而且,还要在括号中提供两个数字,先后分别是产生随机整数范围的下限和上限。例如:


randint(5, 10)


这样将会产生一个5到10之间(包括5和10)的随机整数。


放到我们的小游戏里,用
answer = randint(1, 100)
替代
answer = 10


程序在运行时候,会产生一个1到100的随机整数,存在answer里,我们也不知道是多少,真的全靠猜了。

a83aad58d109b3de7721afd5cdbf6c81810a4c62.jpg



好了,觉得还有点意思么?我们终于一步步把这个弱智小游戏给做出来了,有没有一丁点的成就感呢?


如果你对其中的某些细节还不是很理解,恭喜你,你已经开始入门了。相信你会带着一颗追求真相的心,在编程这条路上不断走下去。


我们的课程,也才刚刚开始。




#==== Crossin的编程教室 ====#
微信ID:crossincode
QQ群:312723402


面向零基础初学者的编程课
每天5分钟,轻松学编程

f68e6e3d269759eee7be4973b3fb43166c22df15.jpg

作者: 前前后后    时间: 2013-8-2 16:40
本帖最后由 前前后后 于 2013-8-2 16:42 编辑

学着写了一个
import random#似乎也可以这样
secret=random.randint(1,100)
guass=0
tries=0#控制猜数字次数
print"请在1~100之间猜一个整数"
while guass!=secret and tries<6:
    guess=input()
    if guess<secret:
        print"too small"
        
        
    elif guess>secret:
        print"too large"
        tries=tries+1
if guass==secret:
    print"great"
else:print"no more guass , bad luck"
print secret
作者: gagamomo    时间: 2013-8-15 14:12
本帖最后由 gagamomo 于 2013-8-15 14:32 编辑
前前后后 发表于 2013-8-2 16:40
学着写了一个
import random#似乎也可以这样
secret=random.randint(1,100)

不错。但是出错啦,因为你英文单词拼错了。有时候是 guess, 有时候是 guass。我帮你修改一下:


import random#似乎也可以这样
secret=random.randint(1,100)
guess=0
tries=0#控制猜数字次数
print"请在1~100之间猜一个整数"

while guess!=secret and tries<6:
    guess=input()
    if guess<secret:
        print"too small"
    if guess>secret:
        print"too large"
    if guess==secret:
        print"great"
    tries=tries+1   

print"no more guess , bad luck"
print secret
作者: 海岸上的猪头    时间: 2013-10-17 17:26
from random import randint
answer=randint(1,100)
inpt=0
while inpt!=answer:
    inpt=input()
    if inpt<answer:
        print "too small"
    if inpt>answer:
        print "too big"
    if inpt==answer:
        print "bang go"
成功了,感谢lz
作者: roy    时间: 2013-12-26 15:54
本帖最后由 roy 于 2013-12-26 15:56 编辑

学习中。。。
#coding UTF-8
from random import randint
Answer=randint(1,100)
totoal=10
left=0
num=0
time=0  
print 'plese input the number you  guess!!!'
while int(num) != Answer:
    while time<=totoal :
        num=int(input());  
        time+=1
        left=totoal-time
        if num>Answer:
            print 'too   big,you have['+str(left)+']times'
        elif num<Answer:
            print 'too small,you have['+str(left)+']times'
        elif num==Answer:
            print 'congratulations you get it!'            
    else:
        print 'sorry,you have get more then 3 time,can not try again!'
   
作者: 葫芦娃    时间: 2014-1-2 22:40
from random import randint
num=randint(0,100)

print 'guess what i think?'
answer=False
while answer==False:
    answer=input()
    if answer>num:
        print 'too big.'
    if answer<num:
        print 'too small'
    if answer==num:
        print 'bingo.'
        answer=True

为什么在运行的时候只输入1次结果就结束了?
而from random import randint
num=randint(0,100)

print 'guess what i think?'
bingo=False
while bingo==False:
    answer=input()
    if answer>num:
        print 'too big.'
    if answer<num:
        print 'too small'
    if answer==num:
        print 'bingo.'
        bingo=True
就可以正常运行。
为什么要另外设置一个bingo出来呢? 全部用一个不可以么?
作者: crossin先生    时间: 2014-1-3 10:19
葫芦娃 发表于 2014-1-2 22:40
from random import randint
num=randint(0,100)

用一个也是可以的,你可以试试改下程序
作者: fuyuanjun12    时间: 2014-6-11 15:33
roy 发表于 2013-12-26 15:54
学习中。。。
#coding UTF-8
from random import randint

C:\Users\Public\Pictures\Sample Pictures\sorry.png (不知道能不能插到图。)

我按着这个运行,试着超过次数的方式,剩余0次之后,一直会print最后一句“sorry,you have get more then 3 time,can not try again!”。不知道怎么改造
作者: fuyuanjun12    时间: 2014-6-11 15:40
roy 发表于 2013-12-26 15:54
学习中。。。
#coding UTF-8
from random import randint

后来试了一下,我的想法是在最后print后加一句num=Answer
作者: daisuke    时间: 2014-8-9 23:00
我用的版本是3.4 有时候改代码用到退格键删除的时候会出校一个小方框替代原来的字符,不知道是为什么呢?

作者: crossin先生    时间: 2014-8-11 10:54
daisuke 发表于 2014-8-9 23:00
我用的版本是3.4 有时候改代码用到退格键删除的时候会出校一个小方框替代原来的字符,不知道是为什么呢?
...

是win8吗?win8下的idle似乎是有这个问题,原因不明,解决方法未知,可能是字符编码问题
作者: daisuke    时间: 2014-8-12 17:14
crossin先生 发表于 2014-8-11 10:54
是win8吗?win8下的idle似乎是有这个问题,原因不明,解决方法未知,可能是字符编码问题 ...

确实是的……唉
作者: xiaohuzai    时间: 2015-2-8 14:26
葫芦娃 发表于 2014-1-2 22:40
from random import randint
num=randint(0,100)

你这一句answer=input()相当于是把answer重新赋值了,answer不再是一个bool值而是个数值(因为input进去的是数字),我是这么理解的。不知道对不对。
作者: xiaohuzai    时间: 2015-2-8 14:32
from random import randint
num = randint(1,100)
print "Guess what I think?"
answer = input()
while answer!=num:
    if answer>num:
        print "太大了"
        answer = input()
    if answer<num:
        print "太小了"
        answer = input()
print "答对了"
print num
作者: cross    时间: 2015-4-20 21:46
我们的课程,也才刚刚开始。

作者: fix    时间: 2015-5-12 08:20
from random import randint

num = randint(1,100)

print 'which number?'
answer = input()

while answer !=num:
    if answer<num:
        print 'small'
        answer =input()

    if answer>num:
        print 'big'
        answer =input()

while answer ==num:
    print 'bingo'
    answer=111



mac idle 输入不了中文呢

作者: botter    时间: 2015-11-11 12:48
葫芦娃 发表于 2014-1-2 22:40
from random import randint
num=randint(0,100)

我理解是:

bingo是人为设置的一个触发开关,单独用来确定程序的运行方向。按你的设置,先为answer赋予了false,然后while的运行条件是answer 为false,但是while的第一句又把answer的值改为了input()。所以while在第一次运循环运行之后就失去了运行条件answer==false,所以当然只有一次循环。

但是第二次你认为设置了一个独立于循环计算外的bingo触发开关。bingo的false状态仅会在answer==num状态下被改变,进而终止while运行。所以可以持续运行
作者: botter    时间: 2015-11-11 12:51
fix 发表于 2015-5-12 08:20
from random import randint

num = randint(1,100)

最后一段应该是if answer==,不过最后为什么又把answer设置为了111???
作者: 草办    时间: 2015-12-2 13:50
清楚、简洁。很棒的帖子,赞一下
作者: weiliu    时间: 2015-12-28 13:07
-*- coding: utf-8 -*-
import random#似乎也可以这样
secret=random.randint(1,100)
guess=0
tries=0#控制猜数字次数
print"请在1~100之间猜一个整数"
while guess!=secret and tries<6:
    guess=input()
    if guess<secret:
        print"too small"
        tries=tries+1
    if guess>secret:
        print"too large"
        tries=tries+1
    if tries==6:
        print"no more guass , bad luck"
        print secret
print"great"

根据第一位老兄的修改了一下,C大看一看
作者: crossin先生    时间: 2015-12-28 16:24
weiliu 发表于 2015-12-28 13:07
-*- coding: utf-8 -*-
import random#似乎也可以这样
secret=random.randint(1,100)

蛮好的
作者: 德坤    时间: 2016-3-22 10:07
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
Guess what i think?
3
too small
50
too big
75
too big
66
too big
68
too big
69
too big
99
too big
100
too big
2
too small                                                                          from random import randint#意思就是使程序随机成一个整数
num = randint(1,100)#随机整数的范围

print 'Guess what i think?'
bingo = False

while bingo == False:#循环 如果 bingo一直不等于False就一直循环下去
    answer = input()

    if answer < num:
        print'too small'

    if answer > num:
        print 'too big'

    if answer == num:
        print 'BINGO'
        bingo = True


3
too small

作者: 对不起我是保镖    时间: 2016-4-3 23:43
捕获.PNG
作者: 追风    时间: 2016-4-29 14:35
crossin先生 发表于 2014-1-3 10:19
用一个也是可以的,你可以试试改下程序

在这个例子中,既answer=False,又answer=input(),answer的数据类型不一致,可以吗?
作者: 追风    时间: 2016-4-29 15:03
xiaohuzai 发表于 2015-2-8 14:32
from random import randint
num = randint(1,100)
print "Guess what I think?"

这样一改就对了!赞
作者: 追风    时间: 2016-4-29 15:08
fix 发表于 2015-5-12 08:20
from random import randint

num = randint(1,100)

while answer ==num:
    print 'bingo'
后面加的这个循环是多余的,因为answer ==num时自然跳出上面的循环
作者: 追风    时间: 2016-4-29 15:31
weiliu 发表于 2015-12-28 13:07
-*- coding: utf-8 -*-
import random#似乎也可以这样
secret=random.randint(1,100)

这样有一个缺陷是,无论如何,最后总会有一个‘great’。稍作修改如下:

import random#似乎也可以这样
secret=random.randint(1,100)
guess=0
tries=0#控制猜数字次数
print"请在1~100之间猜一个整数"
while guess!=secret and tries<6:
    guess=input()
    tries=tries+1
    if guess<secret:
        print"too small"   
    if guess>secret:
        print"too large"
    if guess!=secret and tries==6:
        print"no more guass , bad luck"
    if guess==secret:
        print secret
        print"great"

作者: pashanghuo    时间: 2016-9-5 16:10
老师,我提交以后出现这个错误。
from random import randint
num=randint(1,50)
print "Guess what I think?"
bingo=False

while bingo==False:
    answer=input()

    if answer<num:
        print"too small"

    if answer>num:
        print"too big"

    if answer==num:
        print"bingo"
        bingo=True
        

AA.JPG (27.17 KB, 下载次数: 310)

AA.JPG


作者: leoshen    时间: 2016-9-6 11:24
pashanghuo 发表于 2016-9-5 16:10
老师,我提交以后出现这个错误。
from random import randint
num=randint(1,50)

看起来是环境装的不完整呢,或者防火墙阻拦的调用文件;字面意思看起来是调用random没成功,在你python下面用搜索看一下能不能找到random.py
作者: crossin先生    时间: 2016-9-6 17:26
pashanghuo 发表于 2016-9-5 16:10
老师,我提交以后出现这个错误。
from random import randint
num=randint(1,50)

先确认你没有把文件名命名成 random.py 等系统文件的名字。

直接从命令行执行看看行不行。
或者装个pycharm之类的编辑器。有时候idle确实会有诡异问题


作者: pashanghuo    时间: 2016-9-7 10:12
crossin先生 发表于 2016-9-6 17:26
先确认你没有把文件名命名成 random.py 等系统文件的名字。

直接从命令行执行看看行不行。

好的,谢谢老师
作者: poi_rs    时间: 2016-12-24 09:11
from random import randiot
报错 can not import name randiot
作者: poi_rs    时间: 2016-12-24 09:26
poi_rs 发表于 2016-12-24 09:11
from random import randiot
报错 can not import name randiot

pycharm的问题...
作者: crossin先生    时间: 2016-12-24 21:26
poi_rs 发表于 2016-12-24 09:26
pycharm的问题...

randint,你拼错了吧
作者: poi_rs    时间: 2016-12-25 17:49
crossin先生 发表于 2016-12-24 21:26
randint,你拼错了吧


from random import randint
answer=randint(1,100)
inpt=0
while inpt!=answer:
    inpt=input()
    if inpt<answer:
        print "too small"
    if inpt>answer:
        print "too big"
   
报错 cannot import name randint
作者: crossin先生    时间: 2016-12-26 13:17
poi_rs 发表于 2016-12-25 17:49
from random import randint
answer=randint(1,100)
inpt=0

你是不是把自己的文件名命名成 random.py 了,或者你文件夹里有叫这个名字的文件。把它改掉,别用系统代码的名字
作者: poi_rs    时间: 2016-12-29 17:40
crossin先生 发表于 2016-12-26 13:17
你是不是把自己的文件名命名成 random.py 了,或者你文件夹里有叫这个名字的文件。把它改掉,别用系统代 ...

是的,感谢
作者: hailangswpu    时间: 2017-1-17 09:12
和其他语言语法确实有很多不同,需要好好学习一下。
作者: rhent    时间: 2017-3-1 14:22

新人来学习。Python3里字符串不能直接和数字比较,请问应该设置变量的时候怎么改写呢?
比如
secret=random.randint(1,100)
guess=0
tries=0
if guess<secret:
会报错TypeError: unorderable types: str() < int()
作者: crossin先生    时间: 2017-3-1 16:51
rhent 发表于 2017-3-1 14:22
新人来学习。Python3里字符串不能直接和数字比较,请问应该设置变量的时候怎么改写呢?
比如
secret=rando ...

你这个代码不会报错吧,你说的是input?

可以写成 guess = int(input())
转成int后再比较
作者: skipperrico    时间: 2017-3-30 14:42
自己稍微改了下。

import random
secret = random.randint(1,100)
guess = 0
tries = 0
print("Guess a number between 1 and 100:")

while guess != secret and tries < 6:
    guess = int(input())
    if guess < secret:
        print("too small")
        tries += 1
    elif guess > secret:
        print("too big")
        tries += 1
    else:
        print("bingo")
    if tries == 6:
        print("no more guess,bad luck")
        print("The number is actually",secret)


作者: crossin先生    时间: 2017-3-30 23:41

作者: python-learner    时间: 2017-4-17 08:50
from random import randint
a=randint(1,100)
m=1
print "guess what I think"

while m>0:
    m=input()
    if a>m:
        print"too little"
    if a<m:
        print"too big"
    if a ==m:
        print"good,you're right"
作者: xiaoxie    时间: 2018-3-22 12:41
from random import randint
num = randint(1,100)
answer = 101


while answer != num:
    print("Guess what I think?")
    answer = int(input())
    if answer < num:
        print("too small,just guess again")
    if answer > num:
        print('too big,just guess again')
    if answer == num:
        print("Congratulations,guess right")
        num = randint(1,100)
        print("Do you want to go on ?")
        answer1 = input()
        if answer1 == "yes":
            continue
        elif answer1 == "no":
            print("Goodbye....")
            break
        else:
            continue

,看着文章,自己写的,不错,加油!
作者: 哦哦UP    时间: 2020-3-13 22:29
0
作者: 哦哦UP    时间: 2020-3-13 22:31
哦哦UP 发表于 2020-3-13 22:29
0

我不明白为什么从1加到100是这么个求和,能不能给拆解一下运算步骤。我一直觉得a=a+1 b=b+a得出的是一个随机数字
作者: crossin先生    时间: 2020-3-14 17:14
哦哦UP 发表于 2020-3-13 22:31
我不明白为什么从1加到100是这么个求和,能不能给拆解一下运算步骤。我一直觉得a=a+1 b=b+a得出的是一个 ...

“这么个求和”?怎么个求和?
这一课说的randint(1,100)是1~100里产生随机数,不是求和






欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5