问题一:用Python写,设计一个小游戏“谁先走到17谁就赢”。规则如下: 有两位参赛者,参赛者每次可以选择走1步、2步、3步。两位参赛者交替走,谁走的路程相加先等于17谁获胜。>如果一方超过了17则判断为输,另一方直接赢得比赛。 要求在控制台交互,无论用户输入什么,程序都不能崩溃,并给出提示,引导用户输入正确的内容,例如,输入走几步的时候,如果没有输入1、2、3中的任意数字,需要提示输入有误,请重新输入。 分析: 使用try-except 语句进行异常处理。 使用while循环,设置跳出条件,利用break跳出循环。 初始化步数为0,每一次参赛者输入要走的步数后都会增加相应步数。 问题二:下面的Python代码中,找出下面的问题所在,并修改好。 下面这段代码是使用Python实现将列表中的数与它相邻的数求均值并输出。例如: 1s=[15,8,7,9,8] 输出结果为: [11.5,10,8,8,8.5] 可以看出,中间的数是与其左右两个数一起求均值,而第一个数和最后一个数则只 与其相邻的一个数求均值。函数代码如下: def mid mean(ls): new_list=[] for i in range(len(ls)): new_item =(ls[i-1]+Is[i]+ls[i+1])/3 new_list.append(new_item)return new _list 将1s=[15,8,7,9,8]传入mid_mean()函数中会报错,请你帮忙解决。
时间: 2024-02-26 18:57:44 浏览: 60
回答问题一:
代码如下:
```
# 初始化步数为0
steps = 0
# 参赛者1先开始
player = 1
while steps < 17:
try:
# 输入要走的步数
move = int(input("Player {}, please enter your move (1, 2 or 3): ".format(player)))
if move not in [1, 2, 3]:
# 如果输入不是1、2、3中的任意数字,则提示输入有误
print("Invalid move! Please enter 1, 2 or 3.")
continue
# 更新步数
steps += move
# 判断是否已经到达17步
if steps >= 17:
# 如果一方超过了17则判断为输,另一方直接赢得比赛
print("Player {} wins!".format(player))
break
# 交替走
player = 2 if player == 1 else 1
except ValueError:
# 如果输入不是整数,则提示输入有误
print("Invalid input! Please enter an integer.")
```
回答问题二:
代码的问题在于当i=0或i=len(ls)-1时,`ls[i-1]`或`ls[i+1]`会越界。解决方法是判断i的值是否是0或者len(ls)-1,如果是,则只和一个相邻的数求均值。
修改后的代码如下:
```
def mid_mean(ls):
new_list = []
for i in range(len(ls)):
if i == 0:
new_item = (ls[i] + ls[i+1])/2
elif i == len(ls)-1:
new_item = (ls[i] + ls[i-1])/2
else:
new_item = (ls[i-1] + ls[i] + ls[i+1])/3
new_list.append(new_item)
return new_list
ls = [15,8,7,9,8]
print(mid_mean(ls))
```
阅读全文