python习题练习

习题练习

  • 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
    1.程序分析:利用while语句,条件为输入的字符不为’\n’.
    #用isdigit函数判断是否数字
    #用isalpha判断是否字母
    #isalnum判断是否数字和字母的组合
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
-------------------------------------------------
 Time      :2018/04/03  21:16
 Author    : shanwu
 File Name :0403.py
-------------------------------------------------
"""

a=input("Please input 字符串:")
n=0
m=0
j=0
l=0
for i in a:
    if i.isdigit():
        n=n+1
    elif i.isalpha():
        m=m+1
    elif i == ' ':
        j=j+1
    else:
        l=l+1
print("数字的个数:{0}".format(n))
print("字母的个数:{0}".format(m))
print("空格的个数:{0}".format(j))
print("其他字符的个数:{0}".format(l))

Please input 字符串:adflfl dk( )
数字的个数:0
字母的个数:8
空格的个数:2
其他字符的个数:2

输入一个数字,求出0到数字的阶乘和

n=0
m=1
a=input("please input a number: ")
if a.strip():
    if a.isdigit():
        for i in range(1,int(a)):
            for j in range(1,i+1):
                m =m*j
            n=n+m
            m=1
        print("0到{0}的阶乘和:{1}".format(int(a),n))
    else:
        print("not number")
else:
    print("Don't input space")

# 输出
please input a number: 5
05的阶乘和:33

假如ABCD乘9=DCBA,A=? B=? C=? D=?

for A in range(1, 10):
    for B in range(0, 10):
        for C in range(0, 10):
            for D in range(1, 10):
                start = 1000 * A + 100 * B + 10 * C + D
                end = 1000 * D + 100 * C + 10 * B + A
                if start * 9 == end:
                    print("A={0};B={1};C={2};D={3}".format(A, B, C, D))
                    print("{0} * 9 = {1}".format(start, end))

# 输出
A=1;B=0;C=8;D=9
1089 * 9 = 9801

九宫格

for i in range(1,10):
    for j in [k for k in range(1,10) if (k != i)]:
        for m in [k for k in range(1,10) if ((k!=i) and (k!=j))]:
            for l in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m))]:
                for p in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m) and (k!=l))]:
                    for r in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m) and (k!=l) and (k!=p))]:
                        for t in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m) and (k!=l) and (k!=p) and (k!=r))]:
                            for o in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m) and (k!=l) and (k!=p) and (k!=r) and (k!=t))]:
                                for q in [k for k in range(1,10) if ((k!=i) and (k!=j) and (k!=m) and (k!=l) and (k!=p) and (k!=r) and (k!=t) and (k!=o))]:
                                    if((i+j+m)==(l+p+r)==(t+o+q)==(i+l+t)==(j+p+o)==(m+r+q)==(i+p+q)==(m+p+t)):
                                        print(i,j,m)
                                        print(l,p,r)
                                        print(t,o,q)
                                        print()
#输出
2 7 6
9 5 1
4 3 8

2 9 4
7 5 3
6 1 8

4 3 8
9 5 1
2 7 6

4 9 2
3 5 7
8 1 6

6 1 8
7 5 3
2 9 4

6 7 2
1 5 9
8 3 4

8 1 6
3 5 7
4 9 2

8 3 4
1 5 9
6 7 2

编码

  • 编码
    支持中文的编码:utf-8, gbk, gb2312
    decode 解码
    encode 编码

  • 不写python代码排头,就会报错。

s = "哈哈哈"
print(s)

这个代码文件被执行时就会出错,就是编码出了问题。
python默认将代码文件内容当作asci编码处理,但asci编码中不存在中文,因此抛出异常。
解决问题之道就是要让python知道文件中使用的是什么编码形式,
对于中文,可以用的常见编码有utf-8,gbk和gb2312等。只需在代码文件的最前端添加如下:
`#-*- coding:utf-8 -*-`
  • Pycharm运行程序正常,控制台运行程序乱码
  • 解决办法:
    1. 更改头文件的编码格式
      # -*- coding:gbk -*-
      就可以在windows控制台打印出来正常的字体了。
    2. 下面这种情况
#-*-coding:utf-8 -*-
s = u"哈哈"
print(s)
print(type(s))      #unicode
m = "哈哈"
print(m)
print(type(m))       #str

说明:
文件申明是utf-8的编码,识别“哈哈”以后,以unicode对象的形式存在。如果我们用type查看,存储形式是unicode,python在向控制台输出unicode对象的时候会自动根据输出环境的编码进行转换。如果输出的不是unicode对象而是str类型。则会按照字符串的编码输出字符串。从而出现utf8没法在gbk编码的控制台展现

编码和解码

#-*- coding:utf-8 -*-
s = "中文"
s.encode("gbk")
报错了, 为什么呢?
  • python转码的过程:
    源有编码 -> unicode编码 -> 目的编码
    Python 会自动的先将 s 解码为 unicode ,然后再编码成 gbk。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。
  • 可以使用下面的方法
    s.decode(“utf-8”).encode(“gbk”)

猜你喜欢

转载自blog.csdn.net/wushan1992/article/details/79904722
今日推荐