掉进悬崖的小白,捡到python基础秘籍,学习第一周——语法基础,小游戏,无脑循环

人生苦短,我用python

语言的种类:

机器语言:机器指令,直接执行
汇编语言:符号化
高级程序设计语言(编译型)
高级程序设计语言(解释型)

语言的发展:

第一代:
打孔机(机器语言)和汇编,编程效率不高
第二代:
C,Basic,Pascal等为主,命令式语言
第三代:
C++,Delphi等面向对象为主要语言
第四代:
Java,C#自带垃圾回收,中间指令编译
第五代:
Python,Java,JS,PHP,Objective+C等
主要为了解决互联网网站,及App应用的编程

从上面的历史,除了C,其它的语言都会逐步进入历史

什么是python

Python 是一个高层次的结合了解释性、编译性、互动性的面向对象的、动态的、强类型的、脚本式的语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP 和Lua 语言。
Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。
Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到数据采集、数据分析、人工智能。

搭建 Python开发环境:

因为Python是跨平台的,它可以运行在Windows 、Mac和各种Linux/Unix 系统上。在Windows 上写Python程序,放到Linux上也是能够运行的。要开始学习Python编程,首先就得把Python安装到你的电脑里。
安装后,你会得到Python解释器(就是负责运行Python程序的),一个命令行交互环境,还有一个简单的集成开发环境。
Python的作者说了这样一句话 Python2.x已经是遗产,SO请使Python3.x
Python:https://www.python.org/
注意:
安装时若未勾选设置环境变量可以使用py指令
安装时若勾选设置环境变量可以使用python、py指令
环境变量可以手动配置
推荐使用py指令,方便多版本间切换 如:py -3.6

集成开发环境(IDE):

推荐:
pycharm:
官方地址:
https://www.jetbrains.com/pycharm/
其他IDE:
1.Eclipse+Pydev
2.Sublime Text
3.python自带的IDLE
4.vscode

Python代码的组织结构

项目(project):模块及程序包之家
程序包(package) : 模块之家
模块(.py):数据量、函数、类、语句之家
类(class):数据量、函数、类、语句之家
函数(function):语句块之家

存储结构:

1.物理结构
代码保存在以.py结束的后缀文件中
同一个项目中可以有很多个程序文件

2.逻辑结构
程序以模块的形式来划分
模块的区分不能单看其短名称 需要带上其所在的包名称/目录来进行区分
一般建议模块放置在包中 便于管理

代码模块的结构

1.
“”“
模块的说明性文字
”“”
2.
1.import 包/模块
2.from 包/模块 import 包/模块中的部分内容
作用:
1.自己没有想使用别人的 就需要先导入
2.被导入的包或模块会自动被解释器解释执行
注意包执行的是包内的__init__.py这个模块

例:
import math
print(math.pi)
from math import pi
print(pi)

3.数据量
程序中存储数据的容器
例:
age = 21
level = 17

4.函数
存放系列语句的地方
例:
def area®:
return pi * r * r
c1 = area(10)
print(c1)

5.类
面向对象的核心 后续会细讲
例:
class Circle:
r = 0

def area(self):
    return self.r * self.r * pi

6.语句/指令:目前的重点
程序需要执行的命令
可以命令程序执行很多条指令
执行次序要记牢:自上向下 自左向右
print(“剧情开始”)
print(“剧情发展”)
print(“剧情结束”)
注意:
1.可以使用当前行以前的内容
2.注意前后文的逻辑影响

如何插入一段漂亮的代码片

Python崇尚自由,但为了真正的自由,我们必须自我约束:约定和规定(PEP8部分)
通过pycharm的使用会慢慢养成标准的编程习惯,一定要坚持
一般ctrl+alt+L即可搞定格式问题

数据类型

整型

整数:关键字int
Python 可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样;例如:1,100 ,-8080 ,0等等。
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀0-9,a-f表示; 例如:0xff00 ,0xa5b4c3d2,等等。

浮点型

浮点数:关键字float
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23 ,3.14 ,-9.01等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5 等等。

布尔值

布尔值:逻辑上的真和假 关键字bool
布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。

字符串

字符串 关键字str
字符串是以单引号’或双引号"括起来的任意文本,比如’abc’ ,“xyz"等等。请注意,’’ 或”" 本身只是一种表示方式,不是字符串的一部分,因此,字符串’abc’ 只有a,b,c这3个字符。如果’本身也是一个字符,那就可以用"" 括起来,比如"I’m OK" 包含的字符是I,’,m,空格,O,K这6个字符。

空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一
个特殊的空值。

类型转换

数据类型转换:为了运算方便
转换条件:数据具备可转换性 例如这样就会错误:int(“abc”)
转换方式:类型关键字(x) 例:int(“111”) str(123)等

例:
float() 从一个字符串或整数创建一个新的浮点数(小数)。
#声明变量
number=“12”
#转换为浮点型
new_num=float(number)
#打印结果
print(new_num)
#打印类型
print(type(new_num))

int() 从一个字符串或浮点数创建一个新的整数。

