Python之循环语句和字符串

####循环语句####

1+2+3+...100=

"""
# C语言或者Java;
sum = 0
for(int i=1; i<100; i++):
    sum = sum + i
0+1+2+3+...100

# python


>>> range(5)
[0, 1, 2, 3, 4]
>>> range(7)
[0, 1, 2, 3, 4, 5, 6]


>>> help(range)

>>> range(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1,10,2)
[1, 3, 5, 7, 9]
>>> # 拿出1~10之间所有的偶数
... range(2,11,2)
[2, 4, 6, 8, 10]
>>>  # 拿出1~10之间所有的奇数
... range(1,11,2)
[1, 3, 5, 7, 9]

*** range()函数
range(stop): 0~stop-1
range(start, stop): start~stop-1
range(start, stop, step): start~stop-1, step为步长

 

# for循环使用的语法:
    for 变量 in range(10):
        循环需要执行的代码

 

    
    for 变量 in range(10):
        循环需要执行的代码
    else:
        循环执行结束执行的代码


"""

 

sum = 0
for i in range(1,101):   # i=1,2,3....100
    sum = sum + i

print(sum)


# 需求1: 求1~100之间所有偶数的和;


# 需求2: 求1~100之间所有奇数的和;


# 需求3: 用户输入一个整形数, 求该数的阶乘; 3!=3*2*1=6

###用户登陆程序###

"""
用户登陆程序需求:
    1. 输入用户名和密码;
    2. 判断用户名和密码是否正确? (name='root', passwd='westos')
    3. 为了防止暴力破解, 登陆仅有三次机会, 如果超过三次机会, 报错提示;


"""

 

# 为了让登陆代码循环三次
for i in range(3):
    name = input("用户名:")
    passwd = input("密码:")
    if name == 'root' and passwd == 'westos':
        print("登陆成功")
        break
    else:
        print("登陆失败")
        print("您还剩余%d次机会" %(2-i))
else:
    print("登陆次数超过三次, 请等待100s后再次登陆")

###exit_break_continue#####

"""
break: 跳出整个循环, 不会再循环里面的内容;
continue:跳出本次循环, continue后面的代码不再执行, 但是还会继续循环;
exit: 结束程序的运行

 


"""

 

# 0,1,2,3,4....9
for i in range(10):
    if i == 5:
        break
    print(i)

# 0,1,2,3,4....9
for i in range(10):
    if i == 5:
        continue
    print(i)

###break练习,实现命令行提示符雏形####

# 倒入os模块
import os


#for i in range(100):
# 死循环
while True:
    cmd = input("[kiosk@test ]$ ")
    if cmd:
        if cmd == 'exit':
            print('logout')
            break
            print("hello")   # 不会执行
        else:
            print("run %s" %(cmd))
            # 运行shell命令
            os.system(cmd)
    else:
        continue
        print("hello")       # 不会执行的

###for循环练习,实现最大公约数和最小公倍数#####

"""
输入两个数值:
    求两个数的最大公约数和最小公倍数.

 

最小公倍数=(num1*num2)/最大公约数
"""

 

# 2,3
# 2,6

# 1. 输入两个数值: input接收的是字符串类型
num1 = int(input('Num1:'))
num2 = int(input('Num2:'))
# 2. 找出两个数中的最小值
# min_num = min(num1, num2)
min_num = num1 if num1<num2 else num2
# 3. 最大公约数的范围在1~min_num之间;最大公约数就是num1和num2能整除的最大的数;
for i in range(1,min_num+1):  # 1, 2
    # 2%1==0 ; 3%1==0   gys=1
    # 2%2==0   6%2!=0    gys=2
    if num1 % i == 0 and num2 % i == 0:
        # 当循环结束, gys中保存的是最大的约数;
        gys = i
# 4. 最小公倍数
lcm = int((num1*num2)/gys)

print("%s和%s的最大公约数为%s" %(num1, num2, gys))
print("%s和%s的最小公倍数为%s" %(num1, num2, lcm))

####range和xrange####

# python2:
    - range(5): 即刻生成数据, 消耗时间并占用内存;
    - xrange(5): 先生成一个xrange对象, 使用值时才生成数据, 占用内存;


# python3:
    - range(5) 相当与python2里面的xrange;

####循环语句while循环###

"""

while 条件语句:
    满足条件执行的语句
else:
    不满足条件执行的语句

"""

 

