imcampbell 发表于 2020-6-10 20:57:14

写了一段随机取数的程序,模拟彩票选号,然后报错说没有红球这个定义,麻烦指点

#买彩票
import random
import math
red = []
blue = []
print('请问老板是玩双色球还是大乐透?')
print('双色球请输入1,大乐透请输入2。')
way = int(input('请输入您的选择: '))

if int(way) == 1 :
    for n in range(1,33):
      if len(red) <= 29:
            n = random.randint(1,32)
            if n in red:
                continue
            red.append(n)
      if len(blue) <=4:
            m = random.randint(1,16)
            if m in blue:
                continue
            blue.append(m)
    print('这次的幸运号分别是是:','第一注红球'red.,'第一注蓝球',blue.,/n)
    print('                      ','第二注红球'red.,'第二注蓝球',blue.,/n)
    print('                      ','第三注红球'red.,'第三注蓝球',blue.,/n)
    print('                      ','第四注红球'red.,'第四注蓝球',blue.,/n)
    print('                      ','第五注红球'red.,'第五注蓝球',blue.,/n)
elif int(way) == 2 :
    for n in range(1,34):
      if len(red) <= 19:
            n = random.randint(1,34)
            if n in red:
                continue
            red.append(n)
      if len(blue) <=9:
            m = random.randint(1,12)
            if m in blue:
                continue
            blue.append(m)
    print('这次的幸运号分别是是:','第一注红球'red.,'第一注蓝球',blue.,/n)
    print('                      ','第二注红球'red.,'第二注蓝球',blue.,/n)
    print('                      ','第三注红球'red.,'第三注蓝球',blue.,/n)
    print('                      ','第四注红球'red.,'第四注蓝球',blue.,/n)
    print('                      ','第五注红球'red.,'第五注蓝球',blue.,/n)

else:
    print('老板请不要开玩笑。')
input('按回车结束程序: ')


感谢!

冬雪雪冬 发表于 2020-6-10 21:02:57

way已经是整数了,不需要int(way)

Twilight6 发表于 2020-6-10 21:10:11

本帖最后由 Twilight6 于 2020-6-10 22:20 编辑

问题蛮多的:



[*] way 已经在 input 转为 int 了,不用再次 int

[*] 这个地方的red前面需要有个逗号,red 后面 不能加了个 '.' ,还有后面的 /n 需要写成字符串,因为/n是字符串转义字符,表换行作用

print('这次的幸运号分别是是:','第一注红球'red.,'第一注蓝球',blue.,/n)

改成:

    print('这次的幸运号分别是是:','第一注红球',red,'第一注蓝球',blue,'/n')

这样这里就不会报错了

[*] 列表切片用法错误,你red 是取了 red 列表里的 0~4个元素了

[*] 问题有点小多....很多用法都错了


帮你纠正了下语法错误的代码,可以正常运行了,你自己想想办法达到你自己的目的吧:

#买彩票
import random
import math
red = []
blue = []
print('请问老板是玩双色球还是大乐透?')
print('双色球请输入1,大乐透请输入2。')
way = int(input('请输入您的选择: '))

if way == 1 :
    for n in range(1,33):
      if len(red) <= 29:
            n = random.randint(1,32)
            if n in red:
                continue
            red.append(n)
      if len(blue) <=4:
            m = random.randint(1,16)
            if m in blue:
                continue
            blue.append(m)
    print('这次的幸运号分别是是:','第一注红球',red,'第一注蓝球',blue,'/n')
    print('                      ','第二注红球',red,'第二注蓝球',blue,'/n')
    print('                      ','第三注红球',red,'第三注蓝球',blue,'/n')
    print('                      ','第四注红球',red,'第四注蓝球',blue,'/n')
    print('                      ','第五注红球',red,'第五注蓝球',blue,'/n')