声明变量

str_num = “12”
f_num = 1.9

转换为整数

str_int = int(str_num)

浮点数的小数部分将被舍弃

f_int = int(f_num)

打印结果

print(str_int)
print(f_int)

打印类型

print(type(str_int))
print(type(f_int))

str()从一个数(可以是任何其他类型)创建一个新的字符串。

声明变量

num1 = 17.2
num2 = 11
num3 = True

转换为字符串

f_str = str(num1)
int_str = str(num2)
bool_str = str(num3)

打印结果

print(f_str)
print(int_str)
print(bool_str)

打印类型

print(type(f_str))
print(type(int_str))
print(type(bool_str))
技巧:可以利用字符串求得数字位数:len(x)表示求x的字符数量
print(len(int_str))

bool() 从一个数(可以是任何其他类型)创建一个新的布尔值。
注意:
非True、False的数据也可以转换为布尔值:
0、None、“”均转换为False,以外的转换为True

声明变量

str1 = “”
str2 = None
str3 = “0”
num1 = 0
num2 = 3

转换为布尔

bool_str1 = bool(str1)
bool_str2 = bool(str2)
bool_str3 = bool(str3)
bool_num1 = bool(num1)
bool_num2 = bool(num2)

打印结果

print(bool_str1)
print(bool_str2)
print(bool_str3)
print(bool_num1)
print(bool_num2)

基础练习小游戏

猜拳游戏

# 2.猜拳游戏:
# 使用判断语句,完成石头剪刀布的猜拳游戏。
#
import random


def finger_guessing():
    guess1 = input("请用户选择输入石头, 剪刀, 布:")
    # guess1 = random.choice(["石头", "剪刀", "布"])
    guess2 = random.choice(["石头", "剪刀", "布"])
    player1 = "用户玩家"
    player2 = "电脑玩家"
    # 80%
    # random [1,1000] 1-200人赢
    r = random.randint(1, 1000)
    if 1 < r < 200:
        print("用户玩家出石头,电脑玩家出剪刀,用户玩家赢")  # 假装游戏正规运行,偷改省略
    else:
        if guess1 == "石头" and guess2 == "剪刀" \
                or guess1 == "剪刀" and guess2 == "布" \
                or guess1 == "布" and guess2 == "石头":
            print(f"{player1}出{guess1},{player2}出{guess2},{player1}赢")
        elif guess1 == guess2:
            print(f"{player1}出{guess1},{player2}出{guess2},平局")
        else:
            print(f"{player1}出{guess1},{player2}出{guess2},{player2}赢")


n = int(input("你要玩几次猜拳游戏:"))
for i in range(n):
    finger_guessing()

账号密码三次冻结问题

# 任务5:
# 提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”,则提示正确,
# 否则,提示用户“用户名或者密码错误”,但如果错误达到3次,则提示用户"您的账户已被冻结",退出程序。
#
in_next = 0
for i in range(3):
    user_name = input("请输入用户名:")
    user_pwd = input("请输入密码:")
    if user_name != "admin" or user_pwd != "88888":
        print("用户名或者密码错误!")
        in_next += 1
        if in_next == 3:
            print("您的账户已被冻结")
    else:
        print("正确")
        break

任意进制转换

# 任意进制转换
# def pares():
#     pares_str = ""
#     num3 = int(input("请输入数字:"))
#     base = int(input("请输入转换进制n:"))
#     while num3 != 0:
#         pares_str += str(num3 % base)
#         num3 //= base
#     print(pares_str)
#
#
# pares()
#

九九乘法表

# 1.打印九九乘法:
# 1*1=1
# 1*2=2 2*2=4
# 1*3=3 2*3=6 3*3=9
# for i in range(1, 10):
#     for j in range(1, i + 1):
#         print(f"{j}X{i} = {i * j}\t", end=" ")
#     print()

玩骰子游戏

# # 任务13:
# # 玩家进来以后要买筹码;
# # 在每次掷骰子前,
# #     要下注(50~手里剩余的筹码);
# #     接着要选择买大小;
# #     程序要模仿掷骰子,产生一个1~6的随机数
# #     根据掷骰子的结果,判断玩家的输赢,改变玩家的手里的筹码
# #         如果买大,4~6是赢,1~3是输
# #         如果小,1~3是赢,4~6是输
# #         如果赢了,玩家的筹码+=下注金额
# #         如果输了,玩家的筹码-=下注金额    
# #     提示玩家是否要退出游戏
# #     玩家手里的筹码小于最小下注金额,要强制玩家退出
# # 注意 :先理清楚思路,从宏观上考虑流程,不要考虑每个步骤的细节。流程搞清楚以后,再琢磨每个步骤的细节。然后写代码。
#
#
# def stake():
#     chip = 50
#     while chip > 0:
#         print(f"欢迎进入掷骰子游戏,您的目前筹码为{chip}")
#         Stake = int(input("请输入下注金额:"))
#         if chip < Stake:
#             print("筹码小于最小下注金额,强制玩家退出!")
#             break
#         dice_num = random.randint(1, 6)
#         result_num = "大" if dice_num > 3 else "小"
#         guess = input("请选择买大还是买小:")
#         if guess == result_num:
#             chip += Stake
#             print(f"骰子数是{dice_num}本次猜{guess}赢了,筹码为{chip}")
#
#         else:
#             chip -= Stake
#             print(f"骰子数是{dice_num}本次猜{guess}输了,筹码为{chip}")
#         an = input("玩家是否要退出游戏(y/n):")
#         if an == "y":
#             print("已退出!")
#             break
#     else:
#         print("已退出!")
#
#