# 1. 1+2+3+.....+100

# i+=1  i=i+1
sum = 0
i = 1
while  i <=100:
    sum += i
    i += 1
print(sum)

# 2. 把用户登陆的代码for循环部分改写为while循环;

####while循环练习,猜数字游戏####

"""
# 猜数字游戏                                                                                               
     if , while, break
     1. 系统随机生成一个1~100的数字;
     ** 如何随机生成整型数, 导入模块random, 执行random.randint(1,100);
     2. 用户总共有5次猜数字的机会;
     3. 如果用户猜测的数字大于系统给出的数字,打印“too big”;
     4. 如果用户猜测的数字小于系统给出的数字,打印"too small";
     5. 如果用户猜测的数字等于系统给出的数字,打印"恭喜中奖100万",并且退出循环;

 

# 方法1:
import random

num = random.randint(1,100)

print(num)
for i in range(1,6):
        guess = int(input("plese guess:"))
        if guess > num :
                print("too big")
        elif guess < num :
                print("too small")
        else :
                print("恭喜中奖100万")
                exit()
else:
        print("game over")

""”

# 方法2:


import random
x = random.randint(1,100)
print(x)
trycount = 0
while trycount < 5:
        tk = int(input("你猜:"))
        if tk == x:
                print("恭喜中奖100万")
                break
        elif tk < x:
                print("too small")
                trycount += 1
        else:
                print("too big")
                trycount += 1
else:
        print("没有机会")

###while死循环###

"""
while True:
    pass

 

while 1:  # bool(1)
    pass

 


while 2>1:
    pass
"""

####字符串的特性#####

# 索引

```

>>> s = "hello"
# 正向索引
>>> s[1]
'e'
>>> s[0]
'h'
>>> s[4]
'o'

# 反向索引
>>> s = "hello world"
>>> s[-1]
'd'
>>> s[-2]
'l'
>>> s[-3]
'r'


```


# 切片
s[start:end:step]   # 从start开始到end-1结束, 步长为step;
    - 如果start省略, 则从头开始切片;
    - 如果end省略, 一直切片到字符串最后;
s[1:]
s[:-1]
s[::-1]    # 对于字符串进行反转
s[:]         # 对于字符串拷贝

# 成员操作符

```
>>> s = "hello"
>>> 'h' in s
True
>>> 'hel' in s
True
>>> 'oo' in s
False
>>> 'h' not in s
False
>>> 'oo' not in s
True

```

# 字符串连接


```
>>> a = "hello"
>>> b = "python"
>>> print("%s %s" %(a, b))
hello python
>>> a + b
'hellopython'
>>> a + " " +b
'hello python'


```

# 字符串的重复

```
>>> print("*"*10 + "学生管理系统" + "*"*10)
**********学生管理系统**********

####字符串常用方法_大小写####

```

"""

'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper'
lower, upper, title

##istitle():如果字符串是一个可标题化的字符串,并且至少有一个字符,把单词的第一个字母大写,则该方法返回true,否则返回false。

>>> "Hello".istitle()

True
>>> "hello".istitle()
False
>>> "HelloWorld".istitle()
False
>>> help("HelloWorld".istitle)

>>> "hello".upper()     #转换为大写#
'HELLO'
>>> "heLlo".lower()   #转换为小写#
'hello'
>>> "heLlo".title()      #返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写#
'Hello'
>>> "heLlo".swapcase()    #小写变大写,大写变小写#
'HElLO'


"""

###特性练习,回文数判断###

"""
 
##  题目要求:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样
的整数。

## 示例:

示例 1:  
        输入: 121
        输出: true
示例 2:  
        输入: -121
        输出: false
        解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:  
        输入: 10
        输出: false
        解释: 从右向左读, 为 01 。因此它不是一个回文数。

"""


num = input('Num:');print(num == num[::-1])
# "121"  == "121"
# "-121" == "121-"
# "10" == "01"

###字符串-开头和结尾匹配####

"""
endswith
startswith

"""

filename = "hello.log"
if filename.endswith(".log"):
    print(filename)
else:
    print("error file")


url1 = "file:///mnt"
url2 = "ftp://172.25.254.250/pub/"
url3 = "http://172.25.254.250/index.html"

if url1.startswith("http://"):
    print("爬取网页.......")
else:
    print("不能爬取网页")

###字符串-去掉左右两边空格####

"""

