鱼C论坛

 找回密码
 立即注册
查看: 2323|回复: 5

[技术交流] 25 - 名字生成器

[复制链接]
发表于 2022-1-7 21:11:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2022-7-6 19:15 编辑



这次我们动手编写一个把姓氏和名字随机组合来产生虚假姓名的程序。

下次当我们再纠结该起什么网名时,就可以这个程序来自动生成~

程序默认一旦启动后按下“回车”键就自动生成,按下“q”键才能退出程序。

第一步毫无疑问,我们要先定义两张表用来存放名字和姓氏。

列表和元祖都可以,但是考虑到我们创建表的稳定性,不能想被修改就被修改。

我们就采用元组,它与列表类似,不同之处在于元组的元素不能修改。

由于这两张长度不会太长,如果姓氏有 20 个,名字有 20 个,就可以生成 20 * 20 共计 400 个随机组合名字哦。

哪怕就是各有 100 个,两张表加起来不过几kb大小,不会占用大量内存,并且不需要动态更新。

所以我们直接在程序中创建就好,当程序运行后,会根据这两个元组中的内容,匹配姓氏和名字,生成一个新的姓名组合。

用户可以重复该过程,直到产生足够多的名字为止。

为了突出显示结果,使它与命令提示信息有明显的不同。

IDLE 提供的可用字体选项并不多,学到这一讲的读者,应该遇到过错误信息会被标红的情况啦。

2022-01-07_21-08-33.png

在解释器窗口中,默认的标准输出函数是 print()。

但当加载 sys 模块后,可以使用 file 参数将输出重定向到错误信息输出通道,使输出的文字颜色为红色:
print(内容, file=sys.stderr).
我们就利用该方法将生成结果高亮。

因为数据量不大,我们直接将姓氏和名字分别写入两个元组中:
first = ('张','赵','李','孙','王','刘','上官','欧阳','李','袁','钱','慕容','余','肖','杜','关','马','曹','潘','周')
    second=('福谛','锦震','祥骏','琛铭','天栋','潍睿','炳年','龙卓','华梁','郁谷','贤康','帝华','锐伟','海潍','锋海','锟帆','骏逸','凡弘','梁帆','锦初')
数据都是我们随机生成的,如果数据量几百条,为了不影响代码阅读,我们需要将数据保存在脚本外。

接下来我们就通过 random 模块中的 choice 方法从两个元组中产生数据:
   first_name = random.choice(first)
        second_name = random.choice(second)
因为我们要求默认回车持续生成,只有按 q 键才能退出游戏,所以就需要一个 while 循环持续生成随机名字:
while True:
        first_name = random.choice(first)
        second_name = random.choice(second)
        print("{}{}".format(first_name,second_name),file=sys.stderr)
我们通过 input 语句获取用户的输入。

如果用户选择“重新开始”,那就重复上述生成名字的过程。

如果输入 q 就结束并退出:
try_again = input("\n\n再来?(回车继续,q退出)")
        if try_again.lower() == "q":
            break
游戏主体就有了,我们将上面的操作封装到函数 myGame 中:
def myGame():
    print("欢迎来到鱼C名字生成器\n")
    first = ('张','赵','李','孙','王','刘','上官','欧阳','李','袁','钱','慕容','余','肖','杜','关','马','曹','潘','周')
    second=('福谛','锦震','祥骏','琛铭','天栋','潍睿','炳年','龙卓','华梁','郁谷','贤康','帝华','锐伟','海潍','锋海','锟帆','骏逸','凡弘','梁帆','锦初')
    while True:
        first_name = random.choice(first)
        second_name = random.choice(second)
        print("{}{}".format(first_name,second_name),file=sys.stderr)
        try_again = input("\n\n再来?(回车继续,q退出)")
        if try_again.lower() == "q":
            break
运行看下结果:

2022-03-11_16-07-30.jpg

简单几行代码就实现了我们上面说的游戏,是不是很厉害呢!

源码: py24.rar (594 Bytes, 下载次数: 6, 售价: 6 鱼币)

通过 while 循环可以实现很多文字判断类游戏,例如我们让计算机在 1 - 100 间产生一个随机数:
random.randint(1,100)

我们来猜,比随机数小就提示小了,大了,就提示大了,让用户重新输入:
if guess > result:
        print("大了,大了")
    else:
        print("小了,小了")

直到猜对才能结束并提示:“好棒哦,这都能被你猜到!”

2022-03-14_20-03-37.png

猜对部分和 while 部分留给你们当课后作业,下课~

答案: guessNumber.py.zip (754 Bytes, 下载次数: 4, 售价: 3 鱼币)







本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-7 21:25:09 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 10:04:38 | 显示全部楼层
来来来,看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-18 16:48:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-18 18:22:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-14 15:43:56 | 显示全部楼层
# 题干
# 编写一个把姓氏和名字随机组合来产生虚假姓名的程序

def Namegenerator():
    given_name = ('赵','钱','孙','李','陈','董')
    first_name = ('发财', '富贵', '有钱', '帅气', '滑板鞋', '便利店')

    import random as r

    length1 = len(first_name) - 1
    length2 = len(given_name) - 1

    first_namerandom = r.choice(first_name)
    given_namerandom = r.choice(given_name)

    print('欢迎来到名字生成器')
    print(given_namerandom+first_namerandom)

    while True:
        temp = input('再来?(回车继续,按q退出)')
        first_namerandom = r.choice(first_name)
        given_namerandom = r.choice(given_name)
        if temp == 'q':
            break
        else:
            print(f'{given_namerandom}{first_namerandom}')

Namegenerator()



# 猜数字游戏
def Guessnumber():
    import random as r

    ans = r.randint(1, 10)
    guess = int(input('猜一下我心里想的是什么数:'))
    limit = 1
    while True:
        if limit < 5:
            if guess == ans:
                print('好棒哦,这都能被你猜到!')
                break
            elif guess < ans:
                print('小了,小了')
            else:
                print('大了,大了')
            limit += 1
            guess = int(input('没猜对,继续:'))
        else:
            print('5次机会已经用完!')
            break

Guessnumber()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 21:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表