打印规则图形

# 任务8:
# 编程实现如下图列出的图形。
# *
# ***
# *****
# *******
#
# for i in range(4):
#     print("*"*(2*i+1))
# 任务9:
# 让用户输入一个数显示下面内容。
# *******       
# ******        
# *****          
# ****           
# ***            
# **             
# *           
#
# for i in range(7,0,-1):
#     print("*"* i)
# 任务10:
# 编程实现如下图列出的图形。
#
#   *              
#   ***        
#  *****    
# *******
#
# for i in range(4):
#     print(" " * (4-i)+"*"*(2*i+1))

# 任务11:
# 编程实现如下图列出的图形。
#   *
#  ***
#  *****
# *******
#  *****
#   ***
#   *
n_11 = int(input("请输入奇位行数:"))
if n_11 % 2==0:
    print("无法打印!")
else:
    for i in range(n_11):
        if i <= n_11 // 2:
            print(" " * (n_11 // 2 - i) + "*" * (2 * i + 1))
        else:
            print(" " * (i - n_11 // 2) + "*" * ((n_11 - i) * 2 - 1))
        pass
    pass

环形缠绕数字图形

# 画图如下
# 0  0 	0 	0 	0
# 0  1 	1 	1 	0
# 0  1 	2 	1 	0
# 0  1 	1 	1 	0
# 0  0 	0 	0 	0
# n = int(input("请输入行数:"))
# for i in range(n):
#     for j in range(n):
#         print(min(i,j,n-i-1,n-j-1),end=" \t")
#     print()
# 5  5 	5 	5 	5
# 5  4 	4 	4 	5
# 5  4 	3 	4 	5
# 5  4 	4 	4 	5
# 5  5 	5 	5 	5
# m = int(input("请输入行数:"))
# for i in range(1,m+1):
#     for j in range(1,m+1):
#         print(max(i,j,m-i+1,m-j+1),end=" \t")
#     print()

孪生数:相邻素数差值为2(n)

# 12.如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数".

# list12 = []
# for i in range(100, 1, -1):
#     for j in range(2, i):
#         if i % j == 0:
#             break
#     else:
#         list12.append(i)
# print(list12)
# for i in range(len(list12)):
#     if list12[i-1] - list12[i] == 2:
#         print(list12[i - 1],list12[i])

家庭四人,年龄不同,3人是平方数,15年前还有3人年龄为平方数

# 11.今有四个人,他们得年龄各不相同,他们年龄总和是129,而其中有三个人的年龄是平方数,
# 若倒退15年,这四人中仍有三个人的年龄是平方数,求他们各自的年龄
# #
list_11 = []
for i in range(129):
    for j in range(129):
        for k in range(129):
            for m in range(129):
                if i*i +j*j+k*k+m ==129 and i!= j and i!= k \
                        and i!= m and j!= k and j!= m and i!= k and i!= m:
                    # print( i*i ,j*j,k*k,m)if i*i >15 and j*j>15 and k*k>15and m>15else None
                    a =i*i
                    b =j*j
                    c = k*k
                    d = m
                    for n in range(1, 13):  # a,b,c,最少有两个减去15还是平方数
                        for x in range(1, 13):  # 无外乎两种可能
                            if a ==n*n +15 and b ==x*x +15 or b ==n*n +15 and c ==x*x +15:
                                if a >15 and b>15 and c>15and d>15 :  # 此时结果已出,但顺序有多种可能
                                    list_11.append(a)  # 查重!
                                    if b not in list_11:
                                        list_11.append(b)
                                        if c not in list_11:
                                            list_11.append(c)
                                            # if d not  in list_11:
                                            list_11.append(d)
                                            print(f"他们各自的年龄组合为:{list_11},\t",end="\n"
                                                  f"十五年前为:{ [i-15 for i in list_11]}")
                                            break

验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除.

# 10.验证:任意一个大于9的整数减去它的各位数字之和所得的差,一定能被9整除.
#
# num_10 = 10
# sum_10 = 0
# while num_10 > 9:
#     str_10 = str(num_10)
#     for i in range(len(str_10)):
#         sum_10 += int(str_10[i])
#     # print(sum_10)
#     # print(num_10)
#     if (num_10 - sum_10) % 9 == 0:
#         # print(f"验证成功!,整数为{num_10},和为{sum_10}")
#         sum_10 = 0
#
#     else:
#         print(f"验证失败!,整数为{num_10},和为{sum_10}")
#     num_10 += 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章