strip
lstrip
rstrip
# 注意: 去除左右两边的空格, 空格为广义的空格, 包括: \n, \t, \r

>>> s = "      hello     "
>>> s.strip()
'hello'
>>> s.lstrip()
'hello     '
>>> s.rstrip()
'      hello'
>>> s = "\nhello     "
>>> s.strip()
'hello'
>>> s = "\thello     "
>>> s.strip()
'hello'


>>> s = "helloh"
>>> s.strip('h')
'ello'
>>> s.strip('he')
'llo'
>>> s.lstrip('he')
'lloh'

center, ljust, rjust

 

>>> print("学生管理系统".center(50, '*'))
****************学生管理系统****************
>>> print("学生管理系统".ljust(50, '*'))
学生管理系统********************************
>>> print("学生管理系统".rjust(50, '*'))
********************************学生管理系统

 


"""

####字符串练习-判断变量名是否合法####

"""

# 变量名是否合法?
# #
# # 变量名可以由字母,数字或者下划线;
# # 变量名只能以字母或者下划线开头;
#
# s = "hello@"
#
# 1. 判断变量名的第一个元素是否为字母或者下划线; s[0]
# 2. 如果第一个元素符合条件, 判断除了第一个元素的其他元素;s[1:]   


"""


# 1. 变量名的第一个字符是否为字母或者下划线?
# 2. 如果是, 继续判断(****);---参考4
# 3. 如果不是, 报错, 不合法;


# 4. 依次判断除了第一个字符之外的其他字符;
# 5. 判断是否为字母数字或者下划线

# eg: "h@ello@"
while True:
    s=input("变量名")
    if s == 'exit':
        print("欢迎下次使用.......")
        break   
    if s[0].isalpha() or s[0]=="_":
        for i in  s[1:]:  
            if not(i.isalnum() or i=="_"):
                print("%s变量名不合法" %(s))
                break           
        else:   
            print("%s变量名合法" %(s))
                                
    else:
        print("%s变量名不合法" %(s))

####字符串练习-菱形####

"""
编写程序, 输出星号组成的菱形.

练习知识点:
    for循环, 字符串center, 字符串重复


"""


#
n = int(input('Num:'))


for i in range(1,n):
    print(('* '*i).center(3*n))
for i in range(n,0,-1):    
    print(('* '*i).center(3*n))

####字符串的搜索和替换###

"""
find:
replace:
count:

>>> s = "hello python , learn python"
>>> s.find('python')
6
>>> s.rfind('python')
21
>>> s.replace('python', 'linux')
'hello linux , learn linux'
>>> s
'hello python , learn python'
>>> s1 = s.replace('python', 'linux')
>>> s1
'hello linux , learn linux'
>>> s
'hello python , learn python'

>>> s.count("python")
2
>>> s.count("p")
2
>>> s.count("i")
0

"""

####字符串的分离和拼接####

"""
split:
join:


>>> ip = "172.25.254.19"
>>> ip1 = "1172.25.254.19"
>>> help(ip1.split)

>>> ip1.split('.')
['1172', '25', '254', '19']
>>> date = "2018-2-30"
>>> date.split("-")
['2018', '2', '30']
>>> date.replace('-', '/')
'2018/2/30'
>>> ip = ['1172', '25', '254', '19']
>>> "".join(ip)
'11722525419'
>>> ":".join(ip)
'1172:25:254:19'
>>> "*".join(ip)
'1172*25*254*19'

"""

####python的常用内置方法#####

"""

>>> min(2,4)
2
>>> max(2,5)
5
>>> sum(range(1,101))
5050
>>> sum(range(2,101,2))
2550
>>> sum(range(1,101,2))
2500

# 枚举: 返回索引值和对应的value值;
>>> for i,v in enumerate('hello'):  
...     print(str(i) +" -----> " + v)
...
0 -----> h
1 -----> e
2 -----> l
3 -----> l
4 -----> o

# zip
>>> s1 = 'abc'
>>> s2 = "123"
>>> for i in zip(s1,s2):
...     print(i)
...
('a', '1')
('b', '2')
('c', '3')


>>> for i in zip(s1,s2):
...     print("".join(i))
...
a1
b2
c3


>>> for i in zip(s1,s2):
...     print("-".join(i))
...
a-1
b-2
c-3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值