阶段性学习小结
先回顾一下,到目前位置大概学了些什么知识:
- 输出指令print()
- 一个人机互动的函数input(),可以提示用户输入需要的数据
- 一些数据的类型:整数int、浮点数(小数)float、布尔bool、字符str
- 常用的一些运算符号
- 数据存储的容器:列表list、元组tuple、字典dict、集合
- 变量、变量的赋值
- 条件选择型语句if、if…else、if…elif等
- 循环语句while、for in
- 一些函数:字符串内置函数、len()、type()、continues、break等
- 字符串的格式化:‘{}’.format(),和f’{}’
- import random里:random.inst()随机整数和random.choices()随机取值
对功能强大的python来说很少很少,但对于我们初学者而言,从无到有,已经很可观了。
剪刀石头布的小游戏
学习到这里,不得不说,其实我们已经可以做很多事了。
比如写一个与电脑玩剪刀石头布的小游戏,里边麻烦一点的大概只有怎么判断剪刀石头布的胜负
下边试试写一个关于与电脑玩剪刀石头布的小游戏
先想想,需要什么? 游戏的双方:用户 和 人
要做的事: 在“剪刀、石头、布”三者中任选二个,比较输赢
之后就可以想一想,以什么方式来实现:
- 怎么让用户和电脑分别得到“剪刀、石头、布”中的一个。
- 用户,自己输入
- 电脑,随机获取
import random
# 建立一个列表
choices = ['剪刀', '石头', '布']
# 电脑抽取随机值
computer_choice = random.choice(choices)
#用户输入
user_choice = input("请输入剪刀, 石头, or 布: ")
- 怎么比较“剪刀、石头、布”三者的胜负
看图就很清楚:
把平手以外的组合分成赢和输两组:
用户VS电脑 | |||
---|---|---|---|
石头VS剪刀 | 赢 | 石头VS布 | 输 |
布VS石头 | 赢 | 布VS剪刀 | 输 |
剪刀VS布 | 赢 | 剪刀VS石头 | 输 |
在平手以外,上表中的每一行,就对应一组赢和输。
我们只需要用到赢的这一组就够了,通俗的说:
在用户VS电脑这种情况中(这里是分左右的哦!),排除平手之后,用户赢的情况,只有下边列表中的三种组合,其他情况就是电脑赢
[('石头', '剪刀'), ('布', '石头'), ('剪刀', '布')]
判断输赢的代码:
# 用if语句判断胜负
if user_choice == computer_choice: #相同吗?
print("It's a tie!")
elif user_choice == '剪刀' and computer_choice == '布':
print("You win!")
elif user_choice == '石头' and computer_choice == '剪刀':
print("You win!")
elif user_choice == '布' and computer_choice == '石头':
print("You win!")
else:
print("Computer wins!")
比较简单的写法:
u_win = [('石头', '剪刀'), ('布', '石头'), ('剪刀', '布')]
if (user_choice, computer_choice) in u_win:
print('You win!')
else:
print("Computer wins!")
- 既然是游戏,每次都去点运行肯定是不方便的,所以加个循环
while Ture:
pass
# 因为是死循环,加个停止的判断条件
if pass:
break
- 根据以往的经验,用户输入时可能会不按提示,或者输错。所以加入一个输入判断
if user_choice not in choices:
print("输入错误,请重新输入...")
- 最后把以上几个代码进行组合,完成如下:
- 注意位置和功能实现
- 注意需要循环的代码是哪些
- 注意遵循python的语法规则,同一缩进要保持一致,默认每层缩进空四个空格或是一个tab。
代码比较少的组合:
import random
# 建立一个列表
choices = ['剪刀', '石头', '布']
# 电脑抽取随机值
while True:
computer_choice = random.choice(choices)
#用户输入
user_choice = input("请输入剪刀, 石头, or 布: ")
if user_choice not in choices:
print("输入错误,请重新输入...")
continue
u_win = [('石头', '剪刀'), ('布', '石头'), ('剪刀', '布')]
if (user_choice, computer_choice) in u_win:
print('You win!')
else:
print("Computer wins!")
# 询问是否再来一次,并设定while循环结束条件
play_again = input("按任意键继续游戏,输入n结束: ")
if play_again == 'n':
break #终止循环
# 这句打印是在while循环外的,所以循环结束后才会执行
print("Thanks for playing!")
代码比较多的组合:
# 加载random模块,后续使用random.choice()供电脑随机取值
import random
print("我们来玩剪刀, 石头, 布吧!")
# 建立一个列表
choices = ['剪刀', '石头', '布']
while True:
# 提示输入'剪刀', '石头', '布'任一个,并做输入判断
user_choice = input("请输入剪刀, 石头, or 布: ")
if user_choice not in choices:
print("输入错误,请重新输入...")
continue # 中止,重新开始循环
else:
# 电脑抽取随机值
computer_choice = random.choice(choices)
print(f"You chose {user_choice} and computer chose {computer_choice}.")
# 用if语句判断胜负
if user_choice == computer_choice:
print("It's a tie!")
elif user_choice == '剪刀' and computer_choice == '布':
print("You win!")
elif user_choice == '石头' and computer_choice == '剪刀':
print("You win!")
elif user_choice == '布' and computer_choice == '石头':
print("You win!")
else:
print("Computer wins!")
# 询问是否再来一次,并设定while循环结束条件
play_again = input("按任意键继续游戏,输入n结束: ")
if play_again == 'n':
break #终止循环
# 这句打印是在while循环外的,所以循环结束后才会执行
print("Thanks for playing!")
运行结果:
我们来玩剪刀, 石头, 布吧!
请输入剪刀, 石头, or 布: no
输入错误,请重新输入...
请输入剪刀, 石头, or 布: 有
输入错误,请重新输入...
请输入剪刀, 石头, or 布: 石头
You chose 石头 and computer chose 剪刀.
You win!
按任意键继续游戏,输入n结束:
请输入剪刀, 石头, or 布: 石头
You chose 石头 and computer chose 布.
Computer wins!
按任意键继续游戏,输入n结束: 石头
请输入剪刀, 石头, or 布: 石头
You chose 石头 and computer chose 布.
Computer wins!
按任意键继续游戏,输入n结束: n
Thanks for playing!
非常有成就感啊!!!!能看懂简单的代码,并修改了!!很是高兴。
希望有像我一样的真小白耐心的看到这里,愿一起在学习的路上砥砺前行。
其实还可以找现在流行ai智能,我找了CSND的智能写作助手,它给我的原代码是这样的:
import random
def play_game():
print("Let's play Rock, Paper, Scissors!")
choices = ['rock', 'paper', 'scissors']
computer_choice = random.choice(choices)
while True:
user_choice = input("Choose rock, paper, or scissors: ").lower()
if user_choice not in choices:
print("Invalid choice, please try again.")
else:
print(f"You chose {user_choice} and computer chose {computer_choice}.")
if user_choice == computer_choice:
print("It's a tie!")
elif user_choice == 'rock' and computer_choice == 'scissors':
print("You win!")
elif user_choice == 'paper' and computer_choice == 'rock':
print("You win!")
elif user_choice == 'scissors' and computer_choice == 'paper':
print("You win!")
else:
print("Computer wins!")
break
while True:
play_game()
play_again = input("Do you want to play again? (y/n): ").lower()
if play_again == 'n':
break
print("Thanks for playing!")
对照后,还是很有帮助,我把自己取的一些变量名改了。
嗯,还有,我的是中文版,而且有两个版本,它的是英文版。
明天继续学习……
补充,程序异常的简单应用
try:
<有问题的代码>
except [异常类型]: # 有try必须有except
<代码异常时执行代码>
finally # 可以没有,随意。
<无论程序是否异常都可执行的代码>
# except后注明[异常类型],例如:except ValueError:,是可以有多个,否则只能有一个
# 下面格式,可以把异常写入变量e中
try:
pass
except BaseException as e:
pass
# 一个例子
try:
a = 10
b = int(input('请输入一个数字:')) #如果输入的中含字符,则运行异常
print(a/b) # 如果输入的是0,则计算出错
except ValueError:
print('程序异常,输入错误,不能含有字符!')
except ZeroDivisionError :
print('程序出错,不能输0!')
except :
print('出错啦!')