dengyk 发表于 2020-4-18 15:47:23

一直出现sequence item 0: expected str instance, int found(请问怎么办呀?)

"""
    用户购买彩票
    要求:共有7个球,红球有6个
      红球的数值在(1-33)的范围内且不能重复
      蓝球的范围在(1-16)的范围内
      (1)打印出你购买的号码
      (2)判断是否中奖
"""


import random
#中奖号码
red_ball = random.randint(1,33)
blue_ball = random.randint(1,16)
price_num = []
while (red_ball not in price_num) and (len(price_num) < 7):
    price_num.append(red_ball)
price_result = "".join(price_num)

#创建用户号码盒
box_user = []

#用户购买红球
user = int(input("请输入第一个红球的号码: "))
#如果超出范围
while (user > 33) and (user < 1) and (user in box_user) and (len(box_user) < 6):
    print("输入的号码不正确")
    user = int(input("请重新输入: "))
box_user.append(user)

#用户购买蓝球
user_blue = int(input("请输入最后一个蓝球的号码: "))
box_user.append(user_blue)

#将号码列表转换成用户彩票号码
str_user = "".join(box_user)
print("您的彩票号码是%s"%(str_user))

#判断是否中奖
if str_user == price_result:
    print("恭喜你中奖了")
else:
    print("很遗憾,你没有中奖")

qiuyouzhi 发表于 2020-4-18 15:50:33

price_num里面的是数字,而join要作用在字符串上。
你可以append的时候就把添加的内容搞成字符串。

zltzlt 发表于 2020-4-18 17:21:33

要 join() 的序列必须每个元素都是字符串,所以添加的时候要用字符串:

"""
    用户购买彩票
    要求:共有7个球,红球有6个
      红球的数值在(1-33)的范围内且不能重复
      蓝球的范围在(1-16)的范围内
      (1)打印出你购买的号码
      (2)判断是否中奖
"""

import random

# 中奖号码
red_ball = random.randint(1, 33)
blue_ball = random.randint(1, 16)
price_num = []
while (red_ball not in price_num) and (len(price_num) < 7):
    price_num.append(str(red_ball))
price_result = "".join(price_num)

# 创建用户号码盒
box_user = []

# 用户购买红球
user = int(input("请输入第一个红球的号码: "))
# 如果超出范围
while (user > 33) and (user < 1) and (user in box_user) and (len(box_user) < 6):
    print("输入的号码不正确")
    user = int(input("请重新输入: "))
box_user.append(str(user))

# 用户购买蓝球
user_blue = int(input("请输入最后一个蓝球的号码: "))
box_user.append(str(user_blue))

# 将号码列表转换成用户彩票号码
str_user = "".join(box_user)
print("您的彩票号码是%s" % str_user)

# 判断是否中奖
if str_user == price_result:
    print("恭喜你中奖了")
else:
    print("很遗憾,你没有中奖")

txxcat 发表于 2020-4-18 17:26:05

除了你使用整数来join导致错误以外,代码还有些其他的问题,修改了一部分,可以正常跑起来了:
"""
    用户购买彩票
    要求:共有7个球,红球有6个
      红球的数值在(1-33)的范围内且不能重复
      蓝球的范围在(1-16)的范围内
      (1)打印出你购买的号码
      (2)判断是否中奖
"""


import random
#中奖号码

blue_ball = str(random.randint(1,16))
price_num = []
while len(price_num) < 6:
    red_ball = str(random.randint(1,33))            #红球要生成6次,所以必须在循环里
    if red_ball in price_num:
      continue
    price_num.append(red_ball)
price_result = " ".join(price_num)+' '+blue_ball

#创建用户号码盒
box_user = []

#用户购买红球
a=1
while len(box_user) < 6:                            #用户购买也要输入6次红球吧?
    user = input("请输入第%d个红球的号码: " % a)
    if int(user) > 33 or int(user) < 1 or (user in box_user):
      print("输入的号码不正确!")
      continue
    a+=1
    box_user.append(str(user))

#用户购买蓝球
while True:
    user_blue = input("请输入最后一个蓝球的号码: ")
    if 0<int(user_blue)<17:
      break
    print("输入的号码不正确!")
box_user.append(user_blue)

#将号码列表转换成用户彩票号码
str_user = " ".join(box_user)
print("您的彩票号码是:%s"%(str_user))

#判断是否中奖
if str_user == price_result:
    print("恭喜你中奖了!")
else:
    print("很遗憾,你没有中奖!")

dengyk 发表于 2020-4-18 19:45:24

txxcat 发表于 2020-4-18 17:26
除了你使用整数来join导致错误以外,代码还有些其他的问题,修改了一部分,可以正常跑起来了:

谢谢老哥

dengyk 发表于 2020-4-18 19:45:57

zltzlt 发表于 2020-4-18 17:21
要 join() 的序列必须每个元素都是字符串,所以添加的时候要用字符串:

谢谢老哥

dengyk 发表于 2020-4-18 19:46:34

qiuyouzhi 发表于 2020-4-18 15:50
price_num里面的是数字,而join要作用在字符串上。
你可以append的时候就把添加的内容搞成字符串。

谢谢老哥

zltzlt 发表于 2020-4-18 19:46:37

dengyk 发表于 2020-4-18 19:45
谢谢老哥

如果你的问题已解决,请设置【最佳答案】。

墨兰天空 发表于 2020-4-18 20:16:42

6
页: [1]
查看完整版本: 一直出现sequence item 0: expected str instance, int found(请问怎么办呀?)