写了一段随机取数的程序,模拟彩票选号,然后报错说没有红球这个定义,麻烦指点
#买彩票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('按回车结束程序: ')
感谢! way已经是整数了,不需要int(way) 本帖最后由 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('按回车结束程序: ')
Twilight6 发表于 2020-6-10 21:10
问题蛮多的:
补充一下哈,换行符是'\n';另外print默认是会打印完后换行的,除非希望每行之间隔一个空行,否者这里加入换行符是多余的;最后这种多行输出,三引号是最佳选择。 楼主除了对切片理解错误,似乎对彩票的规则也理解错误,我猜题目应该是使用的单式投注法,以双色球来说,每一注的6个红球是不会有重复的,而楼主的写法是5注的所有红球都不会有重复(而且代码切片有误,有的是4个球,有的是5个球),这样如果需要第6注彩票,抱歉,没有足够的球了。所以正确的写法应该是每次循环算出6个红球和1个蓝球,每次循环开始都要把数据复位清零。下面大乐透也是这样,只是变成了5+2。 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)
#买彩票
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 Twilight6 发表于 2020-6-10 21:10
问题蛮多的:
哇~感谢大佬! txxcat 发表于 2020-6-10 22:47
楼主除了对切片理解错误,似乎对彩票的规则也理解错误,我猜题目应该是使用的单式投注法,以双色球来说,每 ...
感谢感谢!一会晚上再仔细研究! lucky邪神 发表于 2020-6-10 23:52
1.way不需要重复的使用int,输入的时候用了就可以了
2.print输出末尾默认是有一个回车的
3.red前面缺少一 ...
感谢感谢! imcampbell 发表于 2020-6-11 17:04
哇~感谢大佬!
客气了~加油吧
https://xxx.ilovefishc.com/forum/202005/27/132745rjvcvw1z2148jthd.gif
完成
本帖最后由 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个随机排列的不同数字。还请大佬进一步指点一下。 应该是'\n'不是'/n'!
页:
[1]