elif way == 2 :
    for n in range(1,34):
      if len(red) <= 19:
            n = random.randint(1,34)
            if n in red:
                continue
            red.append(n)
      if len(blue) <=9:
            m = random.randint(1,12)
            if m in blue:
                continue
            blue.append(m)
    print('这次的幸运号分别是是:','第一注红球',red,'第一注蓝球',blue,'/n')
    print('                      ','第二注红球',red,'第二注蓝球',blue,'/n')
    print('                      ','第三注红球',red,'第三注蓝球',blue,'/n')
    print('                      ','第四注红球',red,'第四注蓝球',blue,'/n')
    print('                      ','第五注红球',red,'第五注蓝球',blue,'/n')

else:
    print('老板请不要开玩笑。')
input('按回车结束程序: ')

txxcat 发表于 2020-6-10 22:16:24

Twilight6 发表于 2020-6-10 21:10
问题蛮多的:




补充一下哈,换行符是'\n';另外print默认是会打印完后换行的,除非希望每行之间隔一个空行,否者这里加入换行符是多余的;最后这种多行输出,三引号是最佳选择。

txxcat 发表于 2020-6-10 22:47:34

楼主除了对切片理解错误,似乎对彩票的规则也理解错误,我猜题目应该是使用的单式投注法,以双色球来说,每一注的6个红球是不会有重复的,而楼主的写法是5注的所有红球都不会有重复(而且代码切片有误,有的是4个球,有的是5个球),这样如果需要第6注彩票,抱歉,没有足够的球了。所以正确的写法应该是每次循环算出6个红球和1个蓝球,每次循环开始都要把数据复位清零。下面大乐透也是这样,只是变成了5+2。

lucky邪神 发表于 2020-6-10 23:52:17

1.way不需要重复的使用int,输入的时候用了就可以了
2.print输出末尾默认是有一个回车的
3.red前面缺少一个分隔符“,”
4.列表中取元素,不用在名字后面加“.“
不是很了解双色球,输出大致如下print('这次的幸运号分别是是:','第一注红球',red[:5],'第一注蓝球',blue)   
    print('                      ','第二注红球',red,'第二注蓝球',blue)
    print('                      ','第三注红球',red,'第三注蓝球',blue)
    print('                      ','第四注红球',red,'第四注蓝球',blue)
    print('                      ','第五注红球',red,'第五注蓝球',blue)


下面是我搞得选powerball的一个小程序#这是一个随机选择数字的游戏
import random
selectball = random.randrange(1,70,1)
# redball = random.randrange(1,27)
ballnumber = 0
ball =
while ballnumber < 5:
    ball = selectball
    print ('第',ballnumber,'球是:',selectball)
    ballnumber += 1
    selectball = random.randrange(1,70)
    while 1:
      if selectball in ball[:]:
            selectball =random.randrange(1,70)
      else :
            break
redball = random.randrange(1,27)
print ('特殊球是:',redball)

txxcat 发表于 2020-6-11 00:13:06

#买彩票
import random

def lottery(kind):
    if kind==1:
      redmax,bluemax,redcount,bluecount=33,16,6,1
    elif kind==2:
      redmax,bluemax,redcount,bluecount=35,12,5,2
    else:
      return
    red=[]
    blue=[]
    j,k=0,0
    while j<redcount:
      n = random.randint(1,redmax)
      if n in red:
            continue
      j+=1
      red.append(n)
    while k<bluecount:
      n = random.randint(1,bluemax)
      if n in blue:
            continue
      k+=1
      blue.append(n)
    return (red,blue)
            
print('请问老板是玩双色球还是大乐透?\n双色球请输入1,大乐透请输入2,退出请输入0')
while True:
    way = input('请输入您的选择:')
    if not way.isdigit():
      print('输入错误,',end='')
      continue
    way=int(way)
    if way==0:
      break
    if 0<way<3:
      print('这次的幸运号分别是:',end='')
      for i in range(5):
            no=lottery(way)
            if i!=0:
                print(' '*17,end='')
            print('第%s注红球 %s 第%s注蓝球 %s' % ('一二三四五',' '.join(]),'一二三四五',' '.join(])))
    else:
      print('老板请不要开玩笑,',end='')
      continue

