1.3_枚举_称硬币.py

这是最开始写的错误代码,到现在也还是错的,之所以错我认为关键在于我一根筋的认为要把轻的和重的放在一个循环里,就导致了总会出现想不到的问题

#11枚真币,1枚假币
#重量不同但不知道谁更重
#现在已经称了三次,并且数据告诉你了
#请你找出假币 并且确定是轻的还是重的


#因为这是在枚举里面讲的所以可以用枚举的思路来做
#所谓枚举就是一个个尝试,所以可以把一个个硬币带入数据中看是否符合数据
#如果符合就是假币(注意尝试分为轻和重两种情况)


#假设输入的长这个样子  ABCD EFGH even,ABCI EFJK up,ABIJ EFGH even
str_='K'
in_str=input('请输入如(ABCD EFGH even,ABCI EFJK up,ABIJ EFGH even):')
tiaojian_list=in_str.split(',')
tiaojian1=tiaojian_list[0]
tiaojian2=tiaojian_list[1]
tiaojian3=tiaojian_list[2]

#这里先假设左右不会放相同硬币,因为这样就没意义了
for i in str_:
    done=False
    c = 0  # 用来判断是轻还是重c=0   #用来判断是轻还是重
    z = 0  # 用来判断他是不是有问题
    #在写个循环求三次
    for j in tiaojian_list:

        #首先假设为轻(记住以左边作为参考 ABCI EFJK up 就是说右边高)
        bijiao = j.split(' ')[2]
        if i in j.split(' ')[0]:
            if bijiao=='up':
                done=False
                #没有用(右边高)
            elif bijiao=='even':
                done = False
                #一样高
            elif bijiao=='low':
                done=True     #左边高(右边低)
            #假如说进来过但是不满足
            if done==False:
                z+=1
        elif i in j.split(' ')[1]:
            if bijiao=='up':
                done=True #没有用(右边高)
            elif bijiao=='even':
                done=False  #一样高
            elif bijiao=='low':
                done=False      #左边高(右边低)
            if done == False:
                z+=1
        if done==True:
            c+=1
            continue


        #现在轻的走完了,但还是不满足
        if i in j.split(' ')[0]:
            if bijiao == 'up':
                done=True # 没有用(右边高)
            elif bijiao == 'even':
                done = False
                # 一样高
            elif bijiao == 'low':
                done = False
                # 左边高(右边低)
            if done == False:
                z+=1
        elif i in j.split(' ')[1]:
            if bijiao == 'up':
                done = False
            elif bijiao == 'even':
                done = False
                # 一样高
            elif bijiao == 'low':
                done=True  # 没有用(右边高)
            if done == False:
                z+=1
    if done==True:
        if c > 0:
            if z==0:
                print(i,'轻')
        else:
            if z==0:
                print(i,'重')

这是更改之后的带代码,直接拿两个循环,反正枚举全都要走一遍

'上面代码总会有没考虑到的地方所以我觉得,将假币为轻和假币为重的判断分开'
str_='ABCDEFGHIJKL'
in_str=input('请输入如(ABCD EFGH even,ABCI EFJK up,ABIJ EFGH even):')
tiaojian_list=in_str.split(',')
for i in str_:
    done=False
    for j in tiaojian_list:
        bijiao=j.split(' ')[2]
        #开始i假币为轻的判断
        if i in j.split(' ')[0]:
            if bijiao=='even':
                done=False
            elif bijiao=='up':
                done=False
            elif bijiao=='low':
                done=True
            #如果你进来了,但准备出去的时候为False
            #那么你就不可能是假币了
            if done==False:
                break
        if i in j.split(' ')[1]:
            if bijiao=='even':
                done=False
            elif bijiao=='up':
                done=True
            elif bijiao=='low':
                done=False
            # 如果你进来了,但准备出去的时候为False
            # 那么你就不可能是假币了
            if done == False:
                break
    if done==True:
        print(i,'轻')

#为重的时候
for i in str_:
    done=False
    for j in tiaojian_list:
        bijiao=j.split(' ')[2]
        #开始i假币为轻的判断
        if i in j.split(' ')[0]:
            if bijiao=='even':
                done=False
            elif bijiao=='up':
                done=True
            elif bijiao=='low':
                done=False
            #如果你进来了,但准备出去的时候为False
            #那么你就不可能是假币了
            if done==False:
                break
        if i in j.split(' ')[1]:
            if bijiao=='even':
                done=False
            elif bijiao=='up':
                done=False
            elif bijiao=='low':
                done=True
            # 如果你进来了,但准备出去的时候为False
            # 那么你就不可能是假币了
            if done == False:
                break
    if done==True:
        print(i,'重')

猜你喜欢

转载自blog.csdn.net/qq_53183608/article/details/119146928
1.3
py