标题:[代码]猜数字AB版
只看楼主
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
结帖率:100%
 问题点数:0 回复次数:10 
[代码]猜数字AB版
猜数字AB 1.1.1
游戏规则:有四个不同的随机0到9数字,让你猜这四个数字分别是什么,顺序与随机数字序列要一样。如果数字或顺序不一样,就给出“几A几B”的结果,A所处的数字代表猜对的且位置相同的数的数量,B代表正确答案中有但位置不同的数的数量。
来自网络的游戏规则:
两个人玩,一方出数字,一方猜。出数字的人要先想好一个没有重复数字的4位数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。
如正确答案为5234,而猜的人猜5346,则是1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为2B,合起来就是1A2B。接着猜的人再根据出题者的几A几B继续猜,直到猜中为止。

——[url]https://www.[/url]

本游戏最多有十次机会!
“AB版猜数字 1.1.1”代码:
程序代码:
import random
def is_chongfu(test_list):
    for i in range(len(test_list)):
        for j in range(len(test_list)-1):
            j1=j if j<i else j+1
            if test_list[j1] == test_list[i]:
                return True
    else:
        return False
def check(yours,answers):
    a,b=0,0
    for i in range(len(yours)):
        for j in range(len(answers)):
            if yours[i]==answers[j]:
                if i==j:
                    a+=1
                else:
                    b+=1
    return (a,b)

nums=random.sample(range(10),4)
i=1
while i<=10:
    print("第 %d 次猜数字:"%i)
    yourAns=input("请依次输入四个数字(如5423,没有分隔符,超出的忽略):")
    print("你输入:",', '.join(yourAns[:4]))
    if yourAns == "":
        print("输入为空!")
        continue
    if len(yourAns)<4:
        print("数字不够!")
        continue
    try:
        yourAns2=[int(e) for e in yourAns]
    except ValueError:
        print("不是数字!")
        continue

    if is_chongfu(yourAns2):
        print("数字重复!")
        continue
    a,b=check(yourAns2,nums)
    print(f"结果: {a}A{b}B")
    if a==4:
        print("你成功了!")
        break
    i+=1
else:
    print("你失败了。")
print("答案是:",', '.join([str(e) for e in nums]))

备注:代码不能用BCCN在线编程运行,因为输入值只能在程序运行前输入。

[此贴子已经被作者于2022-8-21 20:32编辑过]

搜索更多相关主题的帖子: for print if 位置 数字 
2022-08-20 16:15
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
得分:0 
没人看?看了评论一下

爱玩编程的小学生,有Python,但只会一点点C++。

版主->斑竹->竹子,所以版主是竹子。(doge)
//不要让我当版主
2022-08-21 10:45
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
得分:0 
1.0.0版代码:
程序代码:
import random
def is_chongfu(test_list):
    for i in range(len(test_list)):
        for j in range(len(test_list)-1):
            j1=j if j<i else j+1
            if test_list[j1] == test_list[i]:
                return True
    else:
        return False
def check(yours,answers):
    a,b=0,0
    for i in range(len(yours)):
        for j in range(len(answers)):
            if yours[i]==answers[j]:
                if i==j:
                    a+=1
                else:
                    b+=1
    return (a,b)

nums=random.sample(range(10),4)
i=1
while i<=10:
    print("第 %d 次猜数字:"%i)
    yourAns=input("请依次输入四个数字(如5423,没有分隔符,超出的忽略):")
    print("你输入:",', '.join(yourAns[:4]))
    try:
        yourAns2=[int(yourAns[j]) for j in range(4)]
    except ValueError:
        print("不是数字!")
        continue
    except IndexError:
        print("数字不够!")
        continue

    if is_chongfu(yourAns2):
        print("数字重复!")
        continue
    a,b=check(yourAns2,nums)
    print(f"结果: {a}A{b}B")
    if a==4:
        print("你成功了!")
        break
    i+=1
else:
    print("你失败了。")
print("答案是:",', '.join([str(e) for e in nums]))

爱玩编程的小学生,有Python,但只会一点点C++。

