双色球指定区间比例选号问题

代码如下,能够正常运行,但是得到的结果跟预设的并不相符,请问该怎么办?

import random 

import linecache

x=input("请输入第一区间数量:")
y=input("请输入第二区间数量:")
z=input("请输入第三区间数量:")

def w500():
    redball=[]
    ticket=[]
    a=0
    b=0
    c=0

    for i in range(1,34):
        redball.append(i)
        i=i+1
        #print(redball)

    for x in range(1,7):
        red_num=random.sample(redball,1)
        redball.remove(red_num[0])
        ticket.append(red_num[0])
        #print(redball)
        #print(ticket)


    for i in ticket[:]:
        if 0<i<=11:
            a=a+1
        elif 11<i<=21:
            b=b+1
        elif 21<i<=33:
            c=c+1
        #print(a,b,c)

    return ticket,a,b,c
    linecache.clearcache() #清除缓存

w500()
print(w500()[0],w500()[1:])

active=True

while active:
    w500()
    if w500()[1]==int(x) and w500()[2]==int(y) and w500()[3]==int(z):
        print(w500()[0],w500()[1:],'Bingo!')
        linecache.clearcache() #清除缓存
        active=False
    else:
        print(w500()[0],w500()[1:])
        linecache.clearcache() #清除缓存

 

运行结果不正确的原因就是对w500函数调用上,代码中先调用一次,又在while语句块中if判断和print语句又重复调用该函数,每次调用其返回值都会改变。将每次循环调用w500函数返回值赋值给一个变量,后取值进行判断并打印输出,这样改即可:

import random 
import linecache

x=input("请输入第一区间数量:")
y=input("请输入第二区间数量:")
z=input("请输入第三区间数量:")
 
def w500():
    a=b=c=0
    redball=random.sample(range(1,34),6)    
    for i in redball:
        if 0<i<=11:
            a=a+1
        elif 11<i<=21:
            b=b+1
        elif 21<i<=33:
            c=c+1
    return redball,a,b,c
    linecache.clearcache() #清除缓存
 
while True:
    g=w500()    
    if g[1]==int(x) and g[2]==int(y) and g[3]==int(z):
        print(g[0],g[1:],'Bingo!')
        linecache.clearcache() #清除缓存
        break
    else:
        print(g[0], g[1:])
        linecache.clearcache() #清除缓存

 

你预设的结果是什么?

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632