imcampbell 发表于 2020-6-11 17:04:36

Twilight6 发表于 2020-6-10 21:10
问题蛮多的:




哇~感谢大佬!

imcampbell 发表于 2020-6-11 17:05:25

txxcat 发表于 2020-6-10 22:47
楼主除了对切片理解错误,似乎对彩票的规则也理解错误,我猜题目应该是使用的单式投注法,以双色球来说,每 ...

感谢感谢!一会晚上再仔细研究!

imcampbell 发表于 2020-6-11 17:06:11

lucky邪神 发表于 2020-6-10 23:52
1.way不需要重复的使用int,输入的时候用了就可以了
2.print输出末尾默认是有一个回车的
3.red前面缺少一 ...

感谢感谢!

Twilight6 发表于 2020-6-11 17:07:17

imcampbell 发表于 2020-6-11 17:04
哇~感谢大佬!

客气了~加油吧
https://xxx.ilovefishc.com/forum/202005/27/132745rjvcvw1z2148jthd.gif

imcampbell 发表于 2020-6-11 21:53:40

完成

本帖最后由 imcampbell 于 2020-6-11 22:00 编辑

Twilight6 发表于 2020-6-10 21:10
问题蛮多的:




大佬,我有新问题!
#买彩票
import random
import math
red = []
blue = []
print('请问老板是玩双色球还是大乐透?')
print('双色球请输入1,大乐透请输入2。')
way = int(input('请输入您的选择: '))

if way == 1 :
    for n in range(1,33):
      if len(red) < 30:
            n = random.randint(1,32)
            if n in red:
                continue
            red.append(n)
      if len(blue) <=4:
            m = random.randint(1,16)
            if m in blue:
                continue
            blue.append(m)
    print('红球有',red[:],'蓝球有',blue[:])
    print('这次的幸运号分别是是:','第一注红球',red,'第一注蓝球',blue)
    print('                      ','第二注红球',red,'第二注蓝球',blue)
    print('                      ','第三注红球',red,'第三注蓝球',blue)
    print('                      ','第四注红球',red,'第四注蓝球',blue)
    print('                      ','第五注红球',red,'第五注蓝球',blue)
elif way == 2 :
    for n in range(1,34):
      if len(red) < 24:
            n = random.randint(1,34)
            if n in red:
                continue
            else: red.append(n)
    for m in range(1,12):
      if len(blue) <=10:
            m = random.randint(1,12)
            if m in blue:
                continue
            else: blue.append(m)
    print('红球有',red[:],'蓝球有',blue[:])
    print('这次的幸运号分别是是:','第一注红球',red,'第一注蓝球',blue)
    print('                      ','第二注红球',red,'第二注蓝球',blue)
    print('                      ','第三注红球',red,'第三注蓝球',blue)
    print('                      ','第四注红球',red,'第四注蓝球',blue)
    print('                      ','第五注红球',red,'第五注蓝球',blue)

else:
    print('老板请不要开玩笑。')
input('按回车结束程序: ')

这个是更新后的程序。
我的想法是,比如双色球,我要从1到32个数中取30个不同的随机数,随机排列,作为红球,然后从1到16中间随机取5个不同的数,随机排列,作为蓝球。
红球中的1到6号,作为第一注,蓝球中的1号,作为第一注。依次类推。
现在的问题是,我的程序取不满24个不同随机数。
第二部分大乐透也是,取不满20个随机排列的不同数字。还请大佬进一步指点一下。

SYSTEM0 发表于 2020-7-27 08:57:50

应该是'\n'不是'/n'!
页: [1]
查看完整版本: 写了一段随机取数的程序,模拟彩票选号,然后报错说没有红球这个定义,麻烦指点