版主->斑竹->竹子,所以版主是竹子。(doge)
//不要让我当版主
2022-08-21 16:02
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
得分:0 
1.0.1版代码:
程序代码:
import random
def is_chongfu(test_list):
    for i in range(len(test_list)):
        for j in range(len(test_list)-1):
            j1=j if j<i else j+1
            if test_list[j1] == test_list[i]:
                return True
    else:
        return False
def check(yours,answers):
    a,b=0,0
    for i in range(len(yours)):
        for j in range(len(answers)):
            if yours[i]==answers[j]:
                if i==j:
                    a+=1
                else:
                    b+=1
    return (a,b)

nums=random.sample(range(10),4)
i=1
while i<=10:
    print("第 %d 次猜数字:"%i)
    yourAns=input("请依次输入四个数字(如5423,没有分隔符,超出的忽略):")
    print("你输入:",', '.join(yourAns[:4]))
    try:
        yourAns2=[int(e) for e in yourAns]
    except ValueError:
        print("不是数字!")
        continue
    except IndexError:
        print("数字不够!")
        continue

    if is_chongfu(yourAns2):
        print("数字重复!")
        continue
    a,b=check(yourAns2,nums)
    print(f"结果: {a}A{b}B")
    if a==4:
        print("你成功了!")
        break
    i+=1
else:
    print("你失败了。")
print("答案是:",', '.join([str(e) for e in nums]))

爱玩编程的小学生,有Python,但只会一点点C++。

版主->斑竹->竹子,所以版主是竹子。(doge)
//不要让我当版主
2022-08-21 16:14
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
得分:0 
等等,以前那个yourAns2=[int(yourAns[j]) for j in range(4)]
现在改成yourAns2=[int(e) for e in yourAns]
所以以后只能判断长度,明天再改

爱玩编程的小学生,有Python,但只会一点点C++。

版主->斑竹->竹子,所以版主是竹子。(doge)
//不要让我当版主
2022-08-21 20:13
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
得分:0 
“AB版猜数字 1.1.0”代码:
程序代码:
import random
def is_chongfu(test_list):
    for i in range(len(test_list)):
        for j in range(len(test_list)-1):
            j1=j if j<i else j+1
            if test_list[j1] == test_list[i]:
                return True
    else:
        return False
def check(yours,answers):
    a,b=0,0
    for i in range(len(yours)):
        for j in range(len(answers)):
            if yours[i]==answers[j]:
                if i==j:
                    a+=1
                else:
                    b+=1
    return (a,b)

nums=random.sample(range(10),4)
i=1
while i<=10:
    print("第 %d 次猜数字:"%i)
    yourAns=input("请依次输入四个数字(如5423,没有分隔符,超出的忽略):")
    print("你输入:",', '.join(yourAns[:4]))
    if yourAns == "":
        print("输入为空!")
        continue
    try:
        yourAns2=[int(e) for e in yourAns]
    except ValueError:
        print("不是数字!")
        continue
    except IndexError:
        print("数字不够!")
        continue

    if is_chongfu(yourAns2):
        print("数字重复!")
        continue
    a,b=check(yourAns2,nums)
    print(f"结果: {a}A{b}B")
    if a==4:
        print("你成功了!")
        break
    i+=1
else:
    print("你失败了。")
print("答案是:",', '.join([str(e) for e in nums]))

爱玩编程的小学生,有Python,但只会一点点C++。

版主->斑竹->竹子,所以版主是竹子。(doge)
//不要让我当版主
2022-08-21 20:31
sssooosss
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:3
帖 子:664
专家分:1115
注 册:2019-8-27
得分:0 
共同学习
2022-08-22 18:48
sostemp
Rank: 4
等 级:业余侠客
威 望:8
帖 子:162
专家分:221
注 册:2009-6-2
得分:0 
学习
2022-09-27 23:23
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
得分:0 
查重
if len(set(list)) != len(list):
    print("重复")
2022-09-30 15:10
jsccl
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-10-6
得分:0 
2022-10-06 20:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509833-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.124219 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved