python基础08_阶段学习小结(一个小游戏和程序异常处理)

文章讲述了Python初学者的学习进展,包括掌握的基础知识如print(),input(),数据类型,控制结构等,并实现了一个简单的剪刀石头布游戏。游戏中包含了用户输入判断和随机数生成。此外,文章还介绍了异常处理的概念,用try-except结构处理可能的程序错误。
摘要由CSDN通过智能技术生成

阶段性学习小结

先回顾一下,到目前位置大概学了些什么知识:

  • 输出指令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来说很少很少,但对于我们初学者而言,从无到有,已经很可观了。

剪刀石头布的小游戏

学习到这里,不得不说,其实我们已经可以做很多事了。

比如写一个与电脑玩剪刀石头布的小游戏,里边麻烦一点的大概只有怎么判断剪刀石头布的胜负

下边试试写一个关于与电脑玩剪刀石头布的小游戏

先想想,需要什么? 游戏的双方:用户 和 人

要做的事: 在“剪刀、石头、布”三者中任选二个,比较输赢

之后就可以想一想,以什么方式来实现:

  1. 怎么让用户和电脑分别得到“剪刀、石头、布”中的一个。
    • 用户,自己输入
    • 电脑,随机获取
import random
# 建立一个列表
choices = ['剪刀', '石头', '布']
# 电脑抽取随机值
computer_choice = random.choice(choices)
#用户输入
user_choice = input("请输入剪刀, 石头, or 布: ") 

  1. 怎么比较“剪刀、石头、布”三者的胜负
剪刀 石头 平手 平手 平手 剪刀 石头

看图就很清楚:

把平手以外的组合分成赢和输两组:

用户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!")
  1. 既然是游戏,每次都去点运行肯定是不方便的,所以加个循环
while Ture:
    pass
	# 因为是死循环,加个停止的判断条件
    if pass:
    	break
  1. 根据以往的经验,用户输入时可能会不按提示,或者输错。所以加入一个输入判断
if user_choice not in choices:
    print("输入错误,请重新输入...")
  1. 最后把以上几个代码进行组合,完成如下:
  • 注意位置和功能实现
  • 注意需要循环的代码是哪些
  • 注意遵循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('出错啦